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 дают вам несколько аналогичных по назначению, дополнительно защищённых от несанкционированной записи регистров, делая область бэкапа более экономичной в плане резервного питания.