这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 【我踩过的那些坑】+I2C设备通信失败的低级错误

共4条 1/1 1 跳转至

【我踩过的那些坑】+I2C设备通信失败的低级错误

高工
2025-10-20 18:42:12     打赏

大家好,分享一个用STM32F103调试I2C的坑。项目中用MPU6050传感器,配置I2C1(PB6、PB7)读取数据。代码照例用STM32CubeMX生成,初始化正常,但读数据总是返回0xFF,设备压根没响应!

折腾半天,检查硬件、换引脚、测波形都正常,最后发现问题:忘了使能I2C时钟!CubeMX生成的代码里,RCC的I2C1时钟默认没开。解决方案超简单,在初始化前加一句:

__HAL_RCC_I2C1_CLK_ENABLE();

重新编译下载,通信正常,数据秒读。浪费了一下午,就因为这低级错误,血压飙升!教训:用CubeMX时,检查时钟配置要仔细,尤其是外设使能。

这个坑小但烦人,分享给新手朋友,少走弯路。欢迎讨论~






关键词: 坑 I2C 设备    

高工
2025-10-20 20:28:05     打赏
2楼

咋发现是因为时钟没使能的?


高工
2025-10-21 02:19:30     打赏
3楼

发现I2C时钟没使能的过程挺曲折的。起初用STM32F103调试MPU6050,I2C读数据一直返回0xFF。怀疑过硬件连接、地址配置,甚至换了块开发板,结果一样。查了STM32CubeMX生成的代码,初始化函数里只有GPIO和I2C外设配置,没看到时钟使能。翻RM0008参考手册,确认I2C1需要RCC_APB1ENR寄存器的I2C1EN位使能时钟。对比发现,CubeMX默认没勾选I2C1的时钟选项!用代码生成工具时,检查RCC配置不能偷懒!



高工
2025-10-22 07:51:05     打赏
4楼

cube 软件生成的底层代码,都需要自己去使能的


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]