【STM32详解FLASH闪存编程原理与步骤】

STM32详解FLASH闪存编程原理与步骤

    • FLASH编程注意事项
    • FLASH编程过程
    • STM32的FLASH擦除过程
    • FLASH全片擦除
    • FLASH操作总结
      • 锁定解锁函数
      • 写操作函数
      • 擦除函数
      • 获取状态函数
      • 等待操作完成函数
      • 读FLASH特定地址数据函数

FLASH编程注意事项

1.STM32复位后,FPEC模块是被保护的,不能写入FLASH_CR寄存器:通过写入特定的序列到FLASH_KEYR寄存器可以打开FPEC模块(即写入KEY1和KEY2),只有在写保护被解除后,我们才能操作相关寄存器。叫Unlock,简直不正确会产生总线错误。
2.STM32闪存的编程每次必须写入16位(不能单纯的写入8位数据哦!),当FLASH_CR寄存器的PG位为’1’时,在一个闪存地址写入一个半字将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。
3.在编程过程中(FLASH_SR的BSY位为’1’),任何读写闪存的操作都会使CPU暂停,知道此次闪存编程结束。
4.STM32的FLASH在编程的时候,也必须要求其写入地址的FLASH是被擦除了的(也就是其值必须是0xFFFF),否则无法写入,在FLASH_SR寄存器的PGERR位将得到一个警告。
在这里插入图片描述

FLASH编程过程

在这里插入图片描述1.检查FLASH_CR的LOCK是否解锁,如果没有则先解锁
2.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作
3.设置FLASH_CR寄存器的PG位为’1’,在指定的地址写入要编程的半字
4.等待BSY位变为’0’
5.读出写入的地址并验证数据

STM32的FLASH擦除过程

STM32FLASH编程的时候,要先判断缩写地址是否被擦除了,所以,我们有介绍STM32的闪存擦除过程很重要。

STM32的闪存擦除分为两种:页擦除和整片擦除。

在这里插入图片描述1.检查FLASH_CR的LOCK是否解锁, 如果没有则先解锁
2.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作
3.设置FLASH_CR寄存器的PER位为’1’
4.用FLASH_AR寄存器选择要擦除的页
5.设置FLASH_CR寄存器的STRT位为’1’
6.等待BSY位变为’0’
7.读出被擦除的页并做验证

FLASH全片擦除

在这里插入图片描述
1.检查FLASH_SR寄存器的BSY位,已确定没有其他操作在进行
2.设置FLASH_CR寄存器的MER位1;
3.设置FLASH_CR寄存器的STRT为1
4.等待BSY为0
5.读出所有页并验证

FLASH操作总结

锁定解锁函数

在对FLASH进行写操作前必须先解锁,解锁操作也就是必须在
FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2),固件库函数实现;
void FLASH_Unlock(void);
同样的道理,在对FLASH写操作完成之后,我们要锁定FLASH
void FLASH_Lock(void);

写操作函数

固件库提供了三个FLASH写函数:

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擦除函数:

FLASH_Status FLASH_ErasePage(uint32_t Page_Address);
FLASH_Status FLASH_EraseAllPages(void);
FLASH_Status FLASH_EraseOptionBytes(void);

第一个是也擦除函数,根据页地址擦除特定的页数据
第二个函数是擦除所有的页数据
第三个函数是擦除用户选择字节数据

获取状态函数

FLASH_Status FLASH_GetStatus(void);

返回值是通过枚举类型定义的:

	typedef enum{FLASH_BUSY = 1,             //忙FLASH_ERROR_PG,             //编程错误FLASH_ERROR_WRP,            //写保护错误FLASH_COMPLETE,             //操作完成FLASH_TIMEOUT               //操作超时}FLASH_Status;

等待操作完成函数

在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地惊醒;即在进行写或擦除操作时,不能进行代码或数据的读取操作。所以在每次操作之前,我们都要等待上一次操作完成这次操作才能开始。

FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout);

入口参数为等待时间,返回值是FLAHS的状态,这个很容易理解,这个函数本身我们在固件库中使用得不多,但是在固件库函数体中间可以多次看到。

读FLASH特定地址数据函数

读取FLASH指定地址的半字的函数固件库并没有给出来,这里我们需要自己写一个函数

u16  STMFLASH_ReadHalfWord(u32 faddr)
{return *(vu16*)faddr;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的数字温度计设计

目 录 摘 要 I Abstract II 引 言 1 1 整体方案设计 3 1.1 主控芯片类型选择 3 1.2 测温电路选择 3 1.3 系统总体方案 4 2 系统的硬件电路设计 5 2.1 单片机系统设计 5 2.2 显示模块设计 8 2.3 温度读取电路的设计 10 3 系统软件设计 13 3.1 软件开发环境的介绍 13 3.2 系统重…

MySQL基础-----SQL语句之DDL数据定义语句

目录 前言 开启登录数据库 一、数据库操作 1.查询所有数据库 2.切换使用数据库 3.查询当前使用的数据库 4.创建数据库 创建一个hello数据库, 使用数据库默认的字符集。 创建一个itheima数据库,并且指定字符集 5.删除数据库 二、表操作 1.查询当前数据库所有…

2024Android高级面试题,这些细节在Android面试上要注意了

前言 对于字节跳动的二面三面而言,FrameworkMVP架构HashMap原理性能优化Flutter源码分析等问题都成高频问点!然而很多的朋友在面试时却答不上或者答不全!今天在这分享下这些问点的视频解析给大家,希望对有需要的朋友有所帮助&…

【洛谷 P8720】[蓝桥杯 2020 省 B2] 平面切分 题解(计算几何+集合+向量)

[蓝桥杯 2020 省 B2] 平面切分 题目描述 平面上有 N N N 条直线, 其中第 i i i 条直线是 y A i ⋅ x B i yA_{i} \cdot xB_{i} yAi​⋅xBi​ 。 请计算这些直线将平面分成了几个部分。 输入格式 第一行包含一个整数 N N N。 以下 N \mathrm{N} N 行, 每行包含两个…

基于Google Vertex AI 和 Llama 2进行RLHF训练和评估

Reinforcement Learning from Human Feedback 基于Google Vertex AI 和 Llama 2进行RLHF训练和评估 课程地址:https://www.deeplearning.ai/short-courses/reinforcement-learning-from-human-feedback/ Topic: Get a conceptual understanding of Reinforcemen…

vue3 (四)动态组件Vs异步组件

1.动态组件 点击toggle切换2个组件&#xff0c;配合<keep-alive>使用防止切换后数据丢失 <keep-alive><component :is"currentItem"></component> </keep-alive> 2.异步组件 定义方法&#xff1a;app.component(组件名,Vue.defineAs…

西安雁塔未来人工智能计算中心算力成本分析

先看一例旧闻&#xff1a;西部“最强大脑”落户雁塔——30亿亿次超算能力助力创新之城建设 其中提到一期算力为 300PFLOPS FP16&#xff08;每秒30亿亿次半精度浮点计算&#xff09;&#xff0c;项目总投资约为19亿元。 这个算力是什么概念呢&#xff1f; 我们以深度学习训练中…

GIS之深度学习06:CUDA12安装(适配版)

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA开发的并行计算平台和编程模型&#xff0c;用于利用NVIDIA GPU的并行计算能力&#xff0c;它允许开发者使用类似于C语言的编程语言编写并行程序&#xff0c;利用GPU的大规模并行计算能力加速各种类型的…

C语言写学生信息管理系统

说明:本博文来自CSDN-问答板块,题主提问。 需要:用C语言设计一个学生信息管理系统(尽量不使用指针),学生信息包括学号,姓名,数学成绩,C语言成绩,英语成绩和每个学生的总成绩这几项。系统要实现如下几个功能:1.添加学生2.删除学生3.修改学生信息4.查询学生信息5进行学…

关于Linux上的$ORIGIN解说

1、Linux RPATH & $ORIGIN 许多现代C / C 项目都利用Autotools创建GNU构建系统&#xff0c;例如 根据平台生成make文件。 可执行文件&#xff08;二进制文件&#xff09;在生成/编译过程中生成&#xff0c;并且可以在执行编译的计算机上本地执行。 但是&#xff0c;如果将…

2024大厂Java面试最火问题,1200页文档笔记

前言 ⽂章有点⻓&#xff0c;请耐⼼看完&#xff0c;绝对有收获&#xff01;不想听我BB直接进⼊⾯试分享&#xff1a; 准备过程蚂蚁⾦服⾯试分享拼多多⾯试分享字节跳动⾯试分享最后总结个人所得&#xff08;供大家参考学习&#xff09; 当时我⾃⼰也准备出去看看机会&#…

Claude 3家族惊艳亮相:AI领域掀起新浪潮,GPT-4面临强劲挑战

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-agd7RSCGMblYxo85 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

实践:Git 如何撤回已 Push 的代码

一、IDEA 操作 操作指南&#xff1a; 第一步&#xff0c;查看提交记录&#xff0c;找到撤回的索引&#xff08;记录&#xff09;。 第二步&#xff0c;工作目录&#xff08;也就是项目代码&#xff09; 回推到指定版本。 第三步&#xff0c;强制提交。 到此&#xff0c;仓库的…

微服务知识03

1、ES搜索引擎,高性能的分布式搜索引擎,底层基于Lucene 主要用于应用程序中的搜索系统 日志收集 2、基础概念 3、ES处理流程 5、下载中文分词器 Releases infinilabs/analysis-ik GitHub 6、分词模式 最细粒度拆分、智能分词 7、Elaticsearch配置流程 (1)把文件拖进…

基于单片机的蓝牙无线密码锁设计

目 录 摘 要 Ⅰ Abstract Ⅱ 引 言 1 1 系统总体设计 3 1.1 系统设计要求 3 1.2 系统设计思路 3 2 系统硬件设计 5 2.1 设计原理 5 2.2 主控模块 5 2.3 芯片模块 8 2.4 矩阵键盘模块 9 2.5 液晶显示模块 10 2.6 继电器驱动模块 12 2.7 蜂鸣器模块 13 2.8 蓝牙模块 14 3 系统软…

一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读

程序员如何选择职业赛道&#xff1f; 文章目录 程序员如何选择职业赛道&#xff1f;前言**作者简介**目录直播预告 前言 OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c;在多项专业和学术基准测试中表现出的智力水平&#xff0c;不…

为什么LLMs不适合编程

使用LLMs进行编码的挑战 自制形象 在过去的一年中&#xff0c;大型语言模型&#xff08;LLMs&#xff09;凭借其自然语言理解能力展示出了惊人的能力。这些先进的模型不仅重新定义了自然语言处理的标准&#xff0c;而且还广泛应用于各种应用和服务中。 对使用LLMs进行编码的兴…

精通Docker Compose: 在docker-compose.yml中配置硬件资源访问

精通Docker Compose: 在docker-compose.yml中配置硬件资源访问 引言Docker与硬件资源访问简介为何需要在Docker容器中访问硬件资源Docker如何与硬件资源交互 准备工作安装Docker和Docker Compose确保硬件资源可被主机识别小结 在docker-compose.yml中配置硬件资源访问显卡访问配…

HarmonyOS创建项目和应用—设置数据处理位置

项目和应用介绍 关于项目 项目是资源、应用的组织实体。资源包括服务器、数据库、存储&#xff0c;以及您的应用、终端用户的数据等。在您使用部分服务时&#xff0c;您是数据的控制者&#xff0c;数据将按照您设置的数据处理位置来存储在指定区域。 通常&#xff0c;您不需…

java数据结构与算法刷题-----LeetCode230. 二叉搜索树中第K小的元素

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 中序遍历2. 预处理 1. 中序遍历 解题思路:时间复杂度O(Hk)其…