我的工程里要用到iic总线扩展rom,stm32是有硬件iic的,但是,网上有很多人说这个硬件iic有漏洞,甚至于有bug。http://bbs.21ic.com/icview-184741-1-1.html http://blog.gkong.com/more.asp?name=zjcsharp&id=112878。《例说stm32》的表述是:“非常复杂,不太好用”。那么我判断这个硬件iic可能确实有不足,因此选择直接用软件模拟出iic。
在做的过程中,遇到几个问题,记录下来。
1、引脚的模式与配置
iic的两个引脚SDA与SCL都要求既能输出又能输入。这对stm32来说问题不大,由参考手册给出的图来看,引脚是始终连着IDR寄存器的,另外“输出配置”一节还特意讲到,“在开漏模式时,对输入数据寄存器的读访问可得到I/O状态”。所以,模式的问题很好解决。
SDA线是由不同的器件分时控制的,这就造成一个问题:当一个器件主动置高或者置低时,若另一个器件若发出相反的电平,会短路。
这就决定将引脚配置成推挽,有很多麻烦事。alientek就是这么做的,他在主机(单片机)控制SDA线时,将其SDA引脚配置成推挽输出;从机(EEPROM)控制SDA线时&#x
本文介绍了在STM32中使用软件模拟IIC的过程,包括引脚配置和代码实现。针对硬件IIC可能存在的问题,作者选择了软件模拟IIC,并详细解释了如何通过配置引脚为开漏模式来避免短路。此外,还讨论了逻辑与时序的处理,提供了一段发送和接收字节的代码示例,并强调了在写入EEPROM时要注意页的概念,以防止数据错误。最后,建议在不使用IIC时,将引脚设置为浮空输入。
最低0.47元/天 解锁文章
972

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



