stm32hal库flash存储16位数据解锁->读出->擦除->写入->上锁例程
时间: 2023-08-06 19:09:04 浏览: 144
好的,以下是一个基于STM32HAL库的Flash存储器操作例程,包括解锁、读取、擦除、写入和上锁:
```c
#include "stm32f4xx_hal.h"
#include <stdint.h>
/* 定义要写入Flash存储器的16位数据 */
uint16_t data_to_write = 0xABCD;
int main(void)
{
/* 使能Flash存储器时钟 */
__HAL_RCC_FLASH_CLK_ENABLE();
/* 配置Flash存储器读取保护级别 */
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
FLASH_Erase_Sector(FLASH_SECTOR_5, VOLTAGE_RANGE_3);
HAL_FLASH_Lock();
/* 读取Flash存储器中的16位数据 */
uint16_t read_data = *(uint16_t*)0x08020000;
/* 擦除Flash存储器 */
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);
FLASH_Erase_Sector(FLASH_SECTOR_5, VOLTAGE_RANGE_3);
/* 写入16位数据到Flash存储器中 */
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, 0x08020000, data_to_write);
/* 上锁Flash存储器,保护写入的数据 */
HAL_FLASH_Lock();
while (1)
{
/* 你的代码 */
}
}
```
需要注意的是,本例程将要写入的16位数据定义为全局变量`data_to_write`,并将其地址作为参数传递给`HAL_FLASH_Program()`函数。同时,本例程使用`FLASH_Erase_Sector()`函数来擦除Flash存储器,该函数的第一个参数是要擦除的扇区,第二个参数是Flash存储器的电压范围。另外,为了保护写入的数据,本例程在进行Flash存储器操作前使用`HAL_FLASH_Unlock()`函数解锁Flash存储器,在操作完成后使用`HAL_FLASH_Lock()`函数上锁Flash存储器。
希望这个例程能够对你有所帮助!
阅读全文