历史上的今天
返回首页

历史上的今天

今天是:2025年03月07日(星期五)

正在发生

2019年03月07日 | STM32之内部FLASH原理

2019-03-07 来源:eefocus

不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。市面上 STM32F1 开发板使用的芯片是 STM32F103系列,其 FLASH 容量一般为 512K 字节,属于大容量芯片。大容量产品的 Flash 模块组织结构如图 40.1.1 所示:



STM32F1 的闪存(Flash)模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。下面我们就来介绍下这些组成部分:


①主存储器。该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是0X08000000, BOOT0、BOOT1 都接 GND 的时候,就是从 0X08000000 开始运行代码的。


②信息块。该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 BOOT0 接 V3.3, BOOT1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能,这里我们不做介绍,大家可以百度了解。


③闪存存储器接口寄存器。该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。


在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。


下面我们就来看下如何对闪存进行读取、编程和擦除。


(1)闪存的读取


STM32F1 可通过内部的 I-Code 指令总线或 D-Code 数据总线访问内置闪存模块,本章我们主要讲解数据读写,即通过 D-Code 数据总线来访问内部闪存模块。为了准确读取 Flash 数据,必须根据 CPU 时钟 (HCLK) 频率和器件电源电压在 Flash 存取控制寄存器 (FLASH_ACR)中正确地设置等待周期数(LATENCY)。当电源电压低于 2.1V 时,必须关闭预取缓冲器。 Flash 等待周期与 CPU 时钟频率之间的对应关系,如图 40.1.2 所示:



等待周期通过 FLASH_ACR 寄存器的 LATENCY[2:0]三个位设置。系统复位后, CPU 时钟频率为内部 16M RC 振荡器, LATENCY 默认是 0,即 1 个等待周期。供电电压,我们一般是 3.3V,所以,在我们设置 72Mhz 频率作为 CPU 时钟之前,必须先设置 LATENCY 为 3,否则 FLASH 读写可能出错,导致死机。STM23F1 的 FLASH 读取是很简单的。例如,我们要从地址 addr,读取一个字(字节为 8 位,半字为 16 位,字为 32 位),可以使用如下方法来读取:data=*(vu32*)addr;


将 addr 强制转换为 vu32 指针,然后取该指针所指向的地址的值,即得到了 addr 地址内的值。类似的,将上面的 vu32 改为 vu16,即可读取指定地址的一个半字。相对 FLASH 读取来说,STM32F1 FLASH 的写就复杂一点了,下面我们介绍 STM32F1 闪存的编程和擦除。


(2)闪存的编程和擦除


STM32 的闪存编程是由 FPEC(闪存编程和擦除控制器)模块处理的,这个模块包含 7 个 32 位寄存器,他们分别是:


① FPEC 键寄存器(FLASH_KEYR)


② 选择字节键寄存器(FLASH_OPTKEYR)


③ 闪存控制寄存器(FLASH_CR)


④ 闪存状态寄存器(FLASH_SR)


⑤ 闪存地址寄存器(FLASH_AR)


⑥ 选择字节寄存器(FLASH_OBR)


⑦ 写保护寄存器(FLASH_WRPR)


其中 FPEC 键寄存器总共有 3 个键值:


RDPRT 键=0X000000A5


KEY1=0X45670123


KEY2=0XCDEF89AB


STM32 复位后, FPEC 模块是被保护的,不能写入 FLASH_CR 寄存器;通过写入特定的序列到 FLASH_KEYR 寄存器可以打开 FPEC 模块(即写入 KEY1 和KEY2),只有在写保护被解除后,我们才能操作相关寄存器。


STM32 闪存的编程每次必须写入 16 位(不能单纯的写入 8 位数据),当FLASH_CR 寄存器的 PG 位为’1’时,在一个闪存地址写入一个半字将启动一次编程;写入任何非半字的数据, FPEC 都会产生总线错误。在编程过程中(BSY 位为’1’ ),任何读写闪存的操作都会使 CPU 暂停,直到此次闪存编程结束。


同样,STM32 的 FLASH 在编程的时候,也必须要求其写入地址的 FLASH 是被擦除了的(也就是其值必须是 0XFFFF),否则无法写入,在 FLASH_SR 寄存器的 PGERR 位将得到一个警告。STM32 的 FLASH 编程过程如下:



从上图可以得到闪存的编程顺序如下:


① 检查 FLASH_CR 的 LOCK 是否解锁,如果没有则先解锁


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


③ 设置 FLASH_CR 寄存器的 PG 位为’1’


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


⑤ 等待 BSY 位变为’0’


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


前面提到,我们在 STM32 的 FLASH 编程的时候,要先判断缩写地址是否被擦除了,所以我们有必要再介绍一下 STM32 的闪存擦除, STM32 的闪存擦除分为两种:页擦除和整片擦除。页擦除过程如下所示:



从上图可以看出,STM32 的页擦除顺序为:①检查 FLASH_CR 的 LOCK 是否解锁,如果没有则先解锁;


②检查 FLASH_SR 寄存器中的 BSY 位,确保当前未执行任何 FLASH 操作;③设置 FLASH_CR 寄存器的 PER 位为’1’;④用 FLASH_AR 寄存器选择要擦除的页;⑤设置 FLASH_CR 寄存器的 STRT 位为’1’;⑥等待 BSY 位变为’0’;⑦读出被擦除的页并做验证;


我们只用到了 STM32 的页擦除功能,整片擦除功能我们在这里就不介绍了。通过以上了解,我们基本上知道了 STM32 闪存的读写所要执行的步骤了,由于篇幅限制,本文并没有 STM32F1 内部 FLASH 相关寄存器进行介绍,大家可以参考相关手册的内容,里面有详细的讲解。

--------------------- 

作者:QQ1034313020 

来源:CSDN 

原文:https://blog.csdn.net/lushoumin/article/details/87694389 

版权声明:本文为博主原创文章,转载请附上博文链接!


推荐阅读

史海拾趣

HP(Keysight)公司的发展小趣事

HP(Keysight)公司发展故事

故事一:初创时期的艰辛与突破

HP(惠普)的起源可以追溯到1939年,由威廉·惠普(William Hewlett)和戴维·欧文(David Packard)在美国加州的一个小车库内创立。最初,他们专注于生产音频振荡器,这是一种用于测试音频设备的设备。尽管条件简陋,但凭借过人的技术和敏锐的市场洞察力,他们的产品很快获得了市场的认可。这一成功为公司奠定了坚实的基础,也为后续进入电子仪器和计算机领域铺平了道路。

故事二:半导体技术的先驱

1940年,HP公司开发出了第一台采用半导体技术的电子计算机,这在当时是一项革命性的成就。这台计算机不仅能够执行复杂的计算任务,还标志着HP在半导体技术领域的领先地位。这一突破不仅为公司赢得了业界的尊重,也为后续的微型计算机和个人计算机的发展奠定了基础。

故事三:微型计算机市场的开拓者

1960年,HP公司再次引领行业潮流,开发出了世界上第一台商用微型计算机。这台计算机采用了更小的集成电路,比之前的计算机更加小巧、便宜且易于使用。这一创新不仅降低了计算机的门槛,使得更多人能够接触到计算机,也推动了计算机技术的普及和应用。HP在微型计算机市场的成功,进一步巩固了其在电子行业的领导地位。

故事四:个人电脑市场的崛起

进入70年代,HP公司开始涉足个人电脑市场。1970年,HP发布了第一台商业个人计算机(PC),这一举措标志着公司正式进入了一个全新的业务领域。随着个人电脑市场的迅速发展,HP不断推出新产品,满足消费者的多样化需求。从早期的台式机到后来的笔记本电脑,HP始终保持着技术领先优势,为用户带来更加便捷、高效的计算体验。

故事五:并购与多元化发展的战略

在发展过程中,HP公司也通过并购等方式不断拓展业务领域。2002年,HP以250亿美元收购了康柏(Compaq),这是当时科技行业最大的一笔收购。这次并购不仅增强了HP在个人电脑市场的竞争力,也推动了公司在服务器、存储设备等多个领域的发展。此外,HP还涉足软件及服务等多个领域,成为一个多元化的科技巨头。通过不断并购和业务拓展,HP在全球科技行业的地位日益稳固。

