STM32 FLASH简介

FLASH简介

        闪存存储器接口是一个外设,是这个闪存的管理员。

        我们使用的STLink就是SWD协议下载,下载的时候会更新Flash当中的全部内容。Bootloader就是串口下载,我们目前使用过的就是ICP下载方式。

        对于IAP下载程序,我们就需要自己写一个Boot loader程序,将其放在程序更新的时候不会覆盖的地方,需要更新程序的时候,我们控制程序跳转到我们自己写的Bootloader当中,在这里我们就可以接收任意一种通信接口传过来的数据,之后我们控制Flash读写,将收到的数据写入到程序正常运行的地方,写完之后再控制程序跳转到正常运行的地方。或者直接复位,这样程序就完成了自我升级。

上图的存储器地址要记忆达到看到地址就知道它位于什么区域,有什么特性,大概是干什么的。

闪存模块组织

        主存储器:程序存储器,存放程序代码。

        信息块:启动程序代码就是系统存储器;用户选择字节即选项字节,存放一些独立的参数。

        闪存存储器接口寄存器:不属于闪存,就是一个普通的外设,存储介质是SRAM

        主存储器进行了分页,擦除和写保护都是以页为单位的,每页的大小都是1K。页的地址只要是以000、400、800、C00结尾的都一定是页的起始地址

Flash基本结构图

FPEC如何操作

        RDPRT键是解除读保护的密钥,操作闪存的第一步就是解锁,最后一步就是加锁。

        STM32内部的存储器是直接挂载在总线上的,因此我们可以直接使用指针来进行访问,读取是不需要进行解锁的。

        volatile的作用就是可以防止我们的指定的代码被编译器优化,从而不会影响我们的功能,并且这样我们的变量不会经过缓存优化,直接从内存中找,这样我们对于变量的修改就可以及时的反应,保证数据更改的同步。

        如果开启了编译器优化,在无意义加减变量,多线程更改变量,读写与硬件相关的存储器时都需要加上volatile,防止被编译器优化,如果默认不开启编译器优化,那么就可以不用加。

全擦除

        MER为1指定的就是擦除,START为1就是芯片开始干活。然后芯片就会自动执行全擦除的过程。由于擦除需要时间,所以就要判断状态寄存器BSY(Busy)位是否为1,当为0的时候才会继续执行后面的流程。读出验证可以不用。

页擦除

编程/写入

        STM32在写入闪存之前会检查指定地址有没有擦除,如果没有擦除就写入,那么STM32就不会执行写入的操作,除非写入的数据全是0.

       :Word是32位

        半字:HalfWord是16位

        字节:Byte是8位数据

选项字节

        上表的意思就是在RDP写入数据的时候要同时在nRDP写入该数据的反码,如果芯片检测到这两个存储器不是反码的关系,那就代表数据无效,有错误。写反码的过程硬件会自动计算并写入。

选项字节擦除

在开始上面的流程之前也要先解锁闪存。

选项字节编程

器件电子签名

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值