15 FLASH闪存

本文介绍了STM32F1系列的FLASH组成部分,包括程序存储器、系统存储器和选项字节,详细讲解了擦除、编程方法(如IAP和ICP),以及FPEC控制、解锁和加锁过程。还涉及了使用指针访问存储器、电子签名等内容。
摘要由CSDN通过智能技术生成

FLASH简介

  • STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程
  • 读写FLASH的用途
  •      利用程序存储器的剩余空间来保存掉电不丢失的用户数据     
  •      通过在程序中编程(IAP),实现程序的自我更新
  • 在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序
  • 在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序

闪存模块组织

FLASH基本结构 

通过控制器FPEC来对程序存储器和选项字节来进行擦除和编程。

FLASH解锁

FPEC共有三个键值:     

  •            RDPRT键 = 0x000000A5     //解除读保护的密钥
  •            KEY1 = 0x45670123     
  •            KEY2 = 0xCDEF89AB

解锁:     

  •             复位后,FPEC被保护,不能写入FLASH_CR     
  •             在FLASH_KEYR先写入KEY1,再写入KEY2,解锁     
  •             错误的操作序列会在下次复位前锁死FPEC和FLASH_CR

加锁:     

  •             设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR 

使用指针访问存储器 

  • 使用指针读指定地址下的存储器:     

    uint16_t Data = *((__IO uint16_t *)(0x08000000));

//读取0x08000000地址下的数据,将地址强制转换成uint16_t的指针类型

  • 使用指针写指定地址下的存储器:     

    *((__IO uint16_t *)(0x08000000)) = 0x1234;

  • 其中:     

     #define    __IO    volatile

防止编译器优化

程序存储器编程 

 

程序存储器页擦除 

 程序存储器全擦除

 

如果LOCK=1,执行解锁过程,先在KEY寄存器里写入KEY1,再写入KEY2。 

选项字节 

 

  • RDP:写入RDPRT键(0x000000A5)后解除读保护
  • USER:配置硬件看门狗和进入停机/待机模式是否产生复位
  • Data0/1:用户可自定义使用
  • WRP0/1/2/3:配置写保护每一个对应保护4个存储页(中容量) ,4个字节总共32

总共保护32*4=128页 

//nRDP是RDP取反后的值,如果检查出nRDP不是RDP取反后的值,则相应的功能不执行。

 选项字节编程

  • 检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作
  • 解锁FLASH_CR的OPTWRE位
  • 设置FLASH_CR的OPTPG位为1
  • 写入要编程的半字到指定的地址
  • 等待BSY位变为0
  • 读出写入的地址并验证数据 

选项字节擦除 

  • 检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作
  • 解锁FLASH_CR的OPTWRE位
  • 设置FLASH_CR的OPTER位为1
  • 设置FLASH_CR的STRT位为1
  • 等待BSY位变为0
  • 读出被擦除的选择字节并做验证

器件电子签名 

  • 电子签名存放在闪存存储器模块的系统存储区域,包含的芯片识别信息在出厂时编写,不可更改,使用指针读指定地址下的存储器可获取电子签名
  • 闪存容量寄存器:     

              基地址:0x1FFF F7E0     

              大小:16位

  • 产品唯一身份标识寄存器:     

              基地址: 0x1FFF F7E8     

              大小:96位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值