如何解决STM32F103RB BxCAN 通信
我正在研究 STM32F103RB Nucleo 板。我想知道在接收数据时如何在 FIFO 中隔离 CAN 消息? FIFO 已满(超过 3 条消息)后会发生什么?
解决方法
当您配置过滤器组时,您还指定了接收邮箱(您有 2 个)。一个过滤器组接受的邮件进入关联的邮箱。
FIFO(邮箱)溢出可以触发中断如果启用。 FIFO 的行为和传入消息的命运由 for i in range(0,101,5):
wage = i/100
l_wages.append(wage)
numbers = l_wages
result = [list(seq) for i in range(len(numbers),-1) for seq in itertools.combinations(numbers,i) if sum(seq) == 1.0]
result
寄存器的 RFLM
位决定。
-
CAN->MCR
= 0 -> 最后(第三个)消息被新到达的消息覆盖(销毁)。前(最旧的)2 条消息将被保留,直到您阅读它们。 -
RFLM
= 1 -> FIFO 被锁定。新到达的消息被丢弃。保留最旧的 3 条消息。
FIFO 已满(超过 3 个消息)后会发生什么?
然后你基本上就完成了 - 你会在 Rx FIFO 溢出时丢失数据,这在 CAN 实时系统中通常是不可接受的。因此,如果您的 MCU 太忙而无法始终满足 3 个消息的截止日期,您将不得不实现一些带有中断 + 环形缓冲区的丑陋系统。
这就是为什么 90 年代末/ 2000 年代初的 CAN 控制器开始使用大约 5 到 8 个消息接收缓冲区的原因之一。 BxCAN 显然是古老的,因为它比那些 20 多年的控制器更糟糕。
希望您可以 DMA 消息,这比提到的中断/环形缓冲区复杂性要漂亮得多。如果这不是一个选项,那么您或许应该改用现代 CAN 控制器。基本上市场上的任何其他 CAN 控制器都具有比这个更大的 rx FIFO。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。