上拉电阻焊了,示波器也能看到波形,但程序就是卡在HAL_I2C_Master_Transmit的ACK等待里。问题往往不在电阻本身。

1、电阻焊了不等于电路通了
上拉电阻的作用是把SDA和SCL拉到高电平。但很多人忽略了一个事实:电阻两端必须真正连到VDD。
用万用表量一下电阻上端电压。如果是0V,说明过孔没打通,或者VDD网络根本没连到那颗电阻。焊了不等于通了。
2、比电阻更常见的四个坑
坑一:从机地址错了。 7位地址和8位地址搞混是最高频的错误。HAL库默认用7位左移一位,如果你的器件手册写的是8位地址,直接差一位,从机永远不应答。
坑二:从机没供电。 SDA和SCL有波形,但从机芯片的VDD没接。从机内部电路没工作,自然不会拉低SDA来应答。先量从机电源引脚。
坑三:时钟速度太快。 新手上来就配400kHz,线缆长一点、寄生电容大一点,上升沿就变形,从机根本来不及拉低SDA。降到100kHz试试,立刻恢复。
坑四:总线被多主机抢占。 两个主设备同时操作总线,仲裁失败的一方会一直等ACK。确认系统里只有一个I2C主机在工作。
3、快速排查顺序
先量从机供电,再核对地址位数,接着降速测试,最后用示波器看SDA在第9个时钟是否被拉低。按这个顺序,十分钟内必定位。
本文凡亿教育原创文章,转载请注明来源!

扫码关注




































