Yunhorn_STS_E1/Src/user_flash.c

86 lines
2.0 KiB
C

#include "main.h"
#include "stm32f0xx_hal.h"
#include "user_flash.h"
extern volatile uint8_t co_threshold;
uint32_t Save_Config_Flash_Addr = 0x0801F800;
uint8_t save_config(uint8_t config)
{
uint8_t status = HAL_ERROR;
FLASH_EraseInitTypeDef My_Flash;
// __set_PRIMASK(1);
HAL_FLASH_Unlock();
My_Flash.TypeErase = FLASH_TYPEERASE_PAGES;
My_Flash.PageAddress = Save_Config_Flash_Addr;
My_Flash.NbPages = 1;
uint32_t PageError = 0;
status = HAL_FLASHEx_Erase(&My_Flash, &PageError);
if(status != HAL_OK)
{
return status;
}
uint16_t Write_Flash_Data = config;
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Save_Config_Flash_Addr, Write_Flash_Data);
Write_Flash_Data = co_threshold;
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Save_Config_Flash_Addr+4, Write_Flash_Data);
HAL_FLASH_Lock();
// __set_PRIMASK(0);
return status;
}
uint8_t read_config(void)
{
uint8_t data = *(__IO uint8_t*)( Save_Config_Flash_Addr );
return data;
}
uint8_t read_co_threshold(void)
{
uint8_t co_threshold_data = *(__IO uint8_t*)( Save_Config_Flash_Addr + 4 );
return co_threshold_data;
}
uint8_t save_co_threshold(uint8_t co_threshold_data)
{
uint8_t status = HAL_ERROR;
FLASH_EraseInitTypeDef My_Flash;
uint8_t music_play = read_config();
// __set_PRIMASK(1);
HAL_FLASH_Unlock();
My_Flash.TypeErase = FLASH_TYPEERASE_PAGES;
My_Flash.PageAddress = Save_Config_Flash_Addr;
My_Flash.NbPages = 1;
uint32_t PageError = 0;
status = HAL_FLASHEx_Erase(&My_Flash, &PageError);
if(status != HAL_OK)
{
return status;
}
uint16_t Write_Flash_Data = music_play;
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Save_Config_Flash_Addr, Write_Flash_Data);
Write_Flash_Data = co_threshold_data;
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, Save_Config_Flash_Addr+4, Write_Flash_Data);
HAL_FLASH_Lock();
// __set_PRIMASK(0);
return status;
}