请注意,虽然问题中提到了Keysight,但Keysight实际上是惠普在2014年从惠普科技公司(HP Inc.)分拆出来的一家独立公司,专注于电子测量和测试解决方案。因此,上述故事主要围绕HP(惠普)公司的发展历史进行描述,并未直接涉及Keysight公司。

EMCORE公司的发展小趣事

由于篇幅限制,我无法在此直接给出5个完整的500字以上的EMCORE公司发展故事。但我可以概述5个关于EMCORE公司在电子行业发展的关键点,每个点以简要的故事形式呈现,并尽量保持其客观性和事实性。

  1. 纳斯达克上市与早期发展

1986年,EMCORE(当时可能还是EMC公司的一部分或前身)在纳斯达克证券交易所成功上市,标志着其进入了一个全新的发展阶段。这一时期,公司可能通过融资和资本运作,为后续的技术研发和市场拓展奠定了坚实的基础。

  1. 技术创新与产品升级

在多年的发展历程中,EMCORE一直致力于技术创新和产品升级。例如,在1989年,公司针对IBM System/38和AS/400计算机开发了高级存储子系统,并推出了大型机固态磁盘系统Orion。这些创新不仅提升了公司的技术实力,也为其赢得了市场的认可。

  1. 与IBM等巨头的合作

EMCORE在发展过程中,与IBM等电子行业的巨头建立了紧密的合作关系。这种合作关系可能为公司带来了技术上的支持和市场上的机会,同时也提升了其在行业内的地位和影响力。

  1. 国际化布局

为了拓展国际市场,EMCORE在1988年在爱尔兰科克开设了欧洲制造工厂。这一举措不仅提升了公司的生产能力,也为其进入欧洲市场提供了便利。此后,公司可能还在其他国家和地区设立了分支机构或研发中心,以进一步推动其国际化进程。

  1. 与新奥集团的合作

近年来,EMCORE在新能源领域也取得了重要进展。例如,在2008年,公司与中国最大的能源公司之一新奥集团合作,在中国部署了第一个聚热光伏(CPV)系统。这一合作项目不仅展示了EMCORE在新能源技术方面的实力,也为其在中国的业务拓展提供了良好的契机。

请注意,以上故事是基于公开信息和行业知识进行的概括和推测,可能无法完全还原EMCORE公司发展的每一个细节。如需更详细的信息,建议查阅相关报道和资料。

Alliance Memory公司的发展小趣事

Alliance Memory是一家专注于存储器产品的公司,以下是其发展历程的五个相关故事:

  1. 成立与发展初期: Alliance Memory成立于2006年,总部位于美国南卡罗来纳州。公司专注于提供DRAM(动态随机存取存储器)和SRAM(静态随机存取存储器)解决方案。在成立之初,公司致力于与全球供应链建立紧密的合作关系,以确保产品的质量和可靠性。通过与先进制造厂商合作,Alliance Memory能够提供高品质的存储器产品,满足客户的需求。

  2. 扩大产品线: 随着市场需求的增长,Alliance Memory不断扩大其产品线,涵盖各种容量和类型的DRAM和SRAM产品。公司不断改进和优化其制造工艺,并与全球领先的技术合作伙伴密切合作,以确保产品的性能和稳定性。通过不断提供新的存储器解决方案,Alliance Memory成功吸引了更多的客户,并在行业中树立了良好的声誉。

  3. 全球市场拓展: Alliance Memory的产品销售遍布全球各个地区,包括美国、欧洲、亚洲等市场。公司与全球各地的分销商和代理商建立了稳固的合作关系,以扩大其产品的市场份额。通过在全球范围内提供及时和高效的客户服务,Alliance Memory不断增强了其在国际市场上的竞争力。

  4. 技术创新与研发投入: 作为一家技术驱动型公司,Alliance Memory不断投入研发和创新,以提供最先进的存储器产品。公司的研发团队与业界领先的技术合作伙伴密切合作,不断推出具有竞争优势的新产品。通过持续的技术创新,Alliance Memory得以不断满足客户不断增长的需求,并保持在行业中的领先地位。

  5. 可持续发展与社会责任: 除了致力于业务发展,Alliance Memory还积极履行企业社会责任,关注环境保护和社会公益事业。公司采取了一系列可持续发展的举措,包括节能减排、资源循环利用等,努力降低对环境的影响。此外,Alliance Memory还参与各种公益活动,支持教育、环保和社区发展等领域的项目,为社会做出积极贡献。

