麒麟座IIC-STM32F103RET6(3)-完成IIC测试AT24C02--IIC小结西瓜老师口误?

完成了 并且同步测试了L471的touch

软IIC可以的

都在附件!

 

 

IIC小结:

它是2根线 半双工 不想SPI那样CS即可 它是软件寻找 需要地址! 


仔细看函数
uint16_t AT24Cxx_ReadTwoByte(uint16_t addr)
uint8_t AT24Cxx_ReadOneByte(uint16_t addr)
流程基本一样 主要是我
U8的时候
temp=I2C_Read_Byte(0); 
就结束了 我不ACK就END
U16的时候
temp=I2C_Read_Byte(1); //  1   代表 ACK
temp<<=8;
temp|=I2C_Read_Byte(0); //  0  代表 NACK
我第一次ACK第二次不ACK
这就是那个读数组的基础 我ACK就会持续下去 我不ACK就END
那么问题就是我的ACK函数了
这就是所谓的半双工!它总是一问一答这样的ACK机制!
每次TX以后等待RX在继续TX在等待RX作为ACK 一直到没有ACK就是END了!!

 

现在分析一下西瓜老师的那句话:从机给主机的ACK是电平 主机给从机的ACK是高电平

你看 你发送以后就开始设置SDA为输入了 开始等待也就是采集SDA的输入信号 如果采到低电平 说明从机ACK了!

因为你本身外面是上拉电阻的 就是高电平 现在采到低电平 说明有某个事情发生了

麒麟座IIC-STM32F103RET6(3)-完成IIC测试AT24C02--IIC小结西瓜老师口误?

麒麟座IIC-STM32F103RET6(3)-完成IIC测试AT24C02--IIC小结西瓜老师口误?

再看主机给从机的ACK 当我需要连续读写的时候 后面的函数就是给不给ACK

麒麟座IIC-STM32F103RET6(3)-完成IIC测试AT24C02--IIC小结西瓜老师口误?

所以 西瓜老师说的有问题??