APM32F103VCT6flash模拟eeprom读写例程
时间: 2023-08-18 12:04:17 浏览: 110
以下是使用APM32F103VCT6芯片的Flash来模拟EEPROM进行读写的例程:
```c
#include "stm32f10x.h"
#define EEPROM_START_ADDRESS ((uint32_t)0x08004000) // Flash起始地址
#define EEPROM_END_ADDRESS ((uint32_t)0x08008000) // Flash结束地址
#define EEPROM_PAGE_SIZE ((uint32_t)FLASH_PAGE_SIZE) // Flash页大小
void EEPROM_WriteByte(uint32_t address, uint8_t data) {
// 检查地址是否在范围内
if (address < EEPROM_START_ADDRESS || address > EEPROM_END_ADDRESS) {
return;
}
// 解锁Flash
FLASH_Unlock();
// 清除之前的错误标志
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
// 擦除地址所在的Flash页
uint32_t pageAddress = address & ~(EEPROM_PAGE_SIZE - 1);
FLASH_ErasePage(pageAddress);
// 写入数据
FLASH_ProgramByte(address, data);
// 锁定Flash
FLASH_Lock();
}
uint8_t EEPROM_ReadByte(uint32_t address) {
// 检查地址是否在范围内
if (address < EEPROM_START_ADDRESS || address > EEPROM_END_ADDRESS) {
return 0xFF;
}
// 读取数据
return *((uint8_t*)address);
}
```
这个例程中,`EEPROM_WriteByte`函数用于向指定地址写入一个字节的数据,`EEPROM_ReadByte`函数用于从指定地址读取一个字节的数据。注意,这里使用了Flash的页擦除操作来模拟EEPROM的擦除操作。请根据自己的需求修改起始地址和结束地址,以及Flash页大小。
阅读全文