【问题标题】:STM32F103RB BxCAN Communication [closed]STM32F103RB BxCAN通信[关闭]
【发布时间】:2021-05-21 13:36:28
【问题描述】:

我正在研究 STM32F103RB Nucleo 板。我想知道 CAN 消息在接收数据时如何在 FIFO 中隔离? FIFO 满后(超过 3 条消息)会发生什么?

【问题讨论】:

  • 请阅读How to ask 并更新您的问题。
  • 这个问题到底怎么不清楚?对我来说似乎很清楚,两个人能够回答。我会投票重新开放。

标签: stm32 can-bus nucleo


【解决方案1】:

当您配置过滤器库时,您还指定了接收邮箱(您有 2 个)。一个过滤器组接受的消息进入相关邮箱。

如果启用,FIFO(邮箱)溢出会触发中断。 FIFO 的行为和传入消息的命运由CAN->MCR 寄存器的RFLM 位决定。

  1. RFLM = 0 -> 最后(第 3 条)消息被新到达的消息覆盖(销毁)。前(最旧的)2 条消息会一直保留,直到您阅读它们为止。
  2. RFLM = 1 -> FIFO 被锁定。新到达的消息被丢弃。保留最早的 3 条消息。

【讨论】:

    【解决方案2】:

    FIFO 满后(超过 3 条消息)会发生什么?

    那么您基本上就完成了 - 您将在 Rx FIFO 溢出时丢失数据,这在 CAN 实时系统中通常是不可接受的。因此,如果您的 MCU 太忙而无法始终满足 3 条消息的最后期限,您将不得不实现一些带有中断 + 环形缓冲区的丑陋系统。

    这就是为什么 CAN 控制器从 90 年代末/2000 年代初开始使用大约 5 到 8 个消息接收缓冲区的原因之一。 BxCAN 显然很古老,因为它比那些有 20 多年历史的控制器还要糟糕。

    希望您可以对消息进行 DMA 处理,这比提到的中断/环形缓冲区复杂性要漂亮得多。如果这不是一个选项,那么您也许应该改用现代 CAN 控制器。基本上市场上的任何其他 CAN 控制器都有比这个更大的 rx FIFO。

    【讨论】:

    • 这个 CAN 控制器嵌入(内部)在各种 STM32 模型中。不幸的是,它不支持 DMA。
    • @Tagli 是的,我知道它是嵌入的。因此,如果 CAN 对您很重要,那么您可能应该选择另一个 MCU。以 SPC5 为例,如果你喜欢 ST。
    猜你喜欢
    • 2010-10-23
    • 2021-08-18
    • 2017-09-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多