#include "flash.h" #include "main.h" #include #include #include #define FLASH_BASE_ADDR 0x08000000UL // #define FLASH_PAGE_SIZE 0x800 // 2KB #define FLASH_PAGE_NUM 128 #define FLASH_USER_PAGE (FLASH_PAGE_NUM - 1) #define FLASH_USER_ADDR (FLASH_BASE_ADDR + FLASH_USER_PAGE * FLASH_PAGE_SIZE) FlashConfig_t currentCfg; FlashConfig_t *Flash_ReadConfig(void) { memcpy(¤tCfg, (void *)FLASH_USER_ADDR, sizeof(currentCfg)); return ¤tCfg; } void Flash_WriteConfig(FlashConfig_t *cfg) { HAL_FLASH_Unlock(); FLASH_EraseInitTypeDef erase; uint32_t page_error; erase.TypeErase = FLASH_TYPEERASE_PAGES; erase.Page = FLASH_USER_PAGE; erase.NbPages = 1; HAL_FLASHEx_Erase(&erase, &page_error); uint32_t addr = FLASH_USER_ADDR; uint64_t data = ((uint64_t)cfg->crc << 16) | cfg->can_id; HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, addr, data); HAL_FLASH_Lock(); }