HAL_FLASHEx_Erase函数解析
时间: 2023-07-31 11:07:27 浏览: 324
STM32 HAL 库延时函数 HAL_Delay 解析
5星 · 资源好评率100%
HAL_FLASHEx_Erase函数是HAL库中用于擦除Flash扇区的函数,其定义如下:
```c
HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError);
```
该函数需要传入一个FLASH_EraseInitTypeDef类型的参数pEraseInit,该结构体定义了要擦除的Flash扇区的起始地址和大小等信息。函数最后会返回一个HAL_StatusTypeDef类型的值,表示擦除操作的结果,同时还可以通过传入一个指向uint32_t类型变量的指针SectorError,获取擦除失败时的错误代码。
HAL_FLASHEx_Erase函数的实现过程如下:
1. 检查要擦除的Flash扇区是否是合法的。如果扇区大小为0或者扇区起始地址不是Flash的起始地址,函数会返回错误代码HAL_ERROR。
2. 禁止中断,并且解锁Flash。
3. 设置Flash擦除相关的寄存器。具体的操作包括:
- 将Flash擦除使能(FLASH_CR_EOPIE)位清零。
- 将Flash解锁(FLASH_KEYR)寄存器的值设置为FLASH_KEY1和FLASH_KEY2。
- 将Flash擦除(FLASH_CR_PER)位设置为1。
- 将要擦除的Flash扇区地址(FLASH_CR_PNB)写入FLASH_CR寄存器。
4. 开始执行擦除操作。具体的操作包括:
- 将Flash开始擦除(FLASH_CR_STRT)位设置为1。
- 等待擦除操作完成,或者等待超时(FLASH_TIMEOUT_VALUE)。
- 检查擦除操作是否成功。如果成功,将返回HAL_OK;否则,将返回HAL_ERROR,并通过SectorError参数返回错误代码。
5. 恢复中断,并且重新锁定Flash。
需要注意的是,该函数执行期间会禁止中断,并且解锁Flash,并且在函数执行完毕之后会恢复中断,并且重新锁定Flash。因此,在调用该函数之前,需要确保中断不会影响到Flash的操作,并且需要适当地设置Flash的保护等级以避免意外修改Flash。
阅读全文