Boyd Corporation公司的发展小趣事

Boyd Corporation在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,通过采用环保材料和节能技术,减少生产过程中的环境污染和资源消耗。此外,Boyd Corporation还积极参与公益事业和慈善活动,回馈社会。这些举措使得Boyd Corporation在社会上树立了良好的企业形象,也赢得了更多客户的信任和支持。

ATO SOLUTION公司的发展小趣事

在电子行业的激烈竞争中,ATO SOLUTION公司通过一项创新性的技术突破,成功引领了市场的新潮流。该公司研发出了一款高效能的半导体芯片,极大地提升了电子设备的性能和能效比。这一技术的问世,迅速获得了行业内外的广泛关注和认可,为公司赢得了大量合作伙伴和客户,奠定了市场领先地位。

康奈特(CNNT)公司的发展小趣事

在光学镜片领域,产品质量是企业的生命线。康奈特深知这一点,因此从原材料采购到生产制造的每一个环节都建立了严格的品控体系。公司引进了先进的检测设备和技术手段,对每一片镜片都进行严格的检测和筛选。这种对质量的执着追求不仅赢得了消费者的信赖和认可,也为公司赢得了良好的口碑和市场份额。

问答坊 | AI 解惑

stc单片机资料

还需要什么资料可以联系我…

查看全部问答>

4545

:\'(  我四个文件都下了 但是下了很多虚拟光驱都打不开Protel_DXP_2004.iso 各位大侠你们用什么打开的 个我发一个过来 谢了…

查看全部问答>

【xilinx技术问答】后端布局布线的频率

问:在后端布局布线之前怎么确定系统的最高工作频率?是一点点往上升还是有什么计算公式?在综合之后啦? 综合后的STD基本上没什么延迟信息? 答:看时序报告,里面有FMAX,推算的方法根据关键路径来计算的,也就是逻辑延时中最长的那条路径,这条 ...…

查看全部问答>

BSP中sysPhysMemDesc[]和sysStaticTlbDesc[]的区别

boot启动时已经用sysPhysMemDesc[]数组进行了虚拟内存到物理内存的映射,那为啥还需要sysStaticTlbDesc[]的Effective地址到Real地址的映射啊??…

查看全部问答>

找工作!

六年WinCE开发经验,都是基于arm架构的。 两年winCE下的网络开发,socket 编程,两年WinCE手机开发,ril部分,两年WinCE手机BSP开发! 值多少钱? 本人在北京 联系方式:wincebsp@sina.com…

查看全部问答>

修改wince 软键盘位置

我看wince现实软键盘是调用的api:sipshowim();可这函数好像找不到源码。。。。。所以我还没找到修改软键盘位置的方法,希望知道的指导。。。谢谢…

查看全部问答>

MCU控制GPRS模块(M23G)收发短信接打电话-开发总结

源码:[url=http://download.eeworld.net/source/2286092][/url] 这两天用MCU控制GPRS模块(M23G)收发短信接打电话碰到了一些问题,也走了一些弯路,总的看来用AT命令控制GPRS算是比较简单,不过要注意的是一些细节问题,如果没注意到这些问题将 ...…

查看全部问答>

EVC下的画面迁移问题

没有按钮,用键盘事件实现更画面的迁移,请问大侠们如何做,详细点儿,最好有代码,成不成都谢了先…

查看全部问答>

又到了抉择的时候了,我迷茫,我痛苦,谁能帮帮我?

我回顾了这么几年经历,感慨之余带几分迷惘,本文不求呻吟和发牢骚,我也许当局者迷,我也许真的被困住了,只求看出门路的朋友指教一下。 我是80年在广州出生的,上大学时刚好是扩招第一批,当时为了考本科,什么专业都不顾,从高二开始只学语 ...…

查看全部问答>

LED灯散热专用材料

LED灯散热专用材料-软性硅胶导热片 散热是LED灯要重点解决的问题,而在这之前是一个导热过程更是一个关键。传统的散热模式中使用到导热材料是导热硅脂,导热硅脂在成本上会经济一些,但在需要大面积涂抹,存在很大问题,无法涂抹均匀。散热铜敷 ...…

查看全部问答>