stm32的FLASH分爲主存儲塊和信息塊。主存儲塊用於保存具體的程序代碼和用戶數據,信息塊用於負責由stm32出廠是放置2KB的啓動程序(Bootloader)和512B的用戶配置信息區。主存儲塊是以頁爲單位劃分的,一頁大小爲1KB。範圍爲從地址0x08000000開始的128KB內。
對Flash 的寫入操作要 “先擦除後寫入”的原則;stm32的內置flash 編程操作都是以頁爲單位寫入的,而寫入的操作必須要以16位半字寬度數據位單位,允許跨頁寫,寫入非16位數據時將導致stm32內部總線錯誤。
void testFlash()
{
int count=0;
u16 data[5]={0x0401,0x0502,0x0003,0x0004,0x0005};
u32 base=0x8000000+1024*254; //保存自定義數據的起始地址
printf("start test flash\n");
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
FLASH_ErasePage(base);
while(count < 5)
{
FLASH_ProgramHalfWord((base +count*2),data[count]); //flash 爲一個字節存儲,16位數據必須地址加2
count++;
}
FLASH_Lock();
count = 0;
printf("\r\n The Five Data Is : \r\n");
while(count < 5)
{
printf("\r 0X%x \r",*(u16 *)(base + count*2)); //讀取方法
count++;
}