Files
@ e13e9c42cb8d
Branch filter:
Location: therm/flash.c - annotation
e13e9c42cb8d
1.6 KiB
text/plain
Main logic cleanup and restructure
c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 235f584ead39 c0c52bad69d7 c0c52bad69d7 235f584ead39 30d4d968a3a1 c0c52bad69d7 235f584ead39 235f584ead39 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 30d4d968a3a1 235f584ead39 30d4d968a3a1 235f584ead39 235f584ead39 235f584ead39 235f584ead39 30d4d968a3a1 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 235f584ead39 c0c52bad69d7 30d4d968a3a1 c0c52bad69d7 c0c52bad69d7 235f584ead39 235f584ead39 235f584ead39 235f584ead39 235f584ead39 235f584ead39 c0c52bad69d7 c0c52bad69d7 235f584ead39 235f584ead39 235f584ead39 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 235f584ead39 c0c52bad69d7 c0c52bad69d7 235f584ead39 c0c52bad69d7 c0c52bad69d7 235f584ead39 235f584ead39 235f584ead39 235f584ead39 235f584ead39 235f584ead39 235f584ead39 c0c52bad69d7 235f584ead39 c0c52bad69d7 c0c52bad69d7 235f584ead39 235f584ead39 235f584ead39 235f584ead39 235f584ead39 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 | #include "stm32f0xx_hal.h"
#include "ssd1306.h"
#include "stm32f0xx_hal_flash.h"
#include "flash.h"
__attribute__((__section__(".eeprom"))) uint16_t eeprom[512];
static void __flash_write(therm_settings_t* tosave);
#define EEPROM_MAGIC_INDEX 16
#define EEPROM_MAGIC_VALUE 0xbeef
void flash_save(therm_settings_t* tosave)
{
ssd1306_clearscreen();
ssd1306_DrawString("Erase...", 0, 0);
HAL_Delay(1500);
ssd1306_DrawString("Save...", 1, 0);
__flash_write(tosave);
HAL_Delay(1500);
ssd1306_DrawString("Done!", 2, 0);
HAL_Delay(1500);
}
void flash_restore(therm_settings_t *torestore)
{
ssd1306_clearscreen();
ssd1306_DrawString("READING SAVE", 1, 0);
if(eeprom[EEPROM_MAGIC_INDEX] != EEPROM_MAGIC_VALUE)
{
ssd1306_DrawString("No data to read!", 2, 0);
return;
}
uint16_t i;
for(i=0;i<128;i++)
torestore->data[i] = *(eeprom+i);
ssd1306_DrawString("READ COMPLETE", 3, 0);
}
static void __flash_write(therm_settings_t* tosave)
{
// Erase mem
HAL_FLASH_Unlock();
// Erase the FLASH pages
FLASH_EraseInitTypeDef erase;
erase.TypeErase = TYPEERASE_PAGES;
erase.PageAddress = eeprom;
erase.NbPages = 1;
uint32_t SectorError = 0;
HAL_FLASHEx_Erase(&erase, &SectorError);
CLEAR_BIT(FLASH->CR, FLASH_CR_PER);
uint16_t i;
// for(i=1;i<20;i++)
// {
// HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, eeprom+i, tosave->data[i]);
// }
HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, eeprom + EEPROM_MAGIC_INDEX, EEPROM_MAGIC_VALUE);
HAL_FLASH_Lock();
}
// vim:softtabstop=4 shiftwidth=4 expandtab
|