【STM32详解FLASH闪存编程原理与步骤】

这篇具有很好参考价值的文章主要介绍了【STM32详解FLASH闪存编程原理与步骤】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

FLASH编程注意事项

1.STM32复位后,FPEC模块是被保护的,不能写入FLASH_CR寄存器:通过写入特定的序列到FLASH_KEYR寄存器可以打开FPEC模块(即写入KEY1和KEY2),只有在写保护被解除后,我们才能操作相关寄存器。叫Unlock,简直不正确会产生总线错误。
2.STM32闪存的编程每次必须写入16位(不能单纯的写入8位数据哦!),当FLASH_CR寄存器的PG位为’1’时,在一个闪存地址写入一个半字将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。
3.在编程过程中(FLASH_SR的BSY位为’1’),任何读写闪存的操作都会使CPU暂停,知道此次闪存编程结束。
4.STM32的FLASH在编程的时候,也必须要求其写入地址的FLASH是被擦除了的(也就是其值必须是0xFFFF),否则无法写入,在FLASH_SR寄存器的PGERR位将得到一个警告。
stm32f334 flash编程,STM32,stm32,单片机,嵌入式,c语言,物联网,mcu,arm开发

FLASH编程过程

stm32f334 flash编程,STM32,stm32,单片机,嵌入式,c语言,物联网,mcu,arm开发1.检查FLASH_CR的LOCK是否解锁,如果没有则先解锁
2.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作
3.设置FLASH_CR寄存器的PG位为’1’,在指定的地址写入要编程的半字
4.等待BSY位变为’0’
5.读出写入的地址并验证数据

STM32的FLASH擦除过程

STM32FLASH编程的时候,要先判断缩写地址是否被擦除了,所以,我们有介绍STM32的闪存擦除过程很重要。

STM32的闪存擦除分为两种:页擦除和整片擦除。

stm32f334 flash编程,STM32,stm32,单片机,嵌入式,c语言,物联网,mcu,arm开发1.检查FLASH_CR的LOCK是否解锁, 如果没有则先解锁
2.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作
3.设置FLASH_CR寄存器的PER位为’1’
4.用FLASH_AR寄存器选择要擦除的页
5.设置FLASH_CR寄存器的STRT位为’1’
6.等待BSY位变为’0’
7.读出被擦除的页并做验证

FLASH全片擦除

stm32f334 flash编程,STM32,stm32,单片机,嵌入式,c语言,物联网,mcu,arm开发
1.检查FLASH_SR寄存器的BSY位,已确定没有其他操作在进行
2.设置FLASH_CR寄存器的MER位1;
3.设置FLASH_CR寄存器的STRT为1
4.等待BSY为0
5.读出所有页并验证

FLASH操作总结

锁定解锁函数

在对FLASH进行写操作前必须先解锁,解锁操作也就是必须在
FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2),固件库函数实现;
void FLASH_Unlock(void);
同样的道理,在对FLASH写操作完成之后,我们要锁定FLASH
void FLASH_Lock(void);

写操作函数

固件库提供了三个FLASH写函数:

FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);

擦除函数

固件库提供三个FLASH擦除函数:

FLASH_Status FLASH_ErasePage(uint32_t Page_Address);
FLASH_Status FLASH_EraseAllPages(void);
FLASH_Status FLASH_EraseOptionBytes(void);

第一个是也擦除函数,根据页地址擦除特定的页数据
第二个函数是擦除所有的页数据
第三个函数是擦除用户选择字节数据

获取状态函数

FLASH_Status FLASH_GetStatus(void);

返回值是通过枚举类型定义的:

	typedef enum
	{
	FLASH_BUSY = 1,             //忙
	FLASH_ERROR_PG,             //编程错误
	FLASH_ERROR_WRP,            //写保护错误
	FLASH_COMPLETE,             //操作完成
	FLASH_TIMEOUT               //操作超时
	}FLASH_Status;

等待操作完成函数

在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地惊醒;即在进行写或擦除操作时,不能进行代码或数据的读取操作。所以在每次操作之前,我们都要等待上一次操作完成这次操作才能开始。

FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout);

入口参数为等待时间,返回值是FLAHS的状态,这个很容易理解,这个函数本身我们在固件库中使用得不多,但是在固件库函数体中间可以多次看到。

读FLASH特定地址数据函数

读取FLASH指定地址的半字的函数固件库并没有给出来,这里我们需要自己写一个函数文章来源地址https://www.toymoban.com/news/detail-846443.html

u16  STMFLASH_ReadHalfWord(u32 faddr)
{
	return *(vu16*)faddr;
}

到了这里,关于【STM32详解FLASH闪存编程原理与步骤】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32开发(十)STM32F103 通信 —— SPI通信编程详解

    👈《上一篇》  🏡《主目录》  👉《下一篇》 本实验通过STM32F103 的SPI功能,实现对W25Q64JVSSIQ (Flash芯片)芯片擦除,读数据,写数据等操作。 本实验内容知识点: 1、SPI通信协议介绍 2、

    2024年02月07日
    浏览(47)
  • STM32开发(六)STM32F103 通信 —— RS485 Modbus通信编程详解

    👈《上一篇》  🏡《主目录》  👉《下一篇》 了解 RS485 Modbus协议技术 。本实验是基于STM32F103开发 实现 通过RS-485实现modbus协议。 准备好了吗?开始我的show time。 1、硬件开发准备 主控:STM32F103ZET6 RS485收发器:SP3485P 2、软件开发准备 软件开发使用虚拟机 + VScode + STM32Cub

    2024年02月03日
    浏览(48)
  • STM32F103 内部FLASH读写擦操作

    (1)解锁和锁定 前面我们介绍了在对 FLASH 进行写操作前必须先解锁,解锁操作也就是必 须在 FLASH_KEYR 寄存器写入特定的序列(0X45670123 和 0XCDEF89AB),固件库 提供了一个解锁函数,其实就是封装了对 FLASH_KEYR 寄存器的操作。 解锁库函数是: void FLASH_Unlock(void); 在对 FLASH 写操

    2024年02月15日
    浏览(33)
  • STM32F103C8T6(HAL库函数 - 内部Flash操作)

    STM32F103C8T6 内部Flash 为 64KB,本次将对他多余空间进行读写。 数据手册下载 STM32F103x8/STM32F103xB 数据手册 包含Flash Memory Page分布 STM32F设备命名 设备容量类型 中容量类型 内部空间介绍 Flash Memory 从 0x0800 0000 ~ 0x0801 FFFF 页分布1K每页, STM32F103C8T6 只有64KByte, 那就是64页 使用 controll

    2024年01月21日
    浏览(60)
  • 【正点原子STM32连载】 第四十五章 FLASH模拟EEPROM实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

    STM32本身没有自带EEPROM,但是STM32具有IAP(在应用编程)功能,所以我们可以把它的FLASH当成EEPROM来使用。本章,我们将利用STM32内部的FLASH来实现第三十六章实验类似的效果,不过这次我们是将数据直接存放在STM32内部,而不是存放在NOR FLASH。 本章分为如下几个小节: 45.1 ST

    2024年02月08日
    浏览(59)
  • STM32F103C8用内部Flash做一个优盘(USB+MSC+FATFS)

    STM32F103C8用内部Flash做一个优盘(USB+MSC+FATFS),轻松实现APP升级、数据存储。 直接使用STM32CubeMX生成基本的工程,省得我们去调底层。 时钟配置为外部8MHz晶振,这个需要根据自己开发板的晶振选择。  启用SWD下载和滴答定时器  启用USB  启用FATFS,MAX_SS和MIN_SS设置为1024。  配

    2024年02月14日
    浏览(44)
  • STM32—Flash读写详解

    目录 前言 介绍 STM32 FLASH 闪存的编程和擦除 Flash读写的标准库函数 软件设计 FLASH的读取 直接读取某一地址的内容 读取选定位置的选定大小的内容 FLASH的写入 直接使用标准库写入 写入选定位置的选定大小的内容 如何在Keil 5中查看Flash某地址的内容 本文主要介绍STM32多种的内

    2024年02月09日
    浏览(38)
  • STM32内部flash详解(1)

    今天说一下STM32中的内部flash。 当我们把写好的代码下载MCU中,这个代码时存放在flash中的。当芯片重启复位上电后,会通过内核对flash进行代码的加载运行。大致是这个过程。 flash读操作 flash编程/擦除操作 读写保护 I-Code 上的预取操作 I-Code 上的 64 个缓存(128 位宽) D-Code

    2024年02月04日
    浏览(43)
  • STM32——STM32F401x系列标准库的下载+环境搭建+建工程步骤(更完整)

    1.STM32标准库的官网下载网站https://www.st.com/content/st_com/en.html 2. 3. 4. 5. 6. 7.点击之后下滑 8.选择自己需要的版本下载 大致步骤同之前我写的一篇STM32——建工程差不多,但是当时是现成的标准库文件,芯片是STM32F103系列的,下面我重写一次,芯片为STM32F401X,当然本篇文章几乎适

    2024年02月14日
    浏览(40)
  • STM32F407 GPIO口输出配置配置步骤

    STM32F407ZGT6 是意法半导体(STMicroelectronics)公司推出的一款高性能ARM Cortex-M4核心的32位微控制器(MCU)。它是 STM32F4 系列的一员,具备强大的处理能力和丰富的外设功能,适用于各种应用领域。 说明:STM32F4 的主频最高是 168Mhz,所以我们一般设置 PLLCLK 为 168Mhz(M=8,N=336,P=2),通

    2024年02月12日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包