关于STM32 CAN 发送失败问题解释

首先解释一下CAN几个配置的功能:

1. CAN_InitStruct.CAN_TTCM = DISABLE;

这个只在某些CAN标准中使用,就设置为DISABLE。


2.CAN_InitStruct.CAN_ABOM = ENABLE;

这个位我们使能该功能,使用该功能可以在节点出错离线后适时的自动恢复,不需要软件干预。


3.CAN_InitStruct.CAN_AWUM = ENABLE;

这个位我们使能该功能,使用该功能可以在监测到总线活动后自动唤醒。


4.CAN_InitStruct.CAN_NART = DISABLE;

注意这个功能,这里DISABLE代表的是使用自动重传的功能,ENABLE是代表不使用自动重传的功能,我看了好多书籍上注释都写错了。


5.CAN_InitStruct.CAN_RFLM = DISABLE;

是否锁定FIFO,如果锁定,FIFO溢出会丢弃新数据;如果不锁定,FIFO溢出时,新数据会覆盖旧数据。


6.CAN_InitStruct.CAN_TXFP = DISABLE;

使能时会以存入发送邮箱的顺序进行发送,失能时,以报文ID的优先级发送。

这里遇到的问题是,发现在不使用自动重传的功能时,如果由于总线竞争导致发送失败,数据就丢掉了。所以在不是一应一答的环境中使用CAN的时候,建议开启自动重传功能。

你可能感兴趣的:(STM32,stm32,单片机,嵌入式硬件)