Files
@ 290bcdb4868e
Branch filter:
Location: therm/flash.c - annotation
290bcdb4868e
1.6 KiB
text/plain
Merge
c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 235f584ead39 c0c52bad69d7 c0c52bad69d7 235f584ead39 30d4d968a3a1 c0c52bad69d7 235f584ead39 235f584ead39 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 30d4d968a3a1 857e86bbc10d 0553e3d8cfb4 857e86bbc10d 235f584ead39 0553e3d8cfb4 857e86bbc10d 0553e3d8cfb4 c0c52bad69d7 c0c52bad69d7 c0c52bad69d7 235f584ead39 c0c52bad69d7 30d4d968a3a1 857e86bbc10d c0c52bad69d7 235f584ead39 235f584ead39 857e86bbc10d 235f584ead39 235f584ead39 235f584ead39 c0c52bad69d7 c0c52bad69d7 235f584ead39 235f584ead39 235f584ead39 857e86bbc10d 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(100);
ssd1306_drawstring("Save...", 1, 0);
__flash_write(tosave);
HAL_Delay(100);
ssd1306_drawstring("Done!", 2, 0);
HAL_Delay(500);
}
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
|