IIC学习简单总结

2019-08-13 19:06发布

本帖最后由 WWCool 于 2017-7-10 17:14 编辑

   自己动手配置了一下IIC,很简单的配置了一下,让一个数据存进24c02然后通过串口发到电脑上。
   我用的是用软件模拟的IIC,一般用的都是这一种吧,原子哥说32的硬件IIC很复杂我也没试过,信原子哥的应该是没错的。
   通过软件模拟IIC其实就是按照IIC协议的一些时序通过IO口来实现。我觉得任意的IO都可以。例程上用的是PB6,PB7.我的板子连接24c02的IO口是PB10,PB11所以我用的就是这两个了。
    接下来就是把这两个IO口的输入输出配置一下,用于SCL的一直是输出模式选用推挽输出就可以了,用于SDA的需要经常变换输入输出模式,我学的是原子哥的写法,操作寄存器的写法#define  SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=(u32)8<<12;}用与运算将需要配置的位先清零,然后用移位运算和或运算将这些位赋值。(其实就是更改IO口的模式)。
    然后就是写一些信号时序的函数,根据IIC协议来写,就是三个信号时序,起始信号,停止信号,应答信号。
   起始信号:SCL为高时,SDA由高跳变到低。 停止信号:SCL为高时,SDA由低跳变到高。这两个信号都是由主控的一方发出的,就比如单片机想给24c02发或收数据时就会产生这两种信号。
  应答信号:当发送方发送完一字节数据后发送方SDA变为输入模式,因为SDA硬件设计上有上拉电阻此时SDA为高电平,此时接收方将SDA拉低就是响应。
然后就是传输数据时的时序了,起始信号和停止信号都是在SCL保持高电平不变时SDA跳变,而在数据传输时必须在SCL为高时SDA保持,只能在SCL为低时SDA跳变。
只要基本的时序明白了之后根据原子哥封装的函数很容易就完成这些功能了。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
再补充一下:
1、一个主设备最多可以接8个24c02,通过给A2 A1 A0三个位接不同的高低电平即可。在想要写或收时通过从器件地址来选择要操作那一个24C02.
2、使用EEPROM不同的操作需要根据时序有不同的写法。比如读操作有,立即读、选择读、连续读,具体时序可以到百度查找24C02的中文资料。(我是在那里找到的)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。