Stm32 固件库中关于NART的误解
禁止自动重传模式(NART)
该模式主要用于满足CAN标准中,时间触发通信选项的需求。通过对CAN_MCR寄存器的NART位置’1’,来让硬件工作在该模式。
在该模式下,发送操作只会执行一次。如果发送操作失败了,不管是由于仲裁丢失或出错,硬件都不会再自动发送该报文。
网上有很多can的程序在注释的时候有这样的错误:
将 CAN_InitStructure.CAN_NART=DISABLE理解成为失能自动重传
但是NART的英文全称应该是no automatic retransmission,也就是没有自动重传。
那么CAN_InitStructure.CAN_NART=DISABLE的意思就是使能自动重传。(双重否定等于肯定)
另外对照stm32的数据手册和固件库的相关代码可以发现这一点:
/* Set the no automatic retransmission */
if (CAN_InitStruct->CAN_NART == ENABLE)
{
CAN->MCR |= MCR_NART;
}
else
{
CAN->MCR &= ~MCR_NART;
}
根据上面代码和文字,可以看出CAN->MCR |= MCR_NART为禁止自动重传模式。