FLASH闪存的读取、擦除、编程

news2024/10/6 9:03:17

一、stm32寄存器地址介绍

二、FLASH简介

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

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

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

(4)在程序中编程(In-Application Programming - IAP)可以使用微控制器支持的任—种通信接口下载程序。(首先在 程序更新后不影响的地方自己写一个bootloader程序,需要更新程序之后,程序跳转到自定义的bootloader程序,然后通过任意一种通信接口接收数据,然后在通过对flash的读写,将接受到的数据放到程序正常运行的地方)

三、闪存模块组织

四、flash解锁和加锁

FPEC共有三个键值:

  • RDPRT键=Ox000000A5
  • KEY1 = Ox45670123
  • KEY2 = OxCDEF89AB

解锁步骤:
        复位后,FPEC被保护,不能写入FLASH_CR

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

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

加锁步骤:
        设置FLASH_CR中的LOCK位(置1)  锁住FPEC和FLASH_CR

加锁和解锁的目的是防止误操作

五、使用指针访问存储器

#define    _IO   volatile

使用指针读指定地址下的存储器:
        uint16_t Data = *((_I0 uint16_t *)(0×08000000)) ;

使用指针写指定地址下的存储器:
        *((___IO uint16_t*)(0x0800ee0e)) = ox1234;

六、编程过程

 

针对以上编程过程,库函数已经帮我们写好了,我们只需要调用函数接口即可

七、选项字节

当往RDP里面写入数据之后,需要往nRDP里面写入对应的补码,如果检测到RDP和nRDP的数据不是补码关系, 那么解除读保护错误。但是此操作硬件会自动帮我们完成

八、器件电子签名

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

        闪存容量寄存器:
        基地址:Ox1FFF F7EO   大小: 16位

        产品唯一身份标识寄存器:
        基地址: Ox1FFF F7E8    大小: 96位

九、代码书写

#include "MyFLASH.h"

uint32_t MyFLASH_Readword (uint32_t Address)
{
    return *( (__Io uint32_t *)(Address) );
}

uint16_t MyFLASH_ReadHalfword (uint32_t Address)
{
    return *((__1o uint16_t *)(Address) );
}

uint8_t MyFLASH_ReadByte (uint32_t Address)
{
    return * ( (__Io uint8_t * ) (Address)) ;
}

void MyFLASH_EraseAllPages (void)
{
    FLASH_Unlock () ;
    FLASH_EraseAllPages ( ) ;
    FLASH_Lock () ;
}

void MyFLASH_ErasePage (uint32_t PageAddress)
{
    FLASH_Unlock ( );
    FLASH_ErasePage (PageAddress ) ;
    FLASH_Lock ();
}

void MyFLASH_Programword (uint32_t Address, uint32_t Data)
{
    FLASH_Unlock ( ) ;
    FLASH_Programword (Address,Data) ;
    FLASH_Lock ( ) ;
}

void MyFIASH_ProgramHalfword (uint32_t Address,uint16_t Data)
{
    FLASH_unlock ( ) ;
    FLASH_ProgramHalfword (Address,Data) ;
    FLASH_Lock ();
}

#include "MyFLASH.h"
#include "store.h"

uint16_t store_Data [ 512];

//上电调用初始化函数,然后就可以加载之前存储在flash中的数据
void store_Init (void)
{
    //0x0800Fc00最后一页的首地址;OxA5A5为了判断之前是否存储数据
    if (MyFLASH_ReadHalfword(0x0800Fc00)!= OxA5A5)
    {
        MyFLASH_ErasePage (0x0800FC00);
        MyFLASH_ProgramHalfword (0x0800FC00,0xA5A5);
        // 一页的大小是1K,存储数据数组大小是半字。第一位存储标志位,后面数据位清0
        for (uint16_t i = l; i < 512; i ++)
        {
            MyFLASH_ProgramHalfword (0x0800FC00 + i * 2,0x0000);
        }
    }
    for (uint16_t i = 0; i <512; i ++)
    {
        store_Data [i] = MyFLASH_ReadHalfword (0x0800FCO0 + i * 2);
    }
}

