微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

STM32F103RB BxCAN 通信

如何解决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 位决定。

  1. CAN->MCR = 0 -> 最后(第三个)消息被新到达的消息覆盖(销毁)。前(最旧的)2 条消息将被保留,直到您阅读它们。
  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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?