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
    +关注

    关注

    146

    文章

    16990

    浏览量

    350307
  • FlaSh
    +关注

    关注

    10

    文章

    1621

    浏览量

    147749
  • STM32
    +关注

    关注

    2266

    文章

    10871

    浏览量

    354796
收藏 人收藏

    评论

    相关推荐

    一些常见的动态电路

    无论是模电还是数电,理论知识相对来说还是比较枯燥,各种电路原理理解清楚不算容易,换种生动形象的方式或许会增加一些趣味性,也更容易理解这些知识。下面整理了
    的头像 发表于 11-16 09:26 192次阅读
    <b class='flag-5'>一些</b>常见的动态电路

    EEPROM轻量级的简易类文件的数据读写库:EEPROMFS

    虽然 EEPROM 相对 Flash 读写速度更慢,但 EEPROM 一些独有特性是 Flash 无法实现的,比如字节读写操作。 所以,EE
    的头像 发表于 11-15 16:31 285次阅读
    EEPROM轻量级的简易类文件的数据<b class='flag-5'>读写</b>库:EEPROMFS

    闪存随机读写与连续读写哪个重要

    闪存随机读写与连续读写各有其重要性,具体取决于应用场景和需求。 随机读写重要性 延迟小,响应快 : 闪存(尤其是SSD)的随机
    的头像 发表于 10-12 11:44 302次阅读

    STM32CUBEMX(10)--Flash读写

    概述 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是
    发表于 09-10 15:36

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

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

    细谈SolidWorks教育版的一些基础知识

    SolidWorks教育版是款广泛应用于工程设计和教育领域的三维建模软件。它具备直观易用的操作界面和强大的设计功能,为学生提供了个学习和实践的平台。在本文中,我们将详细探讨SolidWorks教育版的一些基础
    的头像 发表于 04-01 14:35 314次阅读

    可编程系统的优缺点

    可编程系统(PSoC)作为种灵活、高效的解决方案,具有显著的优点和一些潜在的缺点。
    的头像 发表于 03-28 15:13 512次阅读

    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无法进入Bootloader的处理方法

    STM32无法进入Bootloader的处理方法  当STM32芯片无法进入Bootlo
    的头像 发表于 02-02 14:33 1931次阅读

    stm32 flash写数据怎么存储的

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

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

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

    stm32变量能存进flash中吗

    当涉及到将变量存储在Flash中时,我们通常指的是将变量存储在STM32微控制器的闪存器件中。在STM32芯片中,闪存用于存储程序代码和只读数据,但对于一些应用情况,我们可以使用闪存来
    的头像 发表于 12-28 15:33 2044次阅读