当前位置:首页 > 单片机 > 单片机
[导读]EEPROM又称为电可擦可编程只读存储器,掉电后数据不丢失。广泛用于少量数据的保存,一些增强型51单片机和AVR都有芯片内部集成EEPROM。开发板使用的是I2C接口ATMEL的24C02芯片,芯片容量是2Kbit,也就是256字节。硬件

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);


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