[STM32F4] HAL_CAN_Init不会复位MSR寄存器中的SLAK位

[复制链接]
836|10
 楼主| 唐纳德d 发表于 2025-3-7 14:00 | 显示全部楼层 |阅读模式
使用STM32开发板(STM32F407)用与CAN总线。在CUBE IDE程序中,自动生成了MX_CAN2_Init函数。这个函数调用了另一个函数HAL_CAN_Init。在运行时,HAL_CAN_Init会复位MCR寄存器中的SLEEP位,但不会复位MSR寄存器中的SLAK位。导致CAN状态不正常。没找到哪里出错了?
公羊子丹 发表于 2025-3-8 07:33 | 显示全部楼层
你在HAL_CAN_Init后面加个HAL_Delay试试,看看是不是复位过程没完成。
周半梅 发表于 2025-3-8 07:34 | 显示全部楼层
可能是硬件问题,检查一下CAN总线的终端电阻是否正确连接。
帛灿灿 发表于 2025-3-8 07:36 | 显示全部楼层
试试手动清SLAK位,直接操作MSR寄存器看看状态有没有变化。
童雨竹 发表于 2025-3-8 07:37 | 显示全部楼层
HAL库有时候不太可靠,要不你用寄存器方式初始化CAN?
万图 发表于 2025-3-8 07:39 | 显示全部楼层
你有调用HAL_CAN_Start吗?如果SLAK位没清,可能是没正确进入正常模式。
Wordsworth 发表于 2025-3-8 07:40 | 显示全部楼层
ST的CAN外设有时候初始化顺序很重要,参考一下官方例程看看有没有区别。
Bblythe 发表于 2025-3-8 07:42 | 显示全部楼层
试试在HAL_CAN_Init后面加上HAL_CAN_ActivateNotification,看会不会有反应?
Pulitzer 发表于 2025-3-8 07:43 | 显示全部楼层
SLAK位一直不清除的话,可以试试先手动置SLEEP模式,再清除看看效果。
Uriah 发表于 2025-3-8 07:44 | 显示全部楼层
你用的时钟配置是默认的吗?CAN的时钟来源不对的话可能影响状态切换。
Clyde011 发表于 2025-3-8 07:45 | 显示全部楼层
你用的CubeIDE是什么版本?有些版本HAL库可能有bug,可以试试升级或用旧版库。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部