#include "flash.h" #include "stm32f1xx_hal_flash.h" #include "stm32f1xx_hal_flash_ex.h" #include uint8_t Save_MAC_To_Flash(char *mac_str) { FlashData_t data; data.magic = MAGIC_NUMBER; strncpy(data.mac, mac_str, 12); data.mac[12] = '\0'; uint32_t addr = HOST_MAC_FLASH_ADDR; uint32_t *p = (uint32_t *)&data; uint16_t num_words = sizeof(FlashData_t) / 4; HAL_FLASH_Unlock(); FLASH_EraseInitTypeDef erase_init; uint32_t page_error; erase_init.TypeErase = FLASH_TYPEERASE_PAGES; erase_init.PageAddress = addr; erase_init.NbPages = 1; if (HAL_FLASHEx_Erase(&erase_init, &page_error) != HAL_OK) { HAL_FLASH_Lock(); return -1; } for (uint16_t i = 0; i < num_words; i++) { if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr + i*4, p[i]) != HAL_OK) { HAL_FLASH_Lock(); return -1; } } HAL_FLASH_Lock(); return 0; } uint8_t Load_MAC_From_Flash(char *mac_out) { FlashData_t *p = (FlashData_t *)HOST_MAC_FLASH_ADDR; if (p->magic != MAGIC_NUMBER) { return -1; // 无有效数据 } strncpy(mac_out, p->mac, 12); mac_out[12] = '\0'; return 0; }