//调用保存函数就会将数据写入flash存储器中
void store_save (void)
{
    MyFLASH_ErasePage (0x080OFC00) ;
    for (uint16_t i = 0; i < 512; i ++)
    {
        MyFLASH_ProgramHalfword (0x0800Fc00 + i * 2,store_Data[i]);
    }
}

void store_clear (void)
{
    for (uint16_t i = 1; i < 512; i ++)
    {
        store_Data[i] = 0x0000;
    }
    store_save () ;
}

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

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

相关文章

Android Studio打包有哪些优势

大家好&#xff0c;现在移动应用程序的快速发展&#xff0c;开发者需要一个强大又可靠的开发环境来创建和打包高质量的 Android 应用程序。Android Studio 是一款由 Google 官方开发的 Android 应用程序开发环境&#xff0c;提供了许多的优势和便利&#xff0c;那究竟都有哪些优…

LeetCode刷题--- 括号生成

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归递归、搜…

【自用】Ubuntu20.4从Vivado到ddr200t运行HelloWorld

【自用】Ubuntu20.4新系统从输入法到ddr200t运行HelloWorld 一、编辑bashrc二、Vivado2022.2安装三、编译蜂鸟E203自测样例1. 环境准备2. 下载e203_hbirdv2工程文件3. 尝试编译自测案例1. 安装RISC-V GNU工具链2. 编译测试样例 4. 用vivado为FPGA生成mcs文件1.准备RTL2.生成bit…

界面控件DevExpress WPF Dock组件,轻松创建类Visual Studio窗口界面!

本文主要为大家介绍DevExpress WPF控件中的Dock组件&#xff0c;它能帮助用户轻松创还能受Microsoft Visual Studio启发的Dock窗口界面。 P.S&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress …

社交网络分析(汇总)

这里写自定义目录标题 写在最前面社交网络分析系列文章汇总目录 提纲问题一、社交网络相关定义和概念提纲问题1. 社交网络、社交网络分析&#xff1b;2. 六度分隔理论、贝肯数、顿巴数&#xff1b;3. 网络中的数学方法&#xff1a;马尔科夫过程和马尔科夫链、平均场理论、自组织…

EasyUiAutotest 项目目录设置及说明

一、前置说明 清晰的项目目录结构非常重要的&#xff0c;它能够为项目提供结构化、易维护、易理解的环境。 二、目录设置及说明 项目目录结构如下&#xff1a; EasyUiAutotest ├───atme # me&#xff0c;供个人使用的目录&#xff0c;与整体项目无关&#xff0c;存…

ubuntu 20.04安装一系列软件

1&#xff09;安装下载的包的指令&#xff1a; sudo dpkg -i xxx.deb 2&#xff09;通用指令&#xff1a; sudo apt-get install xxxx 3&#xff09;更新和升级软件包&#xff08;遇到Unable to locate packge等问题先尝试这个指令&#xff09;&#xff1a; sudo apt-get up…

如何取消iCloud订阅,这里有非常明细的步骤

iCloud是存储文件、照片和备份的好方法&#xff0c;但每个用户获得的5GB免费iCloud存储空间往往不够。如果你使用iCloud Drive在设备之间存储和传输大量文件&#xff0c;你可能需要购买更多的iCloud存储。我们将向你展示如何在iPhone设置中更改iCloud存储计划或取消iCloud订阅。…

java8流库之Stream.iterate

简介 java.util.stream.Stream 下共有两个 iterate iterate(T seed, final UnaryOperator<T> f)iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> f) 该方法产生一个无限流&#xff0c;它的元素包含seed&#xff0c;在seed上调用f产生的…

跟着野火学FreeRTOS:第一段(空闲任务与阻塞延时的实现)

