pressure_sensor_system/Software/master/PressureSensorBoardMaster/BSP/flash.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;
}