Использование 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
Комментарии (4) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]