STM32 f405 对内部FLASH 写入数据后读取该地址数据
时间: 2024-01-24 12:02:22 浏览: 74
可以通过以下步骤进行内部FLASH的写入和读取操作:
1. 首先,需要将内部FLASH解锁。可以通过以下代码实现:
```c
HAL_FLASH_Unlock();
```
2. 接着,需要选择FLASH的操作区域。可以通过以下代码实现:
```c
__HAL_FLASH_PREFETCH_BUFFER_ENABLE(); //开启预取缓冲区
HAL_FLASH_OB_Unlock(); //开启Flash操作相关配置
FLASH_EraseInitTypeDef EraseInitStruct; //擦除Flash操作结构体
uint32_t SectorError = 0;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3; //Flash电压范围
EraseInitStruct.Sector = FLASH_SECTOR_5; //选择擦除的扇区
EraseInitStruct.NbSectors = 1; //擦除一个扇区
if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK) { //执行Flash擦除操作
//擦除失败处理
}
HAL_FLASH_OB_Lock(); //关闭Flash操作相关配置
```
3. 然后,可以进行FLASH的写入操作。可以通过以下代码实现:
```c
uint32_t flash_address = 0x08020000; //Flash的写入地址
uint32_t data = 0x12345678; //要写入的数据
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, flash_address, data) != HAL_OK) { //执行Flash写入操作
//写入失败处理
}
```
4. 最后,可以进行FLASH的读取操作。可以通过以下代码实现:
```c
uint32_t flash_address = 0x08020000; //Flash的读取地址
uint32_t data = *(uint32_t*)flash_address; //读取Flash中的数据
```
需要注意的是,Flash的写入操作是有一定的限制的,例如每个扇区只能擦除一次,每个擦除操作需要消耗一定的时间等。因此,在进行Flash操作时需要仔细考虑,尽量避免不必要的操作,以保证Flash的可靠性和稳定性。
阅读全文