stm32 读写内部Flash

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

    }

你可能感兴趣的:(嵌入式)