STM32-Flash存储

ops/2025/1/17 21:39:42/

 目录

1.0 闪存模块组织

2.0 Flash基本结构

3.0 Flash解锁

4.0 指针访问存储器地址

5.0 程序存储器编程

6.0 选项字节

7.0 选项字节编程

8.0 选项字节擦除

9.0 电子签名

10.0 手册解读


 定义:

 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程

读写FLASH的用途:利用程序存储器的剩余空间来保存掉电不丢失的用户数据     通过在程序中编程(IAP),实现程序的自我更新

在线编程(In-Circuit Programming – ICP)用于更新程序存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载程序

在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一种通信接口下载程序


1.0 闪存模块组织



2.0 Flash基本结构



3.0 Flash解锁



4.0 指针访问存储器地址


指针访问存储器地址需要解引用:在C语言中解引用表示的就是取值的意思


5.0 程序存储器编程


注:在单片机中有字节,半字,一字的说法,字节表示的是8个bit位,半节表示的是uint16_t,一个字节表示的是uint32_t个字节。




6.0 选项字节



7.0 选项字节编程


检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作

解锁FLASH_CR的OPTWRE位

设置FLASH_CR的OPTPG位为1

写入要编程的半字到指定的地址

等待BSY位变为0 读出写入的地址并验证数据


8.0 选项字节擦除


检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作

解锁FLASH_CR的OPTWRE位

设置FLASH_CR的OPTER位为1

设置FLASH_CR的STRT位为1

等待BSY位变为0 读出被擦除的选择字节并做验证


9.0 电子签名



10.0 手册解读


......

11.0 库函数解读



void FLASH_SetLatency(uint32_t FLASH_Latency);
void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess);
void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer);

以上的三个库函数使用得不多暂时不用过多的了解


void FLASH_Unlock(void);
void FLASH_Lock(void);

这两个库函数分别对应解锁和加锁


FLASH_Status FLASH_ErasePage(uint32_t Page_Address);

闪存擦除某一页,擦除完成之后对应的Page就完成了


FLASH_Status FLASH_EraseAllPages(void);

库函数全部擦除操作


FLASH_Status FLASH_EraseOptionBytes(void);

擦除对应的选型字节


FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);

在指定的地址写入字和写入半字


FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);
FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages);
FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState);
FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY);

指定的选项字节部分,指定字节的写保护,读保护


uint32_t FLASH_GetUserOptionByte(void);
uint32_t FLASH_GetWriteProtectionOptionByte(void);
FlagStatus FLASH_GetReadOutProtectionStatus(void);

获取选项字节当前的状态


FlagStatus FLASH_GetPrefetchBufferStatus(void);

获取预取缓冲区状态


void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState);
FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG);
void FLASH_ClearFlag(uint32_t FLASH_FLAG);
FLASH_Status FLASH_GetStatus(void);
FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout);

中断使能,获取标志位,清除标志位,获取状态,等待上一次操作


FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout);

等待的时间,是否超时,表示处于等待忙的状态


12.0 Flash操作


注:flash的基本操作,flash的读取,删除,编程【使用指针访问存储器的格式】


http://www.ppmy.cn/ops/150929.html

相关文章

Linux服务器网络丢包场景及解决办法

一、Linux网络丢包概述 在数字化浪潮席卷的当下,网络已然成为我们生活、工作与娱乐不可或缺的基础设施,如同空气般,无孔不入地渗透到各个角落。对于 Linux 系统的用户而言,网络丢包问题却宛如挥之不去的 “噩梦”,频繁…

智能物流升级利器——SAIL-RK3576核心板AI边缘计算网关设计方案(一)

近年来,随着物流行业智能化和自动化水平不断提升,数据的实时处理与智能决策成为推动物流运输、仓储管理和配送优化的重要手段。传统的集中式云平台虽然具备强大计算能力,但高延迟和带宽限制往往制约了物流现场的即时响应。为此,我…

nginx反向代理http 和 https(案例)

说明:在香港开了一台虚拟机,主要用于将来自国外访问的80和443代理到大陆IDC机房 (1) 定义80和443的upstream 211.155.82.174 是keepalive中VIP对应的公网IP(在国内访问www.playyx.com解析到211.155.82.174) upstream new_server…

网络安全的学习路径 (包括资源)快速学习

网络安全是一个多学科领域,涉及到技术、管理和法律等方面的知识。以下是详细的网络安全学习路径,从入门到高级,为你提供清晰的学习方向。 第一阶段:入门基础 在这阶段,你需要掌握基础的计算机知识和网络安全的基本概念…

Therabody 与Garmin联手,共同推进运动恢复与健康科技新突破

本次合作以数据整合、人工智能驱动的数字教练与科学研究为重点,旨在更好地了解科学恢复对运动表现的影响 (2025年1月13日,中国上海)全球健康领导者Therabody宣布与智能手表品牌Garmin佳明建立战略合作关系,共同致力于…

Web3与加密技术的结合:增强个人隐私保护的未来趋势

随着互联网的快速发展,个人隐私和数据安全问题越来越受到关注。Web3作为新一代互联网架构,凭借其去中心化的特性,为个人隐私保护提供了全新的解决方案。而加密技术则是Web3的重要组成部分,进一步增强了隐私保护的能力。本文将探讨…

分布式数据存储基础与HDFS操作实践(副本)

以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统(HDFS)的基本操作。 …

大模型相关资料、基础技术和排行榜

大模型排行榜 测试集CEval中文多个学科测试集排名MMLU大规模多任务语言理解英文排名,介绍斯坦福排行榜Math-VMath-VistaOpen LLMs LeaderboardCMMLU 大模型数据集 标题简介19个大模型常用的评估数据集和训练数据集汇总19个大模型常用的评估数据集和训练数据集汇总最…