STM32使用IIC通信的引脚配置问题
在使用IIC通信时,遇到引脚配置问题,记录一下:
IIC的两个引脚SDA和SCL都要求既能输入又能输出。
问题:
SDA线是由不同的器件分时控制的,这样就会有一个问题:当一个器件主动置高或者置低时,如果另一个器件发出相反电平,就会造成短路。
如果将SDA引脚配置成推挽模式,就会有短路的风险。
ALIENTEK是这样解决的:在主机(单片机)控制SDA线时,将其SDA引脚配置成推挽输出;在从机(EEPROM)控制SDA线时,将单片机的引脚配置成上拉/下拉输入,用频繁的配置切换来避免这个问题。
但是这样做感觉比较麻烦,所以STM32有一个开漏的配置,它与推挽有点像,但不完全一样。
开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器的’1’将端口置于高阻状态(P-MOS从不被激活)。
推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器的’1’将激活P-MOS。

因此,使用开漏就能很好的解决这个问题:当单片机的SDA引脚置低时,SDA线被拉低;当单片机的SDA引脚置高时,实际上引脚是浮空的,SDA线通过外接上拉电阻被VCC拉高(IIC的SDA、SCL两条线都要通过上拉电阻接到VCC,典型接法),这样就不会出现短路的状况,很巧妙。(接一个外接上拉电阻就类似于有一根弹簧,缓缓地将引脚从浮空状态拉到高电平)
文章讲述了在STM32中使用IIC通信时遇到的引脚配置问题,特别关注了SDA线的分时控制可能导致的短路。ALIENTEK的解决方案是主机使用推挽输出,从机采用上拉/下拉输入。STM32的开漏模式提供了更安全的解决方案,通过外接上拉电阻避免短路。
1736

被折叠的 条评论
为什么被折叠?



