stm32.cube(六)——HAL.FLASH

本文介绍了STM32的片内Flash特性,包括结构、读写保护、控制寄存器锁、中断和半周期预取缓冲区。在HAL库中,Flash的读写操作、锁控制和中断处理被简化,提供了易于使用的API。对于写操作,中断模式和非中断模式各有优缺点,中断模式允许连续写入而无需等待。HAL.FLASH接口设计旨在提高代码的可维护性。

一、片内Flash特性

1.1 FLash结构简图

这里写图片描述
我的开发板是stm32f103xx,所以片内flash主存储器大小128K,单页为1K。不同的芯片flash大小不同,页大小也不同。

主存储器

用来存储Rom程序,烧写的区域。当然也可以存一些其他东西,比如做nvram使用。

信息块

这个区域分两个部分。

存储区,用户不可写区域,用来存储ISP下载时用到的程序。当用ISP模式进行烧写时,自动调用里面的程序下载数据并烧写到flash里。

用户选项字,存储硬件配置信息。某些复用的外设可能在上电复位后就要立即知道它被用作其中哪个用途。

用户选项字默认不可写,它上电自动加锁。只有通过向FLASH_OPTKEYR依次写入约定解锁码KEY1和KEY2后才能解锁

寄存器

FPEC控制器

FPEC键寄存器(FLASH_KEYR) 写入键值解锁。
选项字节键寄存器(FLASH_OPTKEYR) 写入键值解锁选项字节操作。
闪存控制寄存器(FLASH_CR) 选择并启动闪存操作。
闪存状态寄存器(FLASH_SR) 查询闪存操作状态。
闪存地址寄存器(FLASH_AR) 存储闪存操作地址。
选项字节寄存器(FLASH_OBR) 选项字节中主要数据的映象。
写保护寄存器(FLASH_WRPR) 选项字节中写保护字节的映象。

1.2 读写保护

读保护

读保护默认开启,开启后:

  • 如果CPU从SR

### STM32 Cube Flash 操作中的中断处理方法 #### 中断机制概述 在STM32微控制器中,Flash操作可以通过轮询方式完成,也可以通过启用相应的中断来异步执行。当采用中断方式进行Flash编程或擦除时,可以提高系统的效率并允许CPU去处理其他任务。 对于基于STM32Cube库的应用程序来说,在`stm32f4xx_hal_flash.h`头文件里定义了一系列用于管理闪存的操作函数以及对应的中断和服务回调接口[^2]。这些功能使得开发者能够方便地设置和响应由Flash访问触发的各种事件通知。 #### 启用与配置中断服务例程 (ISR) 为了实现对Flash操作过程中的状态变化做出及时反应,通常会在初始化阶段开启特定类型的中断源,并编写相应IRQ Handler来进行后续逻辑控制: ```c // 开启全局中断使能位 __HAL_FLASH_ENABLE_IT(&hflash, FLASH_IT_EOP | FLASH_IT_WRPERR); ``` 上述代码片段展示了如何激活结束(EOP) 和写保护错误(WRPERR)两种不同性质的通知信号;实际应用可根据需求调整所关心的具体条件组合。 接着要做的就是创建一个自定义版本的 `FLASH_IRQHandler()` 函数作为该外设产生的异常请求处理器: ```c void HAL_FLASH_IRQHandler(void){ /* Check whether the EOP flag is set */ if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)){ // 清楚EOP标志位 __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); // 执行完成后调用用户指定的动作 HAL_FLASH_EndOfOperationCallback(); } // 处理可能发生的其它类型错误... } ``` 这段伪码说明了在一个典型的ISR内部应该怎样检查是否有新的活动发生过(比如某个命令已经成功完结),并且据此采取适当措施继续流程或是报告问题给更高层模块知道。 #### 用户级回调函数设计 除了基本框架之外,还需要考虑应用程序层面的需求——即每当某项重要事情结束后想要立即得知消息怎么办?这时就可以利用到预留给用户的钩子点(Hook Point),像这样定义自己的行为模式: ```c static void HAL_FLASH_EndOfOperationCallback(){ // 当前正在进行的任务已完成 printf("Flash operation has been finished.\n"); // 可选:唤醒等待此事件的工作线程/任务等资源 } /* 错误处理示例 */ static void HAL_FLASH_ErrorCallback(){ Error_Handler(); } ``` 这里简单实现了两个最常用的场景之一:“一切正常”的情况下告知外界工作流进展状况;另一个则是针对可能出现意外情况而准备好的应急方案。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值