STM32中CAN报文自动重传在标准库与HAL库中的差异
文章目录
前言
对于stm32的can配置中报文自动重传的开启和关闭,标准库和HAL库的配置针对开启和关闭是相反的,因此要注意是否配置的值是自己需要的。
一、can重传在标准库中的配置
can配置代码:
can.CAN_NART = DISABLE; //报文自动重传配置
FunctionalState CAN_NART; /*!< Enable or disable the no-automatic
retransmission mode. This parameter can be
set either to ENABLE or DISABLE. */
/* Set the no automatic retransmission */
if (CAN_InitStruct->CAN_NART == ENABLE)
{
CANx->MCR |= CAN_MCR_NART;
}
else
{
CANx->MCR &= ~(uint32_t)CAN_MCR_NART;
}
DISABLE代表的是开启自动重传,ENABLE代表的是关闭自动重传。
二、can重传在HAL库中的配置
can配置代码:
hcan.Init.AutoRetransmission = ENABLE;
FunctionalState AutoRetransmission; /*!< Enable or disable the non-automatic retransmission mode.
This parameter can be set to ENABLE or DISABLE. */
/* Set the automatic retransmission */
if (hcan->Init.AutoRetransmission == ENABLE)
{
CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART);
}
else
{
SET_BIT(hcan->Instance->MCR, CAN_MCR_NART);
}
DISABLE代表的是关闭自动重传,ENABLE代表的是开启自动重传。
总结
通过最终的寄存器配置可以发现,针对can报文重传,其实标准库中应该叫做是否开启禁用自动报文重传,而HAL库则就是是否开启自动报文重传,在can的配置中标准库和HAL库中针对ENABLE和DISABLE的定义貌似HAL库更加合理些。
作者:i0o0o0o