0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32片上Flash读写一些重要知识

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 14:54 次阅读

关于STM32片上Flash读写操作,之前很多朋友遇到过坑,也问过很多相关的问题,这里再简单总结一下。

1写在前面

STM32片上Flash除了存储我们的代码,多余的空间还可以供我自己编程(读写)。比如,存储标志位、字库等。

如果对片上Flash读写操作不当,将会导致不可挽回的结局。比如:修改了应用程序代码导致程序跑飞,非对其操作导致异常中断等。

因此,我们对片上Flash读写操作时,一定要避免一些错误的做法。下面将讲述一些关于STM32片上Flash的知识,让大家掌握更多相关知识。

2

Flash闪存接口

STM32片上Flash闪存接口是在AHB协议上实现了对指令和数据的访问,它通过对存储器的预取缓存,加快了存储器的访问;

闪存接口还实现了在所有工作电压下对闪存编程和擦除所需的逻辑电路,这里还包括访问和写入保护以及选项字节的控制。

内置闪存模块可以在通用地址空间直接寻址,任何32位数据的读操作都能访问闪存模块的内容并得到相应的数据。

3

STM32片上Flash容量

STM32片上Flash容量大小与芯片的型号有关,具体大小可以参看命名规则:

而我们也可以通过读取Flash容量寄存器,或通过STM32 ST-LINK Utility工具获取芯片容量。具体可以参看我的另一篇文章《关于STM32的这几个寄存器》

4

Flash闪存模块的组织

STM32的Flash,有的是分页,而有的却是分块,具体可以查阅“参考手册”。

比如:STM32F0、 F1、 F3、 L1等就是按Page页来划分的,如下图:

而像STM32F2、F4等就是按Sector扇区来划分,如下图:

所以,如果移植代码,从Page页移植到Sector扇区,或者从Sector扇区移植到Page页,这部分底层代码必须要修改才行。

5

非对其写操作

STM32为32位的MCU,即4个字节。如果不是按照4个字节的写Flash,将导致Faults异常。

写Flash过程:

这里大家可以参看我之前分享的文章:

1.位带别名区最低有效位

2.谈谈STM32(CM3)的Faults异常

6

写操作不响应代码或数据读取

对STM32内部FLash的写操作,相对于执行指令是比较耗时的。从数据手册可以得出16位数据编程时间再40 --- 70us。

从STM32编程手册中,可以知道:在进行写或擦除操作时,不能进行代码或数据的读取操作。

比如:你在写Flash期间有接收串口数据,很有可能会丢串口数据。

因为比较耗时,所以,在写数据时,CPU不会执行其他操作。

简单说:在写Flash时,CPU 不能取指令,导致中断得不到及时响应,从而发生接收到的数据未及时读走而被覆盖的现象。

遇到这种情况,解决的办法:使用DMA。DMA不需要CPU干预,一旦 USART 有数据接收到,由 DMA 负责将其传输至循环缓冲区中。软件定期检测循环缓冲区中是否有接收到的数据,如果有则加以处理。

提示:

如果你的代码会反复读Flash,建议使用外部Flash。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    145

    文章

    15989

    浏览量

    343336
  • FlaSh
    +关注

    关注

    10

    文章

    1547

    浏览量

    146626
  • STM32
    +关注

    关注

    2239

    文章

    10665

    浏览量

    348516
收藏 人收藏

    评论

    相关推荐

    STM32flash能否读取正在运行的代码段内容?

    如题 小弟想请教下大家 STM32flash的读取问题。举个例子: 函数的功能是 读取
    发表于 04-16 07:22

    STM32H750 QSPI flash重映射模式下有方法能实现读写操作吗?

    STM32H750 QSPI flash重映射模式下有方法能实现读写操作吗
    发表于 03-25 08:06

    通用bootloader选“支持spi flash”,无论设定download为内还是flash启动都找不到at45db161,为什么?

    通用bootloader不选“支持spi flash”,download放于flash,正常启动,ota正常,app驱动at45db161读写正常。通用bootloader选“支持
    发表于 03-22 07:45

    STM32G474RCT6超出FLASH之外的地址,依然可以正常读写,这正常吗?

    有大佬碰到过超出FLASH之外的内存,也可以正常读写的情况吗?我用的芯片是STM32G474RCT6,FLASH为 256kB的,但是我对 Page64页、Page65页或者后面几页
    发表于 03-15 08:17

    STM32L476利用双bank的方式进行升级,在flash中设置的一些flag读不到是什么问题?

    STM32L476利用双bank的方式进行升级,这个是通过Syscfg_Memrmp中的FB_Mode来做的,我试了下,可以快速切换到另外个bank,但是在flash中设置的一些fl
    发表于 03-12 07:43

    stm32 flash写数据怎么存储的

    stm32 flash写数据怎么存储的  STM32是一款广泛应用于嵌入式系统开发的微控制器,它的Flash存储器是其中一个重要的组成部分。
    的头像 发表于 01-31 15:46 655次阅读

    往Aducm320 Flash中写入了一些数据,如何才能读出来?

    往Aducm320Flash中写入了一些数据,如何才能读出来? ADUCM320关于擦除,写入,读写保护等操作在数据手册及例程均有明确说明与相关例程,但是在读取方面我未发现有明确的
    发表于 01-12 07:41

    STM32Flash写了保护怎么办?STM32如何设置读保护和解除读保护?

    的是读保护。 如果STM32Flash写了保护,那么我们就不能对其进行任何操作,包括读写。在解决这个问题之前,
    的头像 发表于 10-29 17:24 6431次阅读

    怎么延长flash读写的寿命?

    读写次数不变的情况下,如何尽可能的延长flash读写寿命
    发表于 10-13 07:22

    请问外挂FLASHFLASH只能二选吗?

    1、使用STM32F4XX,FLASH大小为1M,然后外挂一片W25Q128的FLASH,该
    发表于 09-08 17:44

    使用VHDL实现Flash读写控制器设计

    首先抛出重点:使用Xilinx的平台,最大的难点在于,要自己设计一个Flash读写控制器。
    的头像 发表于 08-03 09:34 580次阅读
    使用VHDL实现<b class='flag-5'>Flash</b><b class='flag-5'>读写</b>控制器设计

    STM32CUBEMX开发GD32F303(17)----内部Flash读写

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部
    的头像 发表于 07-27 09:35 1152次阅读
    <b class='flag-5'>STM32</b>CUBEMX开发GD32F303(17)----内部<b class='flag-5'>Flash</b><b class='flag-5'>读写</b>

    STM32CUBEIDE(16)----内部Flash读写

    本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是STM
    的头像 发表于 07-27 09:24 953次阅读
    <b class='flag-5'>STM32</b>CUBEIDE(16)----内部<b class='flag-5'>Flash</b><b class='flag-5'>读写</b>

    STM32无法连接JLink(Flash读写保护)解决方法

    对于其他的stm32芯片或者其他ARM芯片,其实解决方法都相通,主要就是先修改启动方式,再去更改flash或者ram中的程序。
    的头像 发表于 05-05 12:24 2658次阅读
    <b class='flag-5'>STM32</b>无法连接JLink(<b class='flag-5'>Flash</b><b class='flag-5'>读写</b>保护)解决方法

    STM32中C语言的基础知识

    C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识,希望能对大家有所帮助。
    的头像 发表于 04-27 17:42 975次阅读
    <b class='flag-5'>STM32</b>中C语言的基础<b class='flag-5'>知识</b>