一、什么是IIC?24C02存储器有什么用?
IIC (IIC 是半双工通信总线。半双工意味着数据在某一时刻只能沿一个方向传输,即发送数据的时候不能接收数据,接收数据的时候不能发送数据)即集成电路总线(Inter-Integrated Circuit),是一种多主机的串行通信总线.它由飞利浦公司在 20 世纪 80 年代开发,主要用于连接微控制器及其外围设备。IIC 总线具有简单、高效、支持多设备连接等特点,在电子电路设计中被广泛应用。
“一主多从” 是一种通信架构模式。在这种模式中,有一个主要的设备(称为主设备),它具有控制和发起通信的能力;同时有多个从属设备(称为从设备),它们被动地响应主设备的指令,与主设备进行数据交互。
EEPROM(AT24C02)存储器(掉电后数据不丢失)
如上图E1E2E3都接地,所以读为10100001,写为10100000。
二、使用步骤(在LED显示上电次数)
虽然给的函数中开启了PB6,PB7,但是最好在CUBE中开启一下
在main中添加头文件并初始化
/* USER CODE BEGIN Includes */
#include "headfile.h"
#include "i2c_hal.h"
/* USER CODE END Includes */
/* USER CODE BEGIN 2 */
I2CInit();
/* USER CODE END 2 */
在i2c_hal.c添加读写函数
void MEM_Read(uint8_t*pucBuf,uint8_t ucAddr,uint8_t ucNum)//文件读
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(ucAddr);
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
while(ucNum--)
{
*pucBuf++=I2CReceiveByte();
if(ucNum)
I2CSendAck();
else
I2CSendNotAck();
}
I2CStop();
}
void MEM_Write(uint8_t*pucBuf,uint8_t ucAddr,uint8_t ucNum)//文件写
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(ucAddr);
I2CWaitAck();
while(ucNum--)
{
I2CSendByte(*pucBuf++);
I2CWaitAck();
}
I2CStop();
delay1(500);
}
在i2c_hal.h声明函数
void MEM_Read(uint8_t*pucBuf,uint8_t ucAddr,uint8_t ucNum);
void MEM_Write(uint8_t*pucBuf,uint8_t ucAddr,uint8_t ucNum);
在main.c中写通信函数
uint8_t sdcount;
MEM_Read(&sdcount,0,1);//通信
sdcount++;
MEM_Write(&sdcount,0,1);
在LCD中显示
sprintf(buf," sdcount:%d ",sdcount);
LCD_DisplayStringLine(Line7,(uint8_t*)buf);
三、开源代码
通过网盘分享的文件:20-TEST10-IIC通信--24C02存储器.zip
链接: https://pan.baidu.com/s/1RQ7GbIz72_fHUYoKlLPVgA?pwd=0820 提取码: 0820