54 lines
1.4 KiB
C
54 lines
1.4 KiB
C
#include "main.h"
|
|
#include "stm32h7xx_hal.h"
|
|
|
|
|
|
|
|
void Store_Data_To_Flash(float *data, uint32_t size);
|
|
void Read_Data_From_Flash(float *data, uint32_t size);
|
|
|
|
|
|
void Store_Data_To_Flash(float *data, uint32_t size)
|
|
{
|
|
HAL_StatusTypeDef status;
|
|
FLASH_EraseInitTypeDef erase_init;
|
|
uint32_t page_error;
|
|
|
|
// 解锁Flash
|
|
HAL_FLASH_Unlock();
|
|
|
|
// 初始化擦除结构体
|
|
// erase_init.TypeErase = FLASH_TYPEERASE_SECTORS;
|
|
erase_init.Banks = FLASH_BANK_1; // For dual bank STM32H7 devices, select the appropriate bank
|
|
erase_init.Sector = FLASH_SECTOR_2; // Specify the starting sector
|
|
erase_init.NbSectors = (size * sizeof(float) + FLASH_SECTOR_SIZE - 1) / FLASH_SECTOR_SIZE; // 计算需要擦除的Flash扇区数
|
|
|
|
// 擦除Flash扇区
|
|
status = HAL_FLASHEx_Erase(&erase_init, &page_error);
|
|
if(status != HAL_OK)
|
|
{
|
|
// 擦除失败处理
|
|
}
|
|
|
|
// 将数据写入Flash
|
|
for (uint32_t i = 0; i < size; i++)
|
|
{
|
|
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FLASHWORD, FLASH_DATA_ADDRESS + i * sizeof(float), *((uint32_t *)(data + i)));
|
|
if(status != HAL_OK)
|
|
{
|
|
// 写入失败处理
|
|
}
|
|
}
|
|
// 上锁Flash
|
|
HAL_FLASH_Lock();
|
|
}
|
|
|
|
void Read_Data_From_Flash(float *data, uint32_t size)
|
|
{
|
|
// 从Flash中读取数据
|
|
for (uint32_t i = 0; i < size; i ++)
|
|
{
|
|
data[i] = *(uint32_t *)(FLASH_DATA_ADDRESS + i);
|
|
}
|
|
}
|
|
|