c - 是否可以使用STM32生成CAN总线错误?

标签 c embedded stm32 can-bus

对于我的一个项目,我想生成一些 CAN 总线错误(例如位填充或 CRC 错误)。

这只是我的一个小想法,但你认为有可能实现吗?我知道所有协议(protocol)内容都由 CAN 驱动程序处理,但我也不是 CAN 通信方面的专家,所以也许我有一点希望可以实现这种错误生成。你怎么看?

我正在使用 STM32 微 Controller 和 TJA CAN 收发器。

最佳答案

这根本不是由软件处理的,而是由片上 CAN Controller 硬件处理的。尽管可以通过各种硬件技巧来实现,但您将无法单独使用软件添加诸如填充或 CRC 错误之类的内容。

产生大量错误的一种简单方法是总线上只有一个节点,或者将 CAN 高/低短路。不过,如果您这样做,您将很快进入错误主动状态然后错误被动状态。

更微妙的方法是将 MCU 和收发器之间的 Tx/Rx 线拉到错误的电平。如果将其中一个连接到外部 GPIO 引脚,然后在将消息存储到 CAN 缓冲区后直接偷偷输出一个脉冲,就会导致错误。特别是如果长于 6 位 = 填充错误。这些很可能与协议(protocol)同步,所以这可能就是您想要的。您可能需要在实际的 tx/rx 引脚上串联添加 10k,这样它们的驱动强度就比 GPIO 弱。

另一种方法是让 2 个节点同时发送相同的仲裁字段(ID、RTR + misc 位),但数据不同。这可以单独通过软件实现,但这意味着您需要有 2 个哑节点,除了以 100% 的总线负载一遍又一遍地发送相同的消息之外什么都不做。

关于c - 是否可以使用STM32生成CAN总线错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55477177/

相关文章:

c - 显示此符号 ╠ 而不是所需字符

c - 根据 C 规范,中断是信号吗?

atoi - STM32 atoi 和 strtol 有时会丢失前 2 位数字

assembly - GCC 和 STM32 的堆栈帧不正确

c - stm32f4发现CAN发送

c - 如何使用静态 libcurl 编译程序?

c++ - 黑人 : processor grids that do not use all MPI cores

c - 为什么我在 malloc 时遇到段错误?

c - ARM : How does objcopy know which sections from an elf to include in a binary or ihex?

c - 为什么这个宏体中有类型转换?