打印
[STM32F4]

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

[复制链接]
364|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寄存器看看状态有没有变化。

使用特权

评论回复
5
童雨竹| | 2025-3-8 07:37 | 只看该作者
HAL库有时候不太可靠,要不你用寄存器方式初始化CAN?

使用特权

评论回复
6
万图| | 2025-3-8 07:39 | 只看该作者
你有调用HAL_CAN_Start吗?如果SLAK位没清,可能是没正确进入正常模式。

使用特权

评论回复
7
Wordsworth| | 2025-3-8 07:40 | 只看该作者
ST的CAN外设有时候初始化顺序很重要,参考一下官方例程看看有没有区别。

使用特权

评论回复
8
Bblythe| | 2025-3-8 07:42 | 只看该作者
试试在HAL_CAN_Init后面加上HAL_CAN_ActivateNotification,看会不会有反应?

使用特权

评论回复
9
Pulitzer| | 2025-3-8 07:43 | 只看该作者
SLAK位一直不清除的话,可以试试先手动置SLEEP模式,再清除看看效果。

使用特权

评论回复
10
Uriah| | 2025-3-8 07:44 | 只看该作者
你用的时钟配置是默认的吗?CAN的时钟来源不对的话可能影响状态切换。

使用特权

评论回复
11
Clyde011| | 2025-3-8 07:45 | 只看该作者
你用的CubeIDE是什么版本?有些版本HAL库可能有bug,可以试试升级或用旧版库。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

9

帖子

0

粉丝