STM32 FlashMemory 学习笔记


前言

本片博文主要总结 STM32 FlashMemory的相关操作方法,以及学习过程中的一些体会、遇到的问题,望可以帮助有需要的人。

笔记内容多为自己总结、心得,如有错漏不恰当之处望不吝指正。

一、STM32 MemoryMap

Coetex-M 处理器可以对32位存储器进行寻址,因此存储器空间能够达到4GB。

STM32 MemoryMap
上图为 Cortex-M处理器 寻址范围4GB的内存分布,其中:
FLASH:0x00000000 ~ 0x1FFFFFFF;
SRAM :0x20000000 ~ 0x3FFFFFFF;
不同芯片 内存大小不一,起始地址不一,但均在此范围内,具体可以查看对应芯片手册。
本人使用的是STM32F103ZE系列,FLASH 512K,SRAM 64K,下图为FALSH内存分配图,其中512K分为256页,每页大小2K;
在这里插入图片描述

二、FALSH 操作

1.FLASH 读取

FLASH 支持直接地址寻址,即直接采用的地址寻址,即可读取内存数据。

在这里插入图片描述

2.FALSH 擦除与编程

1) KeyValue

● RDPRT key = 0x00A5
● KEY1 = 0x45670123
● KEY2 = 0xCDEF89A

2)FLASH Unlock

FPEC Block(Flash program and erase controller) 控制内存区 上电默认为上锁状态,不解锁,无法进行相
关控制寄存器得操作;
【解锁流程】
FLASH_KEYR = KEY1;
FLASH_KEYR = KEY2;

Note:错误的解锁序列会锁死FPEC block and FLASH_CR寄存器,仅复位可以解除。

3)FALSH Program

● 一次16bit编程;
● PG位置1 && 编程地址写入 Half-Word(16bits),启动编程;
● 非 Half-Word 写入,导致Bus Error;
● 编程期间,CPU处于阻塞状态知道编程完成;

在这里插入图片描述
【编程序列】

  1. Unlock;
  2. 内存擦除;
  3. Check 是否存在内存访问;
  4. PG = 1;
  5. (__IO uint16_t)Address = (uint16_t)Data;
  6. Check (FLASH_SR_BSY = 1);
  7. 校验编程数据;

4)FLASH Erase

页擦除/整个擦除;

在这里插入图片描述

【擦除序列-页】

  1. Unlock;
  2. Check 是否存在内存访问;
  3. PER = 1;
  4. FLASH_AR 选择擦除页;
  5. STAT = 1;
  6. Check (FLASH_SR_BSY = 1);
  7. 读取擦除页并且校验;

在这里插入图片描述

【擦除序列-整个扇区】

  1. Unlock;
  2. Check 是否存在内存访问;
  3. FLASH_CR_MER = 1;
  4. FLASH_AR 选择擦除页;
  5. FLASH_CR_STRT= 1;
  6. Check (FLASH_SR_BSY = 1);
  7. 读取擦除页并且校验;

三、FLASH 读/写保护

1.Option Byte

● 配置区域,大小16bytes(8个配置字节+8个配置字节取反),用于内存保护相关配置存储;
● 4byte 写保护配置字节 + 1 读保护配置字节 + 1配置配置字节 + 2 userData;
● 单字节格式如下图所示:
[0:7]:配置字节 byte0;
[8-15]:配置字节byte0 取反;
[16:23]:配置字节 byte1;
[24-31]:配置字节byte1 取反;
在这里插入图片描述
在这里插入图片描述

【编程序列】

  1. Check 是否存在内存访问
  2. FPEC Unlock;
  3. FLASH_OPTKEYR Unlock;
  4. OPTPG = 1;
  5. Half-Word 写入配置字节 ;
  6. Check (FLASH_SR_BSY = 1);
  7. 读取数据并且校验;

【擦除序列】

  1. Check 是否存在内存访问;
  2. FPEC Unlock;
  3. FLASH_OPTWRE Unlock;
  4. OPTER = 1;
  5. STAR = 1 ;
  6. Check (FLASH_SR_BSY = 1);
  7. 读取数据并且校验;

2.读取保护

● 默认关闭读取保护;
● 1个配置字节 RDP;
● 写入 0x00A5时,解除读取保护,其他值,开启读取保护;
● 当读取保护 激活 到 关闭时,芯片强制进行一次整个FLASH擦除;
● 主要用于防止代码数据盗窃;

在这里插入图片描述

3.写入保护

● 默认关闭写入保护;
● 4个配置字节WRP0-3;
● 0:开启写保护/1:关闭写保护;
● WRP[0:30]:每一位对应2个Page控制;
● WRP[31]:控制Page 62-255;

关于FLASH 的操作,PM0075官方文档描述很详细,需要的朋友可以百度下载,也可以评论分享。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我很高兴为您解答有关STM32F407学习笔记的问题。根据引用和引用中的内容,学习STM32F407可以使用CubeMax和Keil这两款软件。CubeMax是一个方便易用的工具,可以帮助您进行单片机的开发和编程。Keil是一款集成开发环境(IDE),可以用于编写、调试和下载嵌入式软件。 在学习过程中,您可以根据引用的建议,收藏您经常使用的芯片,例如STM32F407,以便下次使用更加方便。 对于学习STM32F407的详细内容和步骤,我建议您参考引用中提到的PPT和引用中提到的学习笔记。这些资料可能包含了关于STM32F407的基本知识、GPIO和按键的使用等内容。您可以根据这些资料逐步学习和实践。 在学习过程中,如果您遇到问题或有任何疑问,可以向您的学长们求助或在实验室中寻求帮助。他们可以提供补充的知识和指导,并纠正您可能存在的错误。 最后,我希望您的STM32F407学习之旅能够顺利进行,并祝您在电赛国赛中取得优异的成绩!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32F407学习笔记(1)基于hal库,CubeMX以及keil5的基本使用。](https://blog.csdn.net/qq_63466056/article/details/127707521)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值