STM32
直播中

半导体开发

10年用户 875经验值
擅长:可编程逻辑
私信 关注
[问答]

STM32F765的CAN1和CNA2在发送十帧左右数据后停止发送,为什么?

STM32F765芯片上电后以1秒的周期,CAN1和CNA2定时发送一帧数据,CAN1和CNA2在发送十帧左右数据后停止发送,断电查看发现是邮箱0、1、2状态不对。用的hal库,在HAL_CAN_Transmit函数下
if(((hcan->Instance->TSR CAN_TSR_TME0) == CAN_TSR_TME0) ||((hcan->Instance->TSR CAN_TSR_TME1) == CAN_TSR_TME1) ||((hcan->Instance->TSR CAN_TSR_TME2) == CAN_TSR_TME2)){
...................
}else{/[i] Change CAN state /hcan->State = HAL_CAN_STATE_ERROR;
/[i] Return function status /return HAL_ERROR;}
程序运行进入了else下hcan->State = HAL_CAN_STATE_ERROR,请教下是什么原因导致的?

回帖(1)

李秀珍

2024-4-1 16:56:43
在你的问题中提到,“CAN1和CAN2在发送十帧左右数据后停止发送”,这种情况可能有多种原因,例如:

1. 同时发送的帧数过多导致CAN发送邮箱满了。每个CAN控制器有有限数量的发送邮箱,当发送邮箱满时,就无法继续发送数据。你可以通过检查CAN控制器的状态寄存器(TSR)中的相关位来确定发送邮箱的状态。如果发送邮箱已满,你可以选择等待发送成功后再继续发送数据,或者使用中断或DMA方式进行CAN数据发送。

2. CAN总线上的错误导致CAN控制器停止发送数据。CAN总线上的错误可能包括总线冲突、传输错误等。当发生错误时,CAN控制器会进入错误状态,并停止发送数据。你可以通过检查CAN控制器的状态寄存器(TSR)中的错误位来确定是否发生了错误。一旦发生错误,你应该在处理错误后重新初始化CAN控制器,以使其恢复正常操作。

3. 芯片的CAN硬件配置有误。在使用CAN功能之前,你需要正确配置每个CAN控制器的定时器和过滤器等参数。如果配置不正确,可能会导致CAN控制器无法发送数据。确保你已正确配置了CAN控制器的相关参数,并根据需要进行调整。

在你提供的代码片段中,你通过调用HAL_CAN_Transmit函数来发送数据,并在函数中检查发送邮箱的状态。当发送邮箱为空闲时,你可以发送新的数据。当发送邮箱不为空闲时,你将CAN控制器状态设置为错误状态,并返回函数。这是一个基本的错误处理逻辑,但你需要在其他地方进一步处理错误状态,并针对不同的错误进行适当的处理。

总之,找出导致CAN控制器停止发送数据的原因,需要进一步分析硬件配置、程序逻辑和实际情况。你可以根据上述提示检查相关因素,并根据具体情况进行调试和修改。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分