STM32F0使用FLASH
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
#define FLASH_PAGE_SIZE ((uint32_t)0x00000400)
#define FLASH_USER_START_ADDR ((uint32_t)0x08003000)
#define FLASH_USER_END_ADDR ((uint32_t)0x08003000)
#define DATA_32 ((uint32_t)0x12345678)
uint32_t EraseCounter = 0x00, Address = 0x00;
uint32_t Data = 0x3210ABCD;
uint32_t NbrOfPage = 0x00;
__IO FLASH_Status FLASHStatus = FLASH_COMPLETE;
__IO TestStatus MemoryProgramStatus = PASSED;
void FlashRead()
{
FLASH_Lock();
Address = FLASH_USER_START_ADDR;
CONFIG_A = *(__IO uint16_t *)Address; Address = Address + 2;
CONFIG_B = *(__IO uint16_t *)Address; Address = Address + 2;
CONFIG_C = *(__IO uint16_t *)Address; Address = Address + 2;
}
void FlashSave()
{
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);
{
if (FLASH_ErasePage(FLASH_USER_START_ADDR )!= FLASH_COMPLETE)
{
while (1)
{
TM1620_DISPLAY_DOT(999,0,PAGEB);
}
}
}
Address = FLASH_USER_START_ADDR;
if (FLASH_ProgramHalfWord(Address, CONFIG_A) == FLASH_COMPLETE)
{
}
else
{
delayus(100);
}
Address = Address + 2;
if (FLASH_ProgramHalfWord(Address, CONFIG_B) == FLASH_COMPLETE)
{
}
else
{
delayus(100);
}
Address = Address + 2;
if (FLASH_ProgramHalfWord(Address, CONFIG_C) == FLASH_COMPLETE)
{
}
else
{
delayus(100);
}
}