因为STM32系列芯片没有内置EEPROM,所以很多人都喜欢利用FLASH模拟EEPROM。
经过半天的编程调试,把它简化为两个函数:
1、存入一个数据。
void Write_Flash_data(u8 addr,u16 data);//
2、读出来个数据。
u16 Read_Flash_data(u8 addr); //
应用示例:
如DMX512设备地址更改为100,并把它存入FLASH:
Write_Flash_data(dmx_addr,100);//
如读取DMX512设备地址:
X = Read_Flash_data(dmx_addr);//
需要注意的是STM32 FLASH在写之前需擦除再写,而且必须一次最小擦除1页,1页大小通常为1K或2K(与容量大小有关)
如果FLASH是128K以下,那么每页大小是1K,由于STM32只能用半字节,所以每页只能存512个数据。
另外一个很重要的问题是,如果擦除完当前页,突然断电了,那么数据就不会更新到LASH,也就造成数据丢失。
为保证这种意外发生后,数据得以保存,使用两页来存储数据,这里使用第40页与41页,两页内容一样,互为备份。
MCU上电时检验两页数据是否正常,如果是首次上电会加载默认参数到FLASH中。
|