STM32读写片内FLASH 笔记

文章目录

  • 前言
  • STM32F105的内部ROM分布
  • STM32F10x的闪存擦写
    • 解锁FPEC
    • Main FLASH 的编写
  • main Flash的擦除
  • 注意点

前言

在通过OTA的方式对设备进行升级,若在使用内部FLASH装载固件程序的方式下,需要擦写 内部FLASH 从而实现把新的固件程序写入到 内部FLASH。

参考文档:ST的闪存编程文档

STM32F105的内部ROM分布

在这里插入图片描述
F105属于互联型设备,其内部的主存储器ROM有256KB。
这256KB 由 128页 ,每页2KB的页面组成

Information block 分为两个部分:System memory 和 Option bytes

  • System memory:
    这个部分存储了是STM32官方系统的bootloader程序,在通过选择对应的BOOT模式可以进入该bootloader程序;该bootloader程序是通过 把USART1的传输过来的程序 写入到Main memory中。
    在互联型产品中,bootloader程序 还可以读取 USART2(重映射)等接口,从而烧录程序。
  • Option bytes
    有两种保护方式:①写包含;②读保护

注意:
1.只有在写FLASH完毕后,才能正确的读取FLASH。在 写FLASH时读取FLASH,将会造成写失败;
2.只有在内部高速晶振开启时,才能写入/擦除内部FLASH。
3.在低功耗模式下,对FLASH的任何访问将被中止。

STM32F10x的闪存擦写

STM32F10x的闪存擦写由 FPEC 控制。

FPEC指Flash program and erase controller,FPEC由7个32位的寄存器组成。
在这里插入图片描述
注意:只有CPU没有访问 正在操作的FLASH,CPU将不会因操作FLASH而阻塞。

解锁FPEC

在复位后,FPEC是被保护着。

需要往 FLASH_KEYR 寄存器写入固定的值,才可解开FPEC的锁。

如果这个值写错了,那么只有在下一次复位后,才能再次接口FPEC的锁。

Main FLASH 的编写

每次只能往main flash写入16位数据。

在写入main flash的指定地址时,若该地址并未被擦除,则FLASH_SR的 PGERR 将会被置位。
若该地址是写保护的(通过 FLASH_WRPR 设置),则FLASH_SR的 WRPRTERR 将会被置位。
在这里插入图片描述

标志的擦写 main Flash的步骤如下:
在这里插入图片描述

main Flash的擦除

在编写 main Flash 之前,需要先擦除。

擦除 main Flash 的方式有两种:页擦除,全擦除。


页擦除:页擦除是擦除 main Flash的一个页面。
在这里插入图片描述

map 0x40000000,0x40080000 read write

注意点

在使用stm32自带的flash保存数据时候,如下特点必须知道:

1、必须是先擦除一个扇区,才能写入

2、读数据没有限制

3、写数据必须是偶数(2字节、4字节),同时写入地址以一定要考虑字节对齐,

4、一般都是在最后几页进行数据保存的,确保数据量不超过flash的的大小,比如f103大容量是2k字节,其实一个扇区只能写入1k数量的2字节的数据。

http://eeskill.com/article/id/29479

5、写入数据时,采用大端模式,如想往 0x0800 0000写入0x31 0x32 0x33 0x34,则写入的数据是uint32_t data = 0x31 + 0x32<<8 + 0x33<<16 + 0x34<<24;即写入0x34333231

6、一旦写入数据,无论你写的是FLASH擦除后的默认值0xff还是其他值,若在不擦除的情况下再次往该地址写数据,必定失败。

7、若遇到写入 或 擦除失败的清空,需要清除标志位后才能再继续写入或擦除。

