STM32G4 读2K Flash 写2K Flash
时间: 2023-09-25 10:11:28 浏览: 49
STM32G4系列的Flash存储器可以通过代码来进行读写操作。读取Flash存储器的步骤如下:
1. 选择Flash存储器的地址和数据宽度。
2. 设置Flash存储器的读取模式。
3. 通过指针读取Flash存储器中的数据。
以下是一个读取2K Flash的示例代码:
```c
#include "stm32g4xx_hal.h"
#define FLASH_START_ADDRESS 0x08000000
#define FLASH_DATA_WIDTH FLASH_TYPEPROGRAM_BYTE
uint8_t flash_data[2048];
void read_flash(void)
{
uint32_t flash_address = FLASH_START_ADDRESS;
uint32_t flash_data_size = sizeof(flash_data);
// 选择Flash存储器的地址和数据宽度
FLASH_EraseInitTypeDef erase_init;
erase_init.TypeErase = FLASH_TYPEERASE_PAGES;
erase_init.PageAddress = FLASH_START_ADDRESS;
erase_init.NbPages = 1;
// 设置Flash存储器的读取模式
HAL_FLASH_Unlock();
HAL_FLASHEx_Erase(&erase_init, NULL);
// 通过指针读取Flash存储器中的数据
for (uint32_t i = 0; i < flash_data_size; i++)
{
flash_data[i] = *(uint8_t *)(flash_address + i);
}
HAL_FLASH_Lock();
}
```
写入Flash存储器的步骤如下:
1. 解锁Flash存储器。
2. 选择Flash存储器的地址和数据宽度。
3. 设置Flash存储器的写入模式。
4. 写入数据到Flash存储器中。
5. 锁定Flash存储器。
以下是一个写入2K Flash的示例代码:
```c
#include "stm32g4xx_hal.h"
#define FLASH_START_ADDRESS 0x08000000
#define FLASH_DATA_WIDTH FLASH_TYPEPROGRAM_BYTE
uint8_t flash_data[2048];
void write_flash(void)
{
uint32_t flash_address = FLASH_START_ADDRESS;
uint32_t flash_data_size = sizeof(flash_data);
// 解锁Flash存储器
HAL_FLASH_Unlock();
// 选择Flash存储器的地址和数据宽度
FLASH_EraseInitTypeDef erase_init;
erase_init.TypeErase = FLASH_TYPEERASE_PAGES;
erase_init.PageAddress = FLASH_START_ADDRESS;
erase_init.NbPages = 1;
// 设置Flash存储器的写入模式
uint32_t flash_error = 0;
HAL_FLASHEx_Erase(&erase_init, &flash_error);
// 写入数据到Flash存储器中
for (uint32_t i = 0; i < flash_data_size; i++)
{
HAL_FLASH_Program(FLASH_DATA_WIDTH, flash_address + i, flash_data[i]);
}
// 锁定Flash存储器
HAL_FLASH_Lock();
}
```
需要注意的是,写入Flash存储器时需要先将Flash存储器擦除,再进行写入操作。同时,Flash存储器只能被擦除和写入一次,因此在进行写入操作时需要谨慎处理。