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;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>Flash
|
|||
|
HAL_FLASH_Unlock();
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|||
|
// 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; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>Flash<73><68><EFBFBD><EFBFBD>
|
|||
|
status = HAL_FLASHEx_Erase(&erase_init, &page_error);
|
|||
|
if(status != HAL_OK)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>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)
|
|||
|
{
|
|||
|
// д<><D0B4>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
|
|||
|
}
|
|||
|
}
|
|||
|
// <20><><EFBFBD><EFBFBD>Flash
|
|||
|
HAL_FLASH_Lock();
|
|||
|
}
|
|||
|
|
|||
|
void Read_Data_From_Flash(float *data, uint32_t size)
|
|||
|
{
|
|||
|
// <20><>Flash<73>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
for (uint32_t i = 0; i < size; i ++)
|
|||
|
{
|
|||
|
data[i] = *(uint32_t *)(FLASH_DATA_ADDRESS + i);
|
|||
|
}
|
|||
|
}
|
|||
|
|