51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
#include "flash.h"
|
|
#include "stm32f1xx_hal_flash.h"
|
|
#include "stm32f1xx_hal_flash_ex.h"
|
|
#include <string.h>
|
|
|
|
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;
|
|
} |