9.I2C读写数据—基于CT117E开发板的STM32库函数编程

来源:互联网 发布:js判断质数的算法 编辑:程序博客网 时间:2024/05/20 03:08
I2C  简介
IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。 它是由数据线 SDA 和时钟 SCL 构成的串行总线, 可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号: 接收数据的 IC 在接收到 8bit 数据后, 向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要.( IIC 总线时序图)

参考CT117E开发板原理图
 
 
I2C具体的设置参考其驱动程序,这里分析其在主函数中的用法。
1.读数据
  1. uint8_t x24c02_read(uint8_t address)
  2. {
  3. unsigned char val;
  4. I2CStart();
  5. I2CSendByte(0xa0);
  6. I2CWaitAck();
  7. I2CSendByte(address);
  8. I2CWaitAck();
  9. I2CStart();
  10. I2CSendByte(0xa1);
  11. I2CWaitAck();
  12. val = I2CReceiveByte();
  13. I2CWaitAck();
  14. I2CStop();
  15. return(val);
  16. }
2.写数据
  1. void x24c02_write(unsigned char address,unsigned char info)
  2. {
  3. I2CStart();
  4. I2CSendByte(0xa0);
  5. I2CWaitAck();
  6. I2CSendByte(address);
  7. I2CWaitAck();
  8. I2CSendByte(info);
  9. I2CWaitAck();
  10. I2CStop();
  11. }
0 0