BACKUP SRAM отличная замена EEPROM
В составе процессоров STM32F4 имеется область памяти, которая призвана восполнить один существенный пробел этих камушков
- отсутствие eeprom и fram. Конечно если выключить питание, данные из оперативной памяти сотрутся.
Но что поделаешь, ничто не вечно..
И тут разработчики камней нашли выход. Они подключили кластер backup sram к батарейному питанию от DBP.
Эврика! Если на плате установлена часовая батарейка или ионистор или уж на худой конец кондёр, содержимое памяти будет сохраняться
вместе с контекстом часов реального времени! Память статическая и потребляет мизерную энергию.
А это замечательно, согласитесь. И кроме того, backup sram обладает всей прелестью встроенного ОЗУ,
она быстрая и может быть перезаписана безконечное число раз. Это вам не флешка какая-нить!
Загляните в файлы
чистого проекта. Там вы найдёте полезный файл,
который раскраивает область backup sram, позволяя удобно обращаться к данным по имени.
Посмотрите, там уже вписаны метки bkp_1 и bkp_2.
Так и обращайтесь в ним из кода:
MOV32 R0, BKPSRAM_BASE
LDR R1, [R0, bkp_1]
STR R2, [R0, bkp_2]
Ну естественно, эта память доступна для всех видов обращения к ней - от байта до множества регистров.
Нужно только инициализировать её.
MOV32 R0, RCC_BASE + RCC_APB1ENR
LDR R1, [R0]
ORR R1, R1, RCC_APB1ENR_PWREN
STR R1, [R0]
MOV32 R0, PWR_BASE+PWR_CR
LDR R1, [R0]
ORR R1, R1, PWR_CR_DBP
STR R1, [R0]
MOV32 R0, RCC_BASE+RCC_AHB1ENR
LDR R1, [R0]
ORR R1, R1, RCC_AHB1ENR_BKPSRAMEN
STR R1, [R0]
Всё готово. Бэкапьте ваши данные. Навешивайте батарейку. И они будут храниться вечно!
p.s. Если памяти нужно немного,
RTC дают вам несколько аналогичных по назначению,
дополнительно защищённых от несанкционированной записи регистров,
делая область бэкапа более экономичной в плане резервного питания.