最近公司上STM32,对新的东西不太熟悉。直接上手,平台配置啥的都还算顺利,毕竟八位机平台的东西在。到硬件IIC的时候就出大问题了,刚刚上板子的PCF8563(RTC),我也懒,直接就用ST官方给的库。刚刚开始几次可以读写PCF8563,后来直接就杯具。查了两天,发现连STAR信号都发不出来,直接卡在IIC时钟使能那个地方。总线永远是忙!实在没办法。。。
求助 几个朋友,其中一种说法是:STM32的抗干扰问题,导致IIC总线有动作,让IIC器件认为忙。要在VDD和VSS,接近管脚的地方加104的电容。有可能是这种原因,不过我手头板子限制,我没办法加电容,我没有试,要不谁试一下。
然后到网上一搜,乖乖,原来不只是我碰到这个问题,N多人都碰到这个问题,官方也出了一个修定基本承认这是一个硬件BUG。杯具了,很多人都直接用IO直接模拟了。我的日程安排也打算,再弄一个早止,如果不成我也直接用IO模拟了。
继续调,继续搜。在一个BLOG(实在对不起,由于大量的查看网页,我实不记得那博客是哪的了)里看到有这么一个说法:首先是,应用时序不完全标准。其次是,IIC自动ACK的问题。受这个启发我从新整理IIC的时序。
由于是总线一开始就是忙,那我在配置IO的时候,就先更改IO状态,让IO先全部拉高。想当于强制释放总线,然后再配置IO和IIC。一看,嘿嘿,IIC不忙了。大喜!!!理所当然,接下来的写函数也正确了,至少没有出现STAR发不出的情况。到读数据,杯具又出现了!又当