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

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

3天内不再提示

结合F4系列描述关于FLASH的相关内容

strongerHuang 来源:AI电堂 作者:AI电堂 2021-03-12 17:13 次阅读

FLASH,指Flash Memory,是一种非易失性存储器(闪存),掉电能正常保存数据。

STM32的存储器通常包含内部SRAM、内部FLASH,部分系列还包含EEPROM。其中FLASH通常用于存储代码或数据,可被读写访问。

1

STM32 FLASH 基础内容

STM32的FLASH组织结构,可能因不同系列、型号略有不同。比如大家熟悉的STM32F1中小容量一页大小只有1K,而F1大容量一页有2K。

还比如有些系列以扇区为最小单元,有的扇区最小16K,有的128K不等。

本文主要结合F4系列来描述关于FLASH的相关内容。

1.Flash 结构

通常Flash包含几大块,这里以F40x为例:

主存储器:用来存放用户代码或数据。

系统存储器:用来存放出厂程序,一般是启动程序代码

OTP 区域:一小段一次性可编程区域,供用户存放特定的数据。

选项字节:存放与芯片资源或属性相关的配置信息

ac77421a-82f6-11eb-8b86-12bb97331649.jpg

2.Flash 常规操作

Flash 读、写(编程)、擦除:

128 位宽数据读取

字节、半字、字和双字数据写入

扇区擦除与全部擦除

(提示:不同系列可能存在差异,比如还有字节读取,页擦除等)

Flash 读、写保护:通过配置选项字节实现。

3.Flash 容量

STM32的Flash容量出厂已经决定,可根据型号得知容量大小。

4.存储器端格式

目前STM32存储器组织结构默认为小端格式:数据的低字节保存在内存的低地址。

更多内容请查阅芯片对应的参考手册。

2

FLASH 选项字节

STM32内部Flash具有读写保护功能,想要对Flash进行读写操作,首先要去除读写保护,读写保护通过配置选项字节完成。

配置选项字节,常见两种方式:1.软件编码;2.编程工具;

1.软件编码

比如STM32F4系列标准外设库库提供函数:

void FLASH_OB_Unlock(void);void FLASH_OB_Lock(void);void FLASH_OB_WRPConfig(uint32_t OB_WRP, FunctionalState NewState);void FLASH_OB_WRP1Config(uint32_t OB_WRP, FunctionalState NewState);void FLASH_OB_PCROPSelectionConfig(uint8_t OB_PcROP);void FLASH_OB_PCROPConfig(uint32_t OB_PCROP, FunctionalState NewState);void FLASH_OB_PCROP1Config(uint32_t OB_PCROP, FunctionalState NewState);void FLASH_OB_RDPConfig(uint8_t OB_RDP);void FLASH_OB_UserConfig(uint8_t OB_IWDG, uint8_t OB_STOP, uint8_t OB_STDBY);void FLASH_OB_BORConfig(uint8_t OB_BOR);void FLASH_OB_BootConfig(uint8_t OB_BOOT);FLASH_Status FLASH_OB_Launch(void);uint8_t FLASH_OB_GetUser(void);uint16_t FLASH_OB_GetWRP(void);uint16_t FLASH_OB_GetWRP1(void);uint16_t FLASH_OB_GetPCROP(void);uint16_t FLASH_OB_GetPCROP1(void);FlagStatus FLASH_OB_GetRDP(void);uint8_t FLASH_OB_GetBOR(void);

软件编码通过调用这些函数接口就可以配置选项字节。

2.编程工具

比如STM32CubeProg编程工具:

配置STM32选项字节,还可通过ST-LINK Utility、STVP等类似工具进行配置。

提示:不同型号的STM32选项字节可能略有差异。

3

FLASH 读写擦除操作

STM32内部Flash和其他外部Flash类似,支持读、写、擦除等常规操作。对内部Flash操作之前通常需要解锁、去保护等操作。

比如:

FLASH_OB_Lock();FLASH_OB_WRPConfig(OB_WRP_Sector_All, ENABLE);FLASH_OB_PCROPConfig(OB_PCROP_Sector_All, ENABLE);

1.读数据

读取内部Flash数据通常有两种方式:

通过程序(编码)读取

通过外部(编程)工具读取

程序(编码)读取:

