STM8 использование EEPROM c компилятором COSMIC

Использование EEPROM в микроконтроллерах STM8 очень простое, однако есть ряд нюансов и тонкостей при использовании EEPROM совместно с компилятором COSMIC в среде STVD.

Чтобы ассоциировать переменную в области EEPROM необходимо объявить ее следующим образом например: 

 EEPROM uint32_t EEPROM_data=0; 

Однако при попытке в коде присвоить ей какое-либо новое значение, во время компиляции будет выдана ошибка:

#error symbol _FLASH_CR2 not defined 
#error symbol _FLASH_NCR2 not defined 
#error symbol _FLASH_IAPSR not defined 

Данные переменные используются во встроенной библиотеке для работы с модулем EEPROM. Причем компилятор подставляет код при присваивании нового значения в переменную находящуюся в области EEPROM из библиотеки libm0.sm8, где используются переменные _FLASH_CR2, _FLASH_NCR2, _FLASH_IAPSR.

Наша задача присвоить этим переменным адреса соответствующих регистров в модуле FLASH [3].

Для семейства STM8S необходимо в файл stm8s.h вставить следующий код:

 #ifdef _COSMIC_ volatile char FLASH_IAPSR @0x505f;  volatile char FLASH_CR2 @0x505b;  volatile char FLASH_NCR2 @0x505c;	 #endif

 Для семейства STM8L необходимо в файл stm8l15x.h вставить следующий код:

 #ifdef _COSMIC_	 volatile char FLASH_IAPSR @0x5054;  volatile char FLASH_CR2 @0x5051;  volatile char FLASH_NCR2 @0x505c;	 #endif

После этого ошибки при компиляции пропадут.

Перед записью EEPROM контроллер повышает напряжение [2], поэтому перед записью в целях безопасности необходимо разрешить запись данных в EEPROM и отключить все прерывания. Для работы функций необходимо подключить следующие файлы файлы stm8l15x_flash.h и stm8l15x_flash.c 

После записи EEPROM для безопасности необходимо запретить запись данных в EEPROM и разрешить глобальные прерывания.

 disableInterrupts(); EEPROM_data=0x12345678; enableInterrupts(); FLASH_Lock(FLASH_MemType_Data);

После записи в карте памяти видно, что по адресу 0x1000 были записаны данные

Источники:

  1. 1. Datasheet STM8l152 — стр.40
  2. 2. RM0031 — стр. 37
  3. 3. C Cross Compiler User’s Guide for ST Microelectronics STM8 — стр.52