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

[复制链接]
804|15
 楼主| Hitomi22 发表于 2025-4-19 23:00 | 显示全部楼层 |阅读模式
用 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 | 显示全部楼层
可以手动给传感器断电再上电试试,看看是否与复位不同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

60

帖子

0

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