FLASH_ClearFlag(FLASH_FLAG_EOP |   FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
flash_sta=FLASH_ErasePage(UPDAFLAG_FLASH_56K);

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

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

相关文章

Python爬虫实战:爬取财金网实时财经信息

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 在当今数字化时代,互联网数据呈爆炸式增长,其中蕴含着巨大的商业价值、研究价值和社会价值。从金融市场动态分析到行业趋势研究,从舆情监测到学术信息收…

3.3.2 用仿真图实现点灯效果

文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…

996引擎-问题处理:实现自定义道具变身卡

996引擎-问题处理:实现自定义道具变身卡 方案一、修改角色外观(武器、衣服、特效) 实现变身先看效果创建个NPC测试效果方案二、利用 Buff 实现变身创建:变身Buff配buff表,实现人物变形测试NPC创建道具:变身卡配item表,添加道具:变身卡触发函数参考资料方案一、修改角色外…

AI视频领域的DeepSeek—阿里万相2.1图生视频

让我们一同深入探索万相 2.1 &#xff0c;本文不仅介绍其文生图和文生视频的使用秘籍&#xff0c;还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果&#xff08;我录制的GIF动图&#xff09; 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…

驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来

智慧浪潮崛起&#xff1a;AI与边缘计算的时代 正悄然深植于我们的日常生活之中&#xff0c;无论是火热的 ChatGPT 与 DeepSeek 语言模型&#xff0c;亦或是 Meta 智能眼镜&#xff0c;AI 技术已经无形地影响着我们的生活。这股变革浪潮并未停歇&#xff0c;而是进一步催生了更高…

如何快速判断IP是否为代理

1.探究IP地址的地理分布 代理IP的所在位置&#xff0c;往往与用户实际所在地不吻合。可以通过运用WHOIS查询工具或在线IP地址定位服务&#xff0c;输入所需查询的IP&#xff0c;即可获得其地理位置信息。 若该信息显示的位置并非用户所在城市或显示为知名代理服务器节点&…

从CL1看生物计算机的创新突破与发展前景:技术、应用与挑战的多维度剖析

一、引言 1.1 研究背景与意义 随着科技的飞速发展&#xff0c;计算机技术已经成为推动现代社会进步的核心力量之一。从最初的电子管计算机到如今的大规模集成电路计算机&#xff0c;计算机的性能得到了极大的提升&#xff0c;应用领域也不断拓展。然而&#xff0c;传统计算机…

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-CSDN博客 目录 引言 一、什么是DeepSeek&#xff1f; 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型…

zabbix图表中文显示方框

问题&#xff1a; zabbix安装完成后&#xff0c;查看图形&#xff0c;下方中文显示为方框 思路&#xff1a; 替换字体文件&#xff0c;或者修改配置文件指向中文可以正常显示的字体文件 方案&#xff1a; 查找资料确认影响因素 通过资料查询得知&#xff0c;使用的字体文…

【Linux-网络】HTTP的清风与HTTPS的密语

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da; 引言 &#x1f4da; 一、HTTP &#x1f4d6; 1.概述 &#x1f4d6; 2.URL &#x1f5…

通过数据库网格架构构建现代分布式数据系统

在当今微服务驱动的世界中&#xff0c;企业在跨分布式系统管理数据方面面临着越来越多的挑战。数据库网格架构已成为应对这些挑战的强大解决方案&#xff0c;它提供了一种与现代应用架构相匹配的分散式数据管理方法。本文将探讨数据库网格架构的工作原理&#xff0c;以及如何使…

RangeError: Radix must be an integer between 2 and 36

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

荆为好的专栏推荐

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点下班 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 专栏推荐特别篇1. 后端专栏推荐2. 云原生专栏…

Bean 的生命周期主要包括以下阶段:

Bean 的生命周期主要包括以下阶段&#xff1a; 定义 &#xff1a;在配置文件或注解中定义 Bean&#xff0c;包括其类、作用域等信息。 实例化 &#xff1a;Spring 容器根据定义创建 Bean 的实例。 属性赋值 &#xff1a;容器为 Bean 设置配置的属性值。 初始化 &#xff1a;…

计算机基础:二进制基础06,用八进制来计数

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;计算机基础&#xff1a;二进制基础05&#xff0c;八进制简介 回…

图论-腐烂的橘子

994.腐烂的橘子 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a;值 0 代表空单元格&#xff1b; 值 1 代表新鲜橘子&#xff1b; 值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。返回 直到…

TypeError: Cannot create property ‘xxx‘ on string ‘xxx‘

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

嵌入式硬件设计SPI时需要注意什么?

嵌入式硬件设计SPI时需要注意什么? 1. 硬件设计注意事项 关键点注意事项1. 信号完整性- 缩短SCK、MOSI、MISO的走线长度,避免反射干扰。- 使用屏蔽线或差分信号(高速场景)。- 阻抗匹配(特别是高频信号,如50Ω端接)。2. 电源与地线- 电源去耦:每个SPI芯片的VCC附近放置0…

git-filter-repo 清除大文件教程

git filter-repo 是一个用于过滤和清理 Git 仓库历史的工具&#xff0c;它可以高效地批量修改提交历史中的文件内容、删除文件、重命名文件以及进行其他历史重构操作。相较于 git filter-branch&#xff0c;它通常更快且更易于使用。 以下是一个基本示例&#xff0c;说明如何使…

STM32之软件SPI

SPI传输更快&#xff0c;最大可达80MHz&#xff0c;而I2C最大只有3.4MHz。输入输出是分开的&#xff0c;可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意&#xff1a;所有设备需要共地&#xff0c;时钟线主机输出&…