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. Datasheet STM8l152 - ст.40
- 2. RM0031 - ст. 37
- 3. C Cross Compiler User’s Guide for ST Microelectronics STM8 - ст.52