型号:STM32L431KBU6;

该型号内存 = 128KB,起始地址 = 0x0800_0000;只有63页;

在L4的user manual手册的第三章详细介绍了FLASH的操作细节,我挑一些重要的信息;

flash擦除方式有两种:

1、Page erase—以页位单位擦除,1页=2K,每次最少擦除1页;

2、Mass erase—擦除整个flash;

比较重要的信息是flash的写操作只能是双字(double word,64bit),写完第一个字,再写第二个字。

下面贴出可用的代码:

第一步:定义相关变量:

    uint32_t flashwriteaddr = 0x08008000;        //定义写入数据的地址uint32_t pageError = 0;uint64_t flashwritedata = 0x0000000200000001;//要写入的数据,必须得是双字64bituint64_t flashreaddata = 0 ;FLASH_EraseInitTypeDef flash_erase;          //定义一个结构体变量,里面有擦除操作需要定义的变量

关于这个写入数据的地址,不能瞎定义,千万别定义在程序存储的区域;

我是这样选的:先用ST-Link连接上mcu,看看我的程序占用了哪些空间。

从起始地址的0x08000000,到0x080025F0这个区间有数据,所以不能选择这个区域。所以就尽量往下选了个肯定安全的起始地址0x08008000;

第二步:解锁;

第三步:擦除;

第四步: 写数据;

第五步:上锁;

经过这5步数据就写进去了。

具体代码:

HAL_FLASH_Unlock();                                    //第二步:解锁
flash_erase.TypeErase = FLASH_TYPEERASE_PAGES;         //擦除类型是“Page Erase”
flash_erase.Page = 16;                                 //擦除第16页
flash_erase.NbPages = 2;                               //一次性擦除2页,可以是任意页
HAL_FLASHEx_Erase(&flash_erase,&pageError);            //第三步:参数写好后调用擦除函数
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, flashwriteaddr, flashwritedata);//第四步:写入数据
HAL_FLASH_Lock();                                      //第五步:上锁
flashreaddata = *(__IO uint64_t *)flashwriteaddr;     //读出flash中的数据
d1 = (flashreaddata>>32) & 0xFFFFFFFF;
d2 = (flashreaddata)& 0xFFFFFFFF;
printf("读出数据:%d   %d\r\n",d1,d2);
HAL_Delay(200);

flash_erase.Page =16的计算方法举例:

Page =(定义的起始地址 - 基地址)/ 2K;

e.g.(0x08008000 - 0x08000000)/ (2 * 1024) = 16;

读数据的方法只需一句话:

flashreaddata = *(__IO uint64_t *)flashwriteaddr;   

因为L4的flash只能是双字,所以必须是:*(__IO uint64_t *)

如果可以操作单字,就可以写:*(__IO uint32_t *)

为了验证写入的数据:0x00000002_00000001是否正确,我把读出来的数据拆成了两个uint32_t变量,分别存储高32bit数据d1,和低32bit数据d2;

打印出来的数据是:

链接ST-Link我们可以查看对应地址里存储的数据:

从图中可以看出,对应地址0x080080000地址对应的地址就是例子中写入的数据。

图文介绍STM32L4读写内部flash相关推荐

  1. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  2. 第50章 读写内部FLASH—零死角玩转STM32-F429系列

    第50章     读写内部FLASH 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  3. STM32学习笔记:读写内部Flash(介绍+附代码)

    一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起 ...

  4. STM32读写内部Flash(介绍+附代码)

    概述 内部flash读写详解 一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片 ...

  5. STM32学习笔记:读写内部Flash。

    首先我们需要了解一个内存映射:    stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起始地 ...

  6. STM32读写内部flash

    概念:计算机中最小的信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,也就是1个字节, 1个存储单元存放1个字节,每个存储单元对应一个32位(bit)地址,所以重要的话说三遍:对于32 ...

  7. STM32学习笔记:读写内部FLASH

    ST提供的库函数基本能搞定 简介 由于 FLASH 存储器的内容在掉电后不会丢失,芯片重新上电复位后,内核可从内部 FLASH 中加载代码并运行,亦可当做EEROM来使用保存所需要的数据,以便下次启用 ...

  8. STM32F103 读写内部FLASH—学习笔记(野火)

    STM32F103的Flash类型是NOR Flash 烧录过程:调试器→STM32的SRAM→运行→Flash 内部Flash比外部Flash更高效,原因是使用了内部总线,且工作频率是72MHz 2 ...

  9. STM32F429的内部FLASH介绍

    1.STM32 的内部 FLASH 简介 在 STM32 芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序后,使用下载器把编译后的代码文件烧录到该内部 FLASH 中 ...

最新文章

  1. Web测试介绍2一 安全测试
  2. sysbench mysql测试_使用sysbench对MySQL进行测试
  3. 灵魂 36 问,让你快速熟悉一个系统
  4. REST服务的自动化测试
  5. Jenkins 2.322 安装 自定义插件
  6. css3 transition的各种ease效果
  7. 【免费毕设】课程指导平台的开发(源代码+lunwen)
  8. python和java哪个好学-Python和Java发展前景哪个好?老男孩python高级编程
  9. Redis.conf 详解
  10. 视频教程-联通内训Spark项目实战:联通用户话单离线分析系统 -Spark
  11. 正则表达式,json表达式
  12. SECS/GEM实现(一)半导体通讯协议软件,C、C++使用介绍
  13. C#圆通订单创建接口测试类
  14. 计算机基础——网卡(网络适配器network adaptor)
  15. [论文学习] 一种线性时不变时滞系统的稳定性分析方法(CTCR)
  16. word替换妙用小技巧:批量去除多余空格、空行、换行
  17. Google Colab解压压缩包
  18. 认识中药(5)--胖大海
  19. mysql 分表-横向,纵向
  20. Spark中repartition和coalesce的用法

热门文章

  1. Android网络库之Okio源码分析
  2. 刷题记录(NC20115 [HNOI2015]菜肴制作)
  3. 仿生蛇形机器人02、Dynamixel MX-64AR舵机出现软件故障、无法调节角度
  4. 【C++】继承/多态/文件
  5. win7下通过easyBCD引导安装Ubuntu16.04(并处理遇到的坑)
  6. 劳易测BPS 307i SM 100 - 条码定位系统
  7. 计算机教学效果分析,计算机教学效果的方法及建议论文
  8. java计算机毕业设计Vue框架龙猫宠物交易平台MyBatis+系统+LW文档+源码+调试部署
  9. 等比、等差数列及其求和公式
  10. 我的微博 http://weibo.com/zpxp