加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

stm32 读写内部Flash

发布时间:2020-12-15 17:22:54 所属栏目:百科 来源:网络整理
导读:stm32的FLASH分为主存储块和信息块。主存储块用于保存具体的程序代码和用户数据,信息块用于负责由stm32出厂是放置2KB的启动程序(Bootloader)和512B的用户配置信息区。主存储块是以页为单位划分的,一页大小为1KB。范围为从地址0x08000000开始的128KB内。

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 flashn");
    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("rn The Five Data Is : rn");

    while(count < 5)
    {
        printf("r 0X%x r",*(u16 *)(base + count*2));      //读取方法
        count++;

    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读