打印
[STM32F4]

STM32F407开发 CAN通信程序HAL_CAN_Init 被重置为 SLEEP

[复制链接]
353|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
内核558|  楼主 | 2025-3-21 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用 STM32F407开发 CAN通信程序。
使用 HAL 库。在 CUBE IDE 程序中,自动生成 MX_CAN2_Init 函数。
调用 HAL_CAN_Init 的另一个函数。在运行时,HAL_CAN_Init 被重置为 SLEEP 模式
在 MCR 寄存器中,但未重置 SLAK 位 MSR 寄存器 。
导致CAN 无法正常。

使用特权

评论回复
沙发
classroom| | 2025-3-21 12:34 | 只看该作者
检查CAN外设的时钟源和时钟分频设置是否正确。

使用特权

评论回复
板凳
laocuo1142| | 2025-3-21 16:20 | 只看该作者
可能是引脚配置问题。

使用特权

评论回复
地板
powerantone| | 2025-3-21 22:00 | 只看该作者
可能是硬件连接问题。

使用特权

评论回复
5
flycamelaaa| | 2025-3-21 23:00 | 只看该作者
检查初始化代码参数是否都正确设置。

使用特权

评论回复
6
Wordsworth| | 2025-3-22 07:45 | 只看该作者
检查 BXCAN 的 MSR 状态,有时候 SLEEP 位不会自动清,可能需要手动写 0。

使用特权

评论回复
7
Bblythe| | 2025-3-22 07:46 | 只看该作者
试试手动修改 MCR,在 HAL_CAN_Init 之后,直接 CAN->MCR &= ~CAN_MCR_SLEEP; 看看能不能恢复。

使用特权

评论回复
8
Pulitzer| | 2025-3-22 07:47 | 只看该作者
是不是 NVIC 里 CAN 相关的中断没配置好?有些情况下 CAN 需要正确的中断才能正常工作。

使用特权

评论回复
9
Uriah| | 2025-3-22 07:49 | 只看该作者
尝试完全复位 CAN 外设,可以 __HAL_RCC_CAN1_FORCE_RESET() 之后再 __HAL_RCC_CAN1_RELEASE_RESET()。

使用特权

评论回复
10
Clyde011| | 2025-3-22 07:50 | 只看该作者
用 ST 官方例程对比看看,可能是 CubeMX 生成的代码有些默认设置不适配你的硬件环境。

使用特权

评论回复
11
公羊子丹| | 2025-3-22 07:51 | 只看该作者
检查一下时钟配置,CAN 需要正确的时钟源,特别是 APB1 时钟,可能频率没对上。

使用特权

评论回复
12
周半梅| | 2025-3-22 07:52 | 只看该作者
HAL_CAN_Init 之后要手动退出 SLEEP 模式,可以试试调用 HAL_CAN_RequestLeaveSleep()。

使用特权

评论回复
13
童雨竹| | 2025-3-22 07:53 | 只看该作者
看看 CAN 的 MCR 寄存器,是不是 SLEEP 位被误设置了?有可能是 HAL_CAN_Init 里的某个默认配置导致的。

使用特权

评论回复
14
帛灿灿| | 2025-3-22 07:54 | 只看该作者
如果 SLAK 位没清除,说明 CAN 还是处于低功耗模式,试试直接操作 CAN->MCR 清除 SLEEP。

使用特权

评论回复
15
万图| | 2025-3-22 07:55 | 只看该作者
是不是 HAL_CAN_Start() 没有调用?HAL 库初始化完 CAN 之后,必须显式调用 HAL_CAN_Start() 才能正常工作。

使用特权

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

本版积分规则

13

主题

13

帖子

0

粉丝