在前一小节中&#xff0c;任务操作里面的延时就是直接让 C P U CPU CPU干等着&#xff0c;啥也不干&#xff0c;这样会极大的浪费 C P U CPU CPU的资源。这一小节即将要讲到的阻塞延时就是当任务有延时需要的时候让 C P U CPU CPU不要干等着&#xff0c;而是去执行其它的任务&a…

取消paypal免密支付绑定平台

在设置支付中-》自动支付-》取消特定平台即可。

随机森林 2(决策树)

通过 随机森林 1 的介绍&#xff0c;相信大家对随机森林都有了一个初步的认知&#xff0c;知道了随机和森林分别指的是什么&#xff0c;以及决策树根据什么选择内部节点。本文将会从森林深入到树&#xff0c;去看一下决策树是如何构建的。网上很多文章都讲了决策树如何构建&…

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候&#xff0c;有投递简历功能&#xff0c;有投递就会有随之而来的查看简历对吧&#xff0c;我投递过的简历&#xff0c;另存为一个文件夹&#xff0c;就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹&#xff0c;用于存放PDF&#x…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表)

一、模型user对象>和数据库的字段关联 & 自动生成 【其中涉及删除表数据&#xff0c;一切又从零开始】 二、模型user对象>和数据库的字段关联 2.1在model文件夹下&#xff0c;新建 user对象 2.1.1 概念 大家可以想象我们现在的数据是存储在数据库里的&…

Java中的时间日期类⭐️通过具体案例分析下开发中常用到的几种时间日期格式类的使用

小伙伴们大家好&#xff0c;系统中不少模块都要用到时间日期&#xff0c;来分析总结下项目中用到的些日期类 目录 一、时间日期类 1.java.util.Calendar&#xff1a; 2.java.util.Date&#xff1a; 3.java.time.LocalDate、java.time.LocalTime、java.time.LocalDateTime&…

Ubuntu 常用命令之 netstat 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 netstat 是一个非常有用的命令行工具&#xff0c;它可以帮助我们监控和诊断网络问题。在 Ubuntu 系统中&#xff0c;我们可以使用 netstat 命令来查看网络连接、路由表、接口统计等信息。 netstat 命令的参数有很多&#xff0c;以…

anaconda 安装 使用 pytorch onnx onnxruntime

一&#xff1a;安装 如果不是 x86_64&#xff0c;需要去镜像看对应的版本 安装 Anaconda 输入命令 bash Anaconda3-2021.11-Linux-x86_64.sh 然后输入 yes 表示同意 确认安装的路径&#xff0c;一般直接回车安装在默认的 /home/你的名字/anaconda3 很快就安装完毕。输入 yes…

【Vue中给输入框加入js验证_blur失去焦点进行校验】

【Vue中给输入框加入js验证_blur失去焦点进行校验】 通俗一点就是给输入框加个光标离开当前文本输入框时&#xff0c;然后对当前文本框内容进行校验判断 具体如下&#xff1a; 1.先给文本框加属性 blur“validatePhoneNumber” <el-input v-model“entity.telephone” blur…

航空港务数据大屏为航空港的可持续发展提供有力支撑!

随着经济的发展&#xff0c;不断加建与扩建民用机场&#xff0c;空港行业规模不断扩大。在不断引进和消化发达国家先进技术的同时&#xff0c;中国深入开展了对新技术和新材料的研究&#xff0c;极大地丰富和发展了中国的机场建设技术。且各项机场建设计划均已落实推进&#xf…

下午好~ 我的论文【yolov5】(第四期)

文章目录 简介模型Mosaic数据增强自适应锚框计算自适应图片缩放Focus结构CSP结构 NeckCIOU_Lossnms非极大值抑制代码最后 简介 YOLO V4没过多久YOLO V5就出来了。YOLO V5的模型架构是与V4非常相近的。 模型 Yolov5官方代码中&#xff0c;给出的目标检测网络中一共有4个版本&…