STM32 Flash学习(二)

这篇具有很好参考价值的文章主要介绍了STM32 Flash学习(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32F1的官方固件库操作FLASH的几个常用函数。这些函数和定义分布在源文件stm32f1xx_hal_flash.c/stm32f1xx_hal_flash_ex.c以及头文件stm32f1xx_hal_flash.h/stm32f1xx_hal_flash_ex.h中。

锁定解函数

对FLASH进行写操作前必须先解锁,解锁操作:在FLASH_KEYR写入特定的序列(KEY1和KEY2),HAL库实现很简单:

HAL_StatusTypeDef HAL_FLASH_Unlock(void);

写操作完成后,要锁定FLASH:

HAL_StatusTypeDef HAL_FLASH_lock(void);

写操作函数

HAL 库提供了一个通用的 FLASH 写操作函数HAL_FLASH_Program,该函数声明如下:

HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram,uint32_t Address,uint64_t Data);

该函数有三个入口参数。

  • TypeProgram:区分要写入的数据类型,取值为FLASH_TYPEPROGRAM_BYTE(字节:8 位)FLASH_TYPEPROGRAM_HALFWORD(半字 : 16 位 ) ,FLASH_TYPEPROGRAM_WORD ( 字 : 32 位)和FLASH_TYPEPROGRAM_DOUBLEWORD(双字:64 位)。
  • Address设置要写入数据的FLASH地址。
  • Data,要写入的数据类型,参数默认是64位的,如果小于64位,会进行类型转换。

擦除函数

HAL 库提供的擦除函数在 stm32f1xx_hal_flash_ex.c 中定义。和编程函数一样,HAL 提供了一个通用的基于小区擦除的函数 HAL_FLASHEx_Erase,该函数声明如下:

HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError);

typedef struct
{
 uint32_t TypeErase; //擦除类型
 uint32_t Banks; //擦除的 Bank 编号
 uint32_t PageAddress; //擦除页面地址
 uint32_t NbPages; //擦除的页面数
} FLASH_EraseInitTypeDef;
  • TypeErase设置擦除类型,是Page擦除还是BANK级别的批量擦除,取值为FLASH_TYPEERASE_PAGES 或者 FLASH_TYPEERASE_MASSERASE,如果是一次擦除一个 Bank 下面的所有 Page,那么需要选择 FLASH_TYPEERASE_MASSERASE。
  • Banks设置要擦除的Bank编号,只有设置为批量擦除的时候才有效。
  • PageAddress要擦除页面的地址。
  • NbPages要擦除的页面数。

等待操作完成函数

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

HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);

该函数在HAL库中很多地方用到,比如擦除函数HAL_FLASHEx_Erase中对FLASH进行擦除操作后会调用该函数,等待擦除操作完成。

读FLASH特定地址数据函数

函数固件库没有给出来,提供从指定地址读取半个字节:文章来源地址https://www.toymoban.com/news/detail-826121.html

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

到了这里,关于STM32 Flash学习(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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日
    浏览(65)
  • 【STM32】STM32学习笔记-FLASH闪存(48)

    STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程 读写FLASH的用途: 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在程序中编程(IAP),实现程序的自我更新 在线编

    2024年03月16日
    浏览(52)
  • STM32 Flash学习(三)

    开机的时候先显示一些提示信息,然后在主循环里面检测两个按键。 其中1个按键WK_UP用来执行写入FLASH的操作,另一个按照KEY0用来执行读出操作。 添加了两个文件stmflash.c和stmflash.h。 STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) 参数: WriteAddr:起始地址(必须为2的倍数)

    2024年02月15日
    浏览(40)
  • STM32 Flash学习(二)

    STM32F1的官方固件库操作FLASH的几个常用函数。这些函数和定义分布在源文件stm32f1xx_hal_flash.c/stm32f1xx_hal_flash_ex.c以及头文件stm32f1xx_hal_flash.h/stm32f1xx_hal_flash_ex.h中。 对FLASH进行写操作前必须先解锁,解锁操作:在FLASH_KEYR写入特定的序列(KEY1和KEY2),HAL库实现很简单: 写操作完

    2024年02月19日
    浏览(36)
  • STM32 Flash学习(一)

    不同型号的STM32,其Flash容量也不同。 MiniSTM32开发板选择的STM32F103RCT6的FLASH容量为256K字节,属于大容量产品。 STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等3部分组成。 主存储器,该部分用来存放代码和数据常量(如const类型的数据)。 对于大容量产品,

    2024年02月15日
    浏览(40)
  • STM32CubeMX学习笔记16--- STM32内部FLASH

    1. 内部FLASH简介         之前的文章中介绍过STM32F1利用SPI与外部FLASH(W25QXX芯片)通讯的例程,本例程将介绍STM32F1的内部FLASH,通过内部FLASH实现数据读写操作。 不同型号的STM32,其FLASH容量也有所不同,最小的只有16K字节,最大的则达到了1024K字节。此处我们使用的是ST

    2024年04月09日
    浏览(45)
  • STM32 HAL库形式制作SPI Flash(W25Q16)的 Keil下载算法

    常见的SPI Flash:W25Qxx系列,本文以W25Q16为实例制作Keil下载算法。 如下图,红框内的东西就是下载算法。 只要导入下载算法后,就可以在烧录MCU的同时对W25Q16页进行烧录。此操作可方便LCD运用场景,字库、图片存放在外部Flash的烧录。 实际操作: 1、硬件:STM32G030C8T6、W25Q16(

    2024年02月21日
    浏览(46)
  • STM32 NOR_FLASH 学习

    FLASH是常用的,用于存储数据的半导体器件,它具有容量大,可重复擦写、按“扇区/块”擦除、掉电后数据可继续保存的特性。 NOR FLASH的单位是MB,EEPROM的单位是KB。 NM25Q128,是NOR FLASH的一种,是诺存公司生产的一种SPI FLASH,具有SPI接口。相似的还有W25Q128、BY25Q128,这三者都

    2024年02月07日
    浏览(30)
  • STM32CubeMX学习笔记(47)——USB接口使用(MSC基于内部Flash模拟U盘)

    USB(Universal Serial BUS)通用串行总线 ,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、Microsoft 等多家公司联合提出的。 USB 发展到现在已经有 US

    2024年02月15日
    浏览(50)
  • STM32CubeMX学习笔记(48)——USB接口使用(MSC基于外部Flash模拟U盘)

    USB(Universal Serial BUS)通用串行总线 ,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、Microsoft 等多家公司联合提出的。 USB 发展到现在已经有 US

    2024年01月16日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包