当前位置: 首页 > news >正文

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特定地址数据函数

函数固件库没有给出来,提供从指定地址读取半个字节:

u16 STMFLASH_ReadHalfWord(u32 faddr)
{return *(vu16 *)faddr;
}
http://www.lryc.cn/news/102228.html

相关文章:

  • kotlin获取泛型集合的类型信息
  • AQS源码解析
  • 关于在VS2017中编译Qt项目遇到的问题
  • Python web实战 | 使用 Flask 实现 Web Socket 聊天室
  • Android10 Recovery系列(一)隐藏recovery菜单项
  • 选好NAS网络储存解决方案,是安全储存的关键
  • AnimateDiff论文解读-基于Stable Diffusion文生图模型生成动画
  • centos7安装tomcat
  • 【C#教程】零基础从入门到精通
  • opencv rtsp 硬件解码
  • 机器学习-Gradient Descent
  • MySql003——SQL(结构化查询语言)基础知识
  • springCloud Eureka注册中心配置详解
  • gti 远程操作
  • Ftrace
  • Tomcat修改端口号
  • vue2企业级项目(一)
  • 【前端知识】React 基础巩固(三十八)——log、thunk、applyMiddleware中间件的核心代码
  • hive删除数据进行恢复
  • 二、前端高德地图、渲染标记(Marker)引入自定义icon,手动设置zoom
  • UDF和UDAF、UDTF的区别
  • 小研究 - 浅析 JVM 中 GC 回收算法与垃圾收集器
  • Flowable-服务-骆驼任务
  • 用html+javascript打造公文一键排版系统9:主送机关排版
  • SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出
  • RT1052 的四定时器
  • ViT-vision transformer
  • Election of the King 2023牛客暑期多校训练营4-F
  • Nacos的搭建及服务调用
  • uniapp小程序自定义loding,通过状态管理配置全局使用