Hitomi22 发表于 2025-4-19 23:00

STM32CubeIDE 进入调试模式时,I2c 不工作

用 Nucleo STM32F446Re 上提供的 STM 库 (lsm6dsl) 读取 IKS01A2 板的加速度计和陀螺仪。修改了 I2c,以便能够与使用 CubeMx 的电路板一起使用。
现在,只有将 Nucleo 插入 USB 时,i2C 通信才有效。以调试模式启动时,I2c ***不会通信正常。从 USB 拔下板子并再次插入时,才会再次启动。此外,在调试模式下按下复位键也无法使 I2C正常通信。在网上搜索了很长时间,也没有找到类似的帖子。

回复就哭哭 发表于 2025-4-30 23:46

如果 LSM6DSL 或其他 I2C 设备在启动或复位时未被正确初始化,它可能会一直拉低 SDA 或 SCL,造成“总线忙(BUSY)”状态,从而让 STM32 的 HAL_I2C 初始化失败。

公羊子丹 发表于 2025-5-26 07:23

感觉像是调试模式下系统时钟没跑起来,I2C总线时序乱了。试试在CubeMX里确认下debug模式下的时钟配置。

周半梅 发表于 2025-5-26 07:25

会不会是低功耗模式相关的设置影响了调试?调试模式下 MCU 不休眠,I2C就不走了。

帛灿灿 发表于 2025-5-26 07:26

我遇到过类似问题,最后发现是 HAL_Delay 在调试暂停时不准了,影响通信时序。

童雨竹 发表于 2025-5-26 07:27

看着像是调试状态下阻塞住了中断处理,I2C 中断方式的话调试态下经常不触发。

万图 发表于 2025-5-26 07:28

你可以试试在调试配置里关掉 "halt on reset",可能能绕过这个问题。

Wordsworth 发表于 2025-5-26 07:29

建议在调试器连接后,手动点一下 resume,看 I2C 通信是不是能继续跑。

Bblythe 发表于 2025-5-26 07:30

是不是用了ST的调试SWV trace或ITM通道?可能抢了I2C的引脚。

Pulitzer 发表于 2025-5-26 07:31

有时候 STLink 和目标板复位管理冲突,你可以试试用软件复位代替硬复位看是否有改善。

Uriah 发表于 2025-5-26 07:32

可能是你初始化I2C的代码依赖某些外设还没ready,在调试模式下执行顺序被打断了。

Clyde011 发表于 2025-5-26 07:32

实在不行可以在 main 函数加个 while (!HAL_I2C_IsDeviceReady(...)) 来等传感器准备好,调试状态下初始化顺序经常不对。

t60yz 发表于 2025-5-31 23:43

可以手动给传感器断电再上电试试,看看是否与复位不同。
页: [1]
查看完整版本: STM32CubeIDE 进入调试模式时,I2c 不工作