uint32_t uwData32 = 0;uint32_t uwAddress = 0x08001000;uwData32 = *(__IO uint32_t*)uwAddress;

外部编程工具读取:读取前提:没有读保护,设置好读取地址,长度、数据宽度等。

2.写数据

往STM32内部Flash写数据和读数据类似,但写数据地址不能有数据,也就是写之前要擦除数据。

所以,相对读数据,通常写之前需要一些额外操作,比如:

FLASH_Unlock();FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);

通过工具写数据,就是我们量产时说的下载数据,正式一点说法叫编程。

3.擦除数据

擦除数据通常分擦除页、扇区、整块,擦除时间也因型号不同、速度不同有差异。

提示:该部分内容建议参考官方提供的Demo(标准外设库和HAL都有基本例程)

4

FLASH 常见问题

STM32内部Flash主要用途是存储程序代码和数据。操作内部Flash要慎重,一旦操作不当就有可能会破坏整个程序。

问题一:编程(写数据)地址非对齐

写数据时,我们要指定写入的地址,如果写入地址为非对齐,则会出现编程对齐错误。

比如:

遵循32位(4字节)地址对齐,你的地址只能是4的倍数。0x08001000正确,0x08001001错误。

提示:不同型号对齐宽度可能不同,有的32位、有的128位等。

解决办法:通过“取余”判断地址。

问题二:编程地址数据未擦除

写数据之前需要擦除对应地址数据才能正常写入,否则会出现失败。

我们擦除数据通常是页,或扇区,写入某个地址数据,就可能影响其他地址的数据,如果直接覆盖就会出现问题。

解决办法:通常的做法是读出整页(或扇区)数据并缓存,再擦除整页,再写入。

问题三:擦除时读取数据

STM32内部Flash在进行写或擦除操作时,总线处于阻塞状态,此时读取Flash数据就会出现失败。【双BANK模式除外】

解决办法:通过标志判断写/擦除操作是否完成。

问题四:电压不稳定写入失败

处于外界干扰较大的环境,供电就有暂降的可能,而对STM32内部Flash进行操作时,如果低于特定电压就会出现编程失败。

操作Flash的最低电压既与工作频率有关,也与STM32型号有关(具体需要看数据手册)。

解决办法:通过完善硬件电路保证电压稳定。电源电压不够或不稳导致隐患往往不易觉察!!

复盘一下▼FLASH 基础内容:结构、常规操作、容量、大小端格式;▼FLASH 选项字节:通过软件编码和编程工具配置;▼FLASH 读写擦除操作:常规程序读写操作、工具的读写操作;▼FLASH 常见问题:编程地址非对齐、数据未擦除、擦除同时读取数据、电压不稳定写入失败。

原文标题:STM32学习笔记 | 片内FLASH读写失败问题分析

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    10

    文章

    1623

    浏览量

    147781
  • STM32
    +关注

    关注

    2266

    文章

    10876

    浏览量

    354922

原文标题:STM32学习笔记 | 片内FLASH读写失败问题分析

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TAS6424(L)-Q1 Fault脚如何控制拉低?

    请问是否有TAS6424(L)-Q1的相关应用文档,介绍以下相关内容: Fault脚如何控制拉低?当过压多少伏之后产生Fault信号,恢复后没有声音输出,如何控制其恢复正常? 相关的保护诊断的判断/控制/操作逻辑等文档; 谢谢
    发表于 10-11 06:13

    求助,关于LM331 F/V转换电路输入电容选择的问题求解

    数据手册中F/V转换电路的输入电容都是470pF,请问下这个电容的选择依据或者改变这个值的影响都有什么,在手册中没有找到相关内容,请大神帮忙解答一下
    发表于 07-31 06:14

    自制一款兼容STM32F1/F4芯片的飞控板

    自己制作的一款兼容STM32F1/F4芯片的飞控板。
    发表于 07-04 14:07 0次下载

    请问F4中配备以太网/SDRAM/硬件加密选哪款最划算?

    F4中配备以太网/SDRAM/硬件加密选哪款最划算?
    发表于 05-13 08:22

    keil5去下了官方stm32f0、f1、f4的DFP_pack,f1包里面自带stdperiph_driver,f4包里面自带HAL_driver,f0包里面为什么不带库文件?

    rt:keil5去下了官方stm32f0、f1、f4的DFP_pack,f1包里面自带stdperiph_driver,f4包里面自带HAL
    发表于 05-10 06:56

    请问STM32F75X ETH模块在半双工RMII模式下如何判断报文冲突?

    如标题,翻遍了手册没有查到相关内容也没有相关的时序图 只有MII模式下的冲突时序,MII模式下有COL信号告知MAC冲突,但是RMII模式下没有COL信号! MAC通过什么机制断定报文冲突?求 这方面的机制介绍!!! MAC在什么情况下会冲突重发?
    发表于 04-16 07:52

    关于STM32G473程序运行于Flash和Ram速度的疑问求解

    关于STM32G473程序运行于Flash和Ram速度问题,向大家请教一下。之前用的是F4系列的程序(没有指定ram区),移植到G473里运行后发现速度变慢了接近20us;然后尝试指定
    发表于 04-12 07:18

    STM32F4系列USB OTG FS如何使用自定义的USB端点?

    我们公司有一款设备,使用了0X06和0X88这两个端点和上位机通信,现在我计划使用STM32F4系列单片机替代。但是看F4的参考手册,它的端点只有0,1,2,3这四个,请问我可以通过配置寄存器的方式让
    发表于 04-02 07:12

    STM32F4使用了rt Thread创建了F4的工程,测试过程中出现死机情况怎么解决?

    前段时间工作中,使用了rt Thread创建了F4的工程,待所有板级驱动和业务写完后开始测试产品。其中F4芯片一路串口接GPS模块,进行7*24h长期测试,测试过程中出现死机情况。再次测试仍会复现。
    发表于 04-02 06:26

    STM32H7和STM32F4做永磁同步电机FOC控制如何选型?哪个开发更好?

    ,以及部分PLC的下沉功能。但是我不太了解现场总线和PLC,不知道需要预估FLASH,RAM和引脚数目多少的较为合适。请问按照这个需求,有没有工程师在H7或F4系列种有推荐的呢? 以及不知道H7是否支持STM32的电机库例程呢?
    发表于 03-22 07:18

    STM32F407+CUBEMX+DP83848K,LED_speed黄灯上电常亮,LED_Link绿灯一直不亮为什么?

    如题,用CUBEMX配置好RCC,ETH,LWIP相关内容后,直接生成代码编译下载,LED_Link绿灯一直不亮,MAC端网口也显示未连接
    发表于 03-19 07:02

    PCAN系列关内部存储空间解析:EEPROM与Flash的集成应用

    网关设备是确保数据流畅通信的关键。虹科PCAN系列网关凭借卓越性能和创新技术,为众多应用提供了高效稳定的解决方案。本文将深入探讨虹科PCAN系列关内部存储空间,特别是EEPROM和SPI
    的头像 发表于 03-18 13:45 480次阅读
    PCAN<b class='flag-5'>系列</b>网<b class='flag-5'>关内</b>部存储空间解析:EEPROM与<b class='flag-5'>Flash</b>的集成应用

    cubemx生成的F4 usb audio的代码,能枚举成功,但没有同步端点是为什么?

    有谁遇到过 cubemx 生成的F4 usb audio的代码,能枚举成功,但没有同步端点(OTG_FS)的情况吗? 有大佬指点一下吗?
    发表于 03-18 07:32

    苹果获取头显专利:可精准控制地理位置相关内容展示

     这项名为《限制指定私人内容的方法及设备》的专利旨在让用户只在特定环境下才可通过 Vision Pro 头显获取相应数据。以 IT之家提供的专利实例来看,用户可以设定 Vision Pro 的权限,令家中或者办公室特定区域的用户方能看见所需的数据。
    的头像 发表于 01-31 10:23 508次阅读
    苹果获取头显专利:可精准控制地理位置<b class='flag-5'>相关内容</b>展示

    GD32F系列MCU片上Flash中Code区和Data区使用解密

    GD32F系列MCU产品片上Flash分Code区和Data区,以GD32F303系列为例,从GD32F
    的头像 发表于 01-09 10:07 2642次阅读
    GD32<b class='flag-5'>F</b><b class='flag-5'>系列</b>MCU片上<b class='flag-5'>Flash</b>中Code区和Data区使用解密