STM32 CAN接收/发送错误寄存器如何清零?

在STM32的CAN控制器中,接收错误计数器和发送错误计数器都是由CAN_ESR寄存器来控制的。要清零接收错误计数器和发送错误计数器,可以使用如下代码:



c
Copy code
CAN_HandleTypeDef hcan;
//清零发送错误计数器
hcan.Instance->ESR |= CAN_ESR_TEC;
//清零接收错误计数器
hcan.Instance->ESR |= CAN_ESR_REC;

其中,hcan是CAN控制器的句柄,CAN_ESR_TEC和CAN_ESR_REC分别表示发送错误计数器和接收错误计数器。
在清零之前,需要先确保CAN控制器已经停止了,可以使用如下代码停止CAN控制器:

c
Copy code
//停止CAN控制器
HAL_CAN_Stop(&hcan);

需要注意的是,在CAN总线中,错误计数器是非常重要的参数,它可以反映CAN总线的质量和稳定性。因此,在清零错误计数器之前,应该先检查错误发生的原因,并采取措施来解决问题,以确保CAN总线的正常工作。



要清零STM32的CAN接收/发送错误寄存器,可以通过以下步骤实现:

// 定义CAN_InitTypeDef结构体变量

CAN_InitTypeDef        CAN_InitStructure;

// CAN控制器初始化

CAN_InitStructure.CAN_TTCM = DISABLE;

CAN_InitStructure.CAN_ABOM = ENABLE;

CAN_InitStructure.CAN_AWUM = DISABLE;

CAN_InitStructure.CAN_NART = ENABLE;

CAN_InitStructure.CAN_RFLM = DISABLE;

CAN_InitStructure.CAN_TXFP = ENABLE;

CAN_InitStructure.CAN_Mode = CAN_Mode_Init;

CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;

CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq;

CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;

CAN_InitStructure.CAN_Prescaler = 3;

CAN_Init(CAN1, &CAN_InitStructure);

// 将CAN控制器从初始化模式转换为正常模式

CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;

CAN_Init(CAN1, &CAN_InitStructure);

CAN_OperatingModeRequest(CAN1, CAN_OperatingMode_Normal);

// 清零REC/TEC寄存器

CAN_ResetErrorCounter(CAN1);

注意,如果错误计数器REC/TEC在发生错误后一段时间内没有更新,可以通过向CAN控制器发送一个错误标志位来更新这些寄存器的值。这可以通过调用CAN_SendMessage()函数并将CAN消息类型设置为CAN_MsgType_Data来完成。



在STM32单片机的CAN总线出现发送和接收错误帧时,可以通过软件清除CAN控制器中的REC/TEC寄存器值,而无需重启整个芯片。以下是一些可能会导致你的方法无法成功的原因以及可以尝试的其他方法:



可以尝试使用以下方法清零CAN控制器的REC/TEC寄存器:



可以使用CAN控制器的“BxCAN软件初始化”模式来清零REC/TEC寄存器。具体方法如下:



扩展阅读:stm32所有型号对照表 ... stm32 i2c ... stm32can接口 ... stm32 can 发送失败 ... can stm32 周立功 ... spwm stm32 ... stem 86官网 ... 官网下载stm32 ... stm32 can数据采集 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网