1. 简介
AT24C02是一个带写保护的2K位串行CMOS EEPROM,内部分成32页,每页8Byte,即共256个8位字节供用户读写,操作时有两种寻址方式:芯片寻址和片内子地址寻址。我们常用的是芯片寻址:AT24C02的芯片地址为1010,其地址控制字格式为[1010][A2A1A0][R/W]。其中A2,A1,A0可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。R/W为芯片读写控制位,该位为0,表示芯片进行写操作,一般情况下我们使用一片24C02时,将A2、A1、A0的引脚都接到GND,此时通信地址为0xa0。
2. 下载例程
Gitee下载:STM32ExampleCode_02_LCD
3. IIC驱动
在目录“\HARDWARE\IIC"下的myiic.h文件,根据需要修改自己的引脚,由于这里使用的是CRL和CRH寄存器来配置的输入输出方向,所以我们在修改时需要注意寄存器的正确使用,示例中IIC的SDA引脚为PB0,SCL引脚为PB1,在本STM32系列例程中涉及的所有IIC的相关模块,使用的都是这个IIC文件。
3. AT24C02驱动
1)查看数据手册
数据手册:立创商城-AT24C02
2) 原理图
AT24C02的应用电路很简单,如下图,需要注意的是,如果我们使用的不是24C02的芯片而不是现成的模块时,需要在STM32的IIC引脚添加上拉电阻以保证IIC的正常通信。
3) 读写操作
读写操作的IIC时序如下,涉及的随机读写、页读写以及始信号和停止信号等的时序图可以参考手册相关介绍
4) 驱动代码
完整驱动代码可以参考目录“.\HARDWARE\24CXX ”文件夹下的文件
5) 核心代码
a. 向at24c02某地址写某数据
AT24CXX_WriteOneByte(ADDRESS,DATA);
b. 读取at24c02某地址的数据
DATA=AT24CXX_ReadOneByte(ADDRESS);
c. 主函数调用示例
/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: 主函数
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
int main(void)
{
delay_init(); //delay初始化
uart_init(115200); //串口初始化
AT24CXX_Init(); //AT24CXX初始化
//在地址0x00上写入数据0x66
printf("24c02 addr [0x00] write data is: 0x%x\r\n",0x66);
AT24CXX_WriteOneByte(0x00,0x66);
delay_ms(50);
//读出0x00地址上的数据
read_Data=AT24CXX_ReadOneByte(0x00);
printf("24c02 addr [0x00] read data is: 0x%x\r\n",read_Data);
while(1)
{
delay_ms(200);
}
}
4. 示例工程
1) 打开工程
打开目录下的文件夹的keil工程
2) 编译烧录运行
STM32向AT24C02的0X00地址中写入一个数据,如0x66,然后再读取地址0x00中读取数据,具体结果如下图所示: