该例程通过向片内特定地址写入数据,然后从该地址读取数据,与原始数据进行比较。如果对比结果一致,指示LED就按照1秒的时间间隔闪烁,否则按照100毫秒时间间隔闪烁。
1 片内flash读写函数
u8 FLASH_Program(void)
{
/* Porgram FLASH Bank1 ********************************************************/
/* Unlock the Flash Bank1 Program Erase controller */
FLASH_Unlock();
/* Clear All pending flags */
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
FLASH_ErasePage(BANK1_WRITE_START_ADDR);
FLASH_ClearFlag(FLASH_FLAG_EOP );
FLASHStatus = FLASH_ProgramWord(BANK1_WRITE_START_ADDR, Data);
FLASH_ClearFlag(FLASH_FLAG_EOP );
FLASH_Lock();
if((*(__IO uint32_t*) BANK1_WRITE_START_ADDR) != Data) {
return 1;
}
return 0;
}
2 主程序
int main(void)
{
u8 t;
delay_init();
LED_Init();
t = FLASH_Program();
if(t == 0) {
while(1) {
LED1_TOGGLE();
delay_ms(1000);
}
} else {
while(1) {
LED1_TOGGLE();
delay_ms(100);
}
}
}