STM32f1xxx的閃存模塊由:主存儲器、信息塊和閃存存儲器接口寄存器等3部分組成。
各個部分的大小因不同型號有一定的差異,數據手冊中可以看到
小容量產品主存儲塊1-32KB,每頁1KB。系統存儲器2KB。
中容量產品主存儲塊64-128KB,每頁1KB。系統存儲器2KB。
大容量產品主存儲塊256KB以上,每頁2KB。系統存儲器2KB。
主存儲器:該部分用來存放代碼和數據常數(如const類型的數據)。對於大容量產品,其被劃分爲256頁,每頁2K字節。注意,小容量和中容量產品則每頁只有1K字節。從上圖 可以看出主存儲器的起始地址就是0X08000000, B0、B1都接GND的時候,就是從0X08000000開始運行代碼的。
信息塊:該部分分爲2個小部分,其中啓動程序代碼,是用來存儲ST自帶的啓動程序,用於串口下載代碼,當B0接V3.3,B1接GND的時候,運行的就是這部分代碼。用戶選擇字 節,則一般用於配置寫保護、讀保護等功能
閃存存儲器接口寄存器:該部分用於控制閃存讀寫等,是整個閃存模塊的控制機構。
在進行內部flash模仿eeprom時可以操作主存儲器部分的空間,程序代碼佔一部分,留下一部分用於存儲你想要存儲的信息,只是模擬的eeprom的讀寫操作還是要遵循flash的操作方法,另外還需要注意stm32閃存操作的流程注意事項
FLASH_Unlock();//解鎖
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清楚標誌
FLASH_ErasePage(0x8002000);//擦除
while(count < 5)
{
FLASH_ProgramHalfWord((0x8002000 +count*2),data[count]); //flash 爲一個字節存儲,16位數據必須地址加2
count++;
}
FLASH_Lock();//加鎖