在线时间0 小时
UID194136
ST金币0
蝴蝶豆0
注册时间2010-6-18
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
EEPROM又称为电可擦可编程只读存储器,掉电后数据不丢失。广泛用于少量数据的保存,一些增强型51单片机和AVR都有芯片内部集成EEPROM。开发板使用的是I2C接口ATMEL的24C02芯片,芯片容量是2Kbit,也就是256字节。硬件连接如图所示,与STM32芯片上的I2C1硬件接口相连。
I2C的时序我这里就不介绍了,大家可以上网查查。I2C最大的优点就是有硬件地址,可以通过不同的硬件地址,挂载不同功能的I2C芯片。缺点就是速度慢,我们常使用到400kbps。
一硬件实现
STM32官方给的范例中给出了两个封装好的文件:I2C_EE.C和I2C_EE.H
给了这样几个函数
void I2C_EE_Init(void);
//I2C端口和I2C模块初始化
void I2C_EE_ByteWrite(uint8_t* pBuffer, uint8_t WriteAddr);
//单个字节写入
void I2C_EE_PageWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint8_t NumByteToWrite);
//页写,这款24C02能够支持8个字节同时写,能够提高写入时间。其他的EEPROM比如24C04/08/16支持16字节每页,24C32/64支持32字节每页
void I2C_EE_BufferWrite(uint8_t* pBuffer, uint8_t WriteAddr, uint16_t NumByteToWrite);
//缓存写入,会调用上面两个子函数,根据当前的位置和写入的大小,调用是字节写还是页写
void I2C_EE_BufferRead(uint8_t* pBuffer, uint8_t ReadAddr, uint16_t NumByteToRead);
//缓存读,和上面类似
void I2C_EE_WaitEepromStandbyState(void);
//EEPROM内部也有编程时间,使用要等到内部完成才能进行下一个步骤。
需要注意的是:官方这两个文件有点BUG,有时候会卡在读文件的时候,需要做些修改。二是24C02总共有256页,也就是0X00到0XFF。
二软件实现
最后说明下,我在使用STM32103VCT6的时候发现,硬件I2C有点问题。所以这里还用软件模拟I2C的功能实现同样的功能。我提供两个文件IIC_SOFT.C和IIC_SOFT.H文件。里面的函数为
void I2C_Configuration(void);
bool I2C_Write(u8 address,u8 data);
bool I2C_Writes(u8 *buff,u8 address,u8 length);
//bool I2C_Writes(u8 address,u8 *buff,u8 length);//只能写一页的内容
void I2C_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite);
//仿照I2C_EE写的,数据不受限制
u8 I2C_Read(u8 address);
bool I2C_Reads(u8 address,u8 *buff,u8 length);
|
-
-
297.96 KB, 下载次数: 130, 下载积分: ST金币 -1
|