STM32CubeIDE 进入调试模式时,I2c 不工作
用 Nucleo STM32F446Re 上提供的 STM 库 (lsm6dsl) 读取 IKS01A2 板的加速度计和陀螺仪。修改了 I2c,以便能够与使用 CubeMx 的电路板一起使用。现在,只有将 Nucleo 插入 USB 时,i2C 通信才有效。以调试模式启动时,I2c ***不会通信正常。从 USB 拔下板子并再次插入时,才会再次启动。此外,在调试模式下按下复位键也无法使 I2C正常通信。在网上搜索了很长时间,也没有找到类似的帖子。 如果 LSM6DSL 或其他 I2C 设备在启动或复位时未被正确初始化,它可能会一直拉低 SDA 或 SCL,造成“总线忙(BUSY)”状态,从而让 STM32 的 HAL_I2C 初始化失败。 感觉像是调试模式下系统时钟没跑起来,I2C总线时序乱了。试试在CubeMX里确认下debug模式下的时钟配置。 会不会是低功耗模式相关的设置影响了调试?调试模式下 MCU 不休眠,I2C就不走了。 我遇到过类似问题,最后发现是 HAL_Delay 在调试暂停时不准了,影响通信时序。 看着像是调试状态下阻塞住了中断处理,I2C 中断方式的话调试态下经常不触发。 你可以试试在调试配置里关掉 "halt on reset",可能能绕过这个问题。 建议在调试器连接后,手动点一下 resume,看 I2C 通信是不是能继续跑。 是不是用了ST的调试SWV trace或ITM通道?可能抢了I2C的引脚。 有时候 STLink 和目标板复位管理冲突,你可以试试用软件复位代替硬复位看是否有改善。 可能是你初始化I2C的代码依赖某些外设还没ready,在调试模式下执行顺序被打断了。 实在不行可以在 main 函数加个 while (!HAL_I2C_IsDeviceReady(...)) 来等传感器准备好,调试状态下初始化顺序经常不对。 可以手动给传感器断电再上电试试,看看是否与复位不同。
页:
[1]