STM32F1与I2C从设备通讯无应答?

最近做了STM32F103与DAC的I2C通讯,起先使用的是硬件I2C来驱动,按照时序写好程序通讯正常,但由于电路板需求,需要将I2C的SCL和SDA线拉长,导致硬件I2C通讯经常挂死,于是考虑采用模拟I2C,(硬件I2C和模拟I2C的程序在我另外两篇博客上有),但是也经常挂死,最后终于找到原因,也是下面的四点:

(1)时序,这个一定要按照DAC芯片的数据手册来

(2)地址,从设备地址

(3)IO模式,这里的SCL和SDA的IO要配置成开漏输出GPIO_Mode_Out_OD,一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出等。

(4)上拉电阻,开漏输出提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。

猜你喜欢

转载自blog.csdn.net/m0_37827405/article/details/85245181