settings.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "main.h"
  2. #include "settings.h"
  3. #include "stm32g0xx_hal_flash.h"
  4. SettingsStruct Settings;
  5. void SettingsInit(void) {
  6. SettingsLoad();
  7. if (Settings.start[0] == 0xFFFF) { // Flash memory is clear
  8. SettinsDefault();
  9. }
  10. }
  11. void SettinsDefault(void) {
  12. // Default Value
  13. unsigned int ch;
  14. for(ch=0; ch<5; ch++) {
  15. Settings.start[ch] = 1000;
  16. Settings.fail[ch] = 0;
  17. }
  18. SettingsSave();
  19. }
  20. void SettingsSave(void) {
  21. uint32_t PageError = 0;
  22. FLASH_EraseInitTypeDef EraseInitStruct;
  23. HAL_FLASH_Unlock();
  24. EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
  25. EraseInitStruct.Page = 15; //FLASH_PAGE_NB - 1;
  26. EraseInitStruct.NbPages = 1;
  27. if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) == HAL_OK)
  28. {
  29. // Write setting
  30. uint64_t *source_addr = (void *)&Settings;
  31. uint64_t dest_addr = (uint64_t) FLASH_SETTINGS_START_ADDR;
  32. for (uint16_t i=0; i<SETTINGS_WORDS; i++) {
  33. HAL_FLASH_Program(FLASH_CR_PG, dest_addr, *source_addr);
  34. source_addr++;
  35. dest_addr = dest_addr + 8;
  36. }
  37. }
  38. HAL_FLASH_Lock();
  39. }
  40. void SettingsLoad(void) {
  41. uint32_t *source_addr = (uint32_t *)FLASH_SETTINGS_START_ADDR;
  42. uint32_t *dest_addr = (void *)&Settings;
  43. for (uint16_t i=0; i<SETTINGS_WORDS; i++) {
  44. *dest_addr = *(__IO uint32_t*)source_addr;
  45. source_addr++;
  46. dest_addr++;
  47. }
  48. }
  49. void SettingsReset(void) {
  50. uint32_t PageError = 0;
  51. FLASH_EraseInitTypeDef EraseInitStruct;
  52. HAL_FLASH_Unlock();
  53. EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
  54. EraseInitStruct.Page = 15; //FLASH_PAGE_NB - 1;
  55. EraseInitStruct.NbPages = 1;
  56. if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) == HAL_OK)
  57. {
  58. SettinsDefault();
  59. }
  60. HAL_FLASH_Lock();
  61. }