STM32F103RB BxCAN通信

STM32F103RB BxCAN Communication

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

配置过滤器组时,您还指定了接收邮箱(您有 2 个)。被一个过滤器组接受的邮件进入关联的邮箱。

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

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

And what happens after FIFO is full(more than 3 messages)?

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

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

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