#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); } }