STM32F103RB BxCAN通信[关闭]
Posted
技术标签:
【中文标题】STM32F103RB BxCAN通信[关闭]【英文标题】:STM32F103RB BxCAN Communication [closed] 【发布时间】:2021-05-21 13:36:28 【问题描述】:我正在研究 STM32F103RB Nucleo 板。我想知道 CAN 消息在接收数据时如何在 FIFO 中隔离? FIFO 满后(超过 3 条消息)会发生什么?
【问题讨论】:
请阅读How to ask 并更新您的问题。 这个问题到底怎么不清楚?对我来说似乎很清楚,两个人能够回答。我会投票重新开放。 【参考方案1】:当您配置过滤器库时,您还指定了接收邮箱(您有 2 个)。一个过滤器组接受的消息进入相关邮箱。
如果启用,FIFO(邮箱)溢出会触发中断。 FIFO 的行为和传入消息的命运由CAN->MCR
寄存器的RFLM
位决定。
RFLM
= 0 -> 最后(第 3 条)消息被新到达的消息覆盖(销毁)。前(最旧的)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。以上是关于STM32F103RB BxCAN通信[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
STM32学习笔记 二基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发
STM32学习笔记 二基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发