FLASH闪存

server/2024/9/24 8:28:18/

一、FLASH简介

1、FLASH简介

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

(2)读写FLASH的用途:     

                利用程序存储器的剩余空间来保存掉电不丢失的用户数据     

                通过在程序中编程IAP),实现程序的自我更新

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

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

2、闪存模块组织

3、FLASH基本结构

4、FLASH解锁

(1)FPEC共有三个键值:     

                RDPRT键 = 0x000000A5(解除读保护的秘钥)

                KEY1 = 0x45670123     

                KEY2 = 0xCDEF89AB

(2)解锁:     

                复位后,FPEC被保护不能写入FLASH_CR     

                在FLASH_KEYR先写入KEY1再写入KEY2,解锁     

                错误的操作序列会在下次复位前锁死FPEC和FLASH_CR

(3)加锁:     

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

5、使用指针访问存储器

(1)使用指针读指定地址下的存储器:     

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

(2)使用指针指定地址下的存储器:     

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

(3)其中:     

                #define    __IO    volatile (易变的数据,防止编译器优化)

6、程序存储器

(1)编程

(2)页擦除

(3)全擦除

7、选项字节

(1)选项字节

        a.RDP:写入RDPRT键(0x000000A5)后解除读保护

        b.USER:配置硬件看门狗和进入停机/待机模式是否产生复位

        c.Data0/1:用户可自定义使用

        d.WRP0/1/2/3:配置写保护,每一个位对应保护4个存储页(中容量)

(2)选项字节编程

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

        b.解锁FLASH_CR的OPTWRE位

        c.设置FLASH_CR的OPTPG位为1(即将写入选项字节)

        d.写入要编程的半字到指定的地址(指针写入操作)

        e.等待BSY位变为0

        f.读出写入的地址并验证数据

(3)选项字节擦除

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

        b.解锁FLASH_CR的OPTWRE位(选项字节里面有一个单独的解锁)

        c.设置FLASH_CR的OPTER位为1(即将擦除选项字节)

        d.设置FLASH_CR的STRT位为1(触发芯片,开始干活)

        e.等待BSY位变为0

        f.读出被擦除的选择字节并做验证

8、器件电子签名

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

(2)闪存容量寄存器:     

                基地址:0x1FFF F7E0     

                大小:16位

(3)产品唯一身份标识寄存器:     

                基地址: 0x1FFF F7E8     

                大小:96位

二、读写内部FLASH

1、按照以下接线方式连接,并将STLINK插到电脑上

2、FLASH函数驱动模块

(1)FLASH库函数的功能

三、读取芯片ID


http://www.ppmy.cn/server/51073.html

相关文章

leetcode(top 100) 三数之和 相向双指针

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…

“锟斤拷,烫烫烫,屯屯屯”的由来

在程序开发过程中,调试是不可或缺的一环。调试不仅可以帮助开发者发现错误,还能提供程序运行时的内部状态信息。然而,在调试过程中,开发者有时会遇到一些奇怪的字符。这些乱码通常是由内存状态的特殊标记,或者字符集不…

计算机网络 —— 应用层(应用层概述及服务方式)

计算机网络 —— 应用层(应用层概述及服务方式) 应用层服务方式C/S(客户端-服务器(C/S)模型)基本概念特点B/S(Browser/Server)基本概念特点应用场景 p2p (对等网络&#…

c++学习 文件操作,模板

文件操作 #include<iostream> #include<string> #include<fstream> using namespace std; //文本操作 //程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放 //通过文件可以数据持久化 //c中对文件操作包含头文件<fstream> /…

基于PaddleDetection的电路板瑕疵检测

文章目录 1. 数据集与框架介绍2. 任务详情3. Cascade R-CNN简介4. 数据分析各类别样本的数量真实框的宽高比真实框在原图的大小比例 5. 相关配置数据增强数据集路径和评估指标学习率和优化器配置预训练CascadeRCNN 的配置日志记录 6. 训练预测7. 参考链接 1. 数据集与框架介绍 …

猫头虎分享:IPython的使用技巧整理

&#x1f42f; 猫头虎分享&#xff1a;IPython的使用技巧整理 关于猫头虎 大家好&#xff0c;我是猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品…

【字符串】常见算法题型及方法总结

什么是字符串&#xff1f; 字符串是若干字符组成的有限序列&#xff0c;可以理解为一个字符数组。在C中提供了一个string类&#xff0c;那我们可能会想vector<char>和string有什么区别呢。在含义和基本操作方面基本是没有区别的&#xff0c;但是string提供了更多相关接口…

C# —— 位运算符

简介 位运算符 主要是用于数值类型计算 运算方式: 将数值转换为二进制 在进行位运算 返回的是一个二进制转十进制的数值 如果二进制数 不够位置 则在前面补零 位与 & 规则: 连接两个数值进行位运算 将数值转换为二进制进行计算 对位运算 有零则零 int a 1; int b 5…