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

时间:2019-04-02 14:24:24

标签: c embedded stm32 can-bus

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

这只是我的一个小主意,但您认为有可能实现吗?我知道所有协议内容都是由CAN驱动程序处理的,但是我也不是CAN通信专家,所以也许我有点希望可以实现此错误生成。你觉得呢?

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

1 个答案:

答案 0 :(得分:6)

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

一种容易产生大量错误的简便方法是在总线上只有一个节点,或者使CAN高/低短路。如果这样做,您将迅速进入主动错误状态,然后被动被动状态。

更巧妙的方法是将MCU和收发器之间的Tx / Rx线拉到错误的水平。如果将其中之一连接到外部GPIO引脚,然后在将消息存储在CAN缓冲区中之后直接潜入一个脉冲,则会导致错误。特别是如果超过6位=填充错误。这些很可能与协议保持了很好的同步,因此这可能就是您想要的。您可能需要在实际的tx / rx引脚上串联添加约10k,这样它们才能获得比GPIO弱的驱动强度。

另一种方法是让2个节点一次发送相同的仲裁字段(ID,RTR + misc位),但发送不同的数据。仅通过软件就可以实现这一点,但这意味着您需要让2个哑节点什么也不做,只能在100%总线负载下一次又一次地发送相同的消息。