STM8 використання EEPROM з компілятором 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
Top