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++;
}