完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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个回答
|
|
在你的问题中提到,“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控制器停止发送数据的原因,需要进一步分析硬件配置、程序逻辑和实际情况。你可以根据上述提示检查相关因素,并根据具体情况进行调试和修改。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
568浏览 3评论
593浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:34 , Processed in 0.678211 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号