Перейти к содержанию

Регистры FLASH STM32L0

Регистры интерфейса памяти NVM STM32L0x1: такт ожидания и режимы чтения, программирование и стирание флеш-памяти и EEPROM данных, ключи разблокировки, флаги состояния и ошибок, байты опций и защита секторов.

У STM32L0 в одной памяти NVM флеш-память программ, EEPROM данных и байты опций. Такт ожидания один (LATENCY): он нужен выше 16 МГц в диапазоне 1 и выше 8 МГц в диапазоне 2 (RM0377, таблица 14). Запись разблокируется по ступеням: ключи PEKEY в FLASH_PEKEYR снимают PELOCK, затем PRGKEY или OPTKEY снимают PRGLOCK или OPTLOCK.

EEPROM пишется словами, полусловами и байтами без отдельного стирания (бит FIX задаёт фиксированное время с предварительным стиранием), флеш-память — словами или половинами страниц по 64 байта. Байты опций в FLASH_OPTR задают защиту чтения, порог BOR, режим сторожа и сброс при входе в Stop и Standby.

ЭкземплярБазовый адресЕсть у
FLASH0x4002 2000всех

Регистры блока

РегистрСмещениеНазначениеПосле сброса
FLASH_ACR0x00Такты ожидания, предвыборка и режимы памяти NVM0x0000 0000
FLASH_PECR0x04Программирование и стирание флеш-памяти и EEPROM0x0000 0007
FLASH_PDKEYR0x08Ключ выхода памяти NVM из режима power-down0x0000 0000
FLASH_PEKEYR0x0CКлюч разблокировки FLASH_PECR и EEPROM0x0000 0000
FLASH_PRGKEYR0x10Ключ разблокировки флеш-памяти программ0x0000 0000
FLASH_OPTKEYR0x14Ключ разблокировки байтов опций0x0000 0000
FLASH_SR0x18Состояние и ошибки памяти NVM0x0000 000C
FLASH_OPTR0x1CБайты опций: защита чтения, BOR и сторож0xX0XX 0XXX (X — по байтам опций; с завода — 0x8070 00AA)
FLASH_WRPROT10x20Защита секторов от записи, секторы 0–150xXXXX XXXX (X — по байтам опций; с завода — 0x0000 0000)
FLASH_WRPROT20x80Защита секторов от записи, секторы 16–310x0000 XXXX (X — по байтам опций; с завода — 0x0000 0000)

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

FLASH->ACR = 0x00000000;

FLASH_ACR — такты ожидания, предвыборка и режимы памяти NVM

Смещение 0x00, адрес 0x4002 2000, 32 бит, после сброса 0x0000 0000. В коде: FLASH->ACR.

31302928272625242322212019181716
—
1514131211109876543210
—PRE_READDISAB_BUFRUN_PDSLEEP_PD—PRFTENLATENCY
  • PRE_READ (бит 6) — Упреждающее чтение данных: интерфейс читает следующее слово заранее.
  • DISAB_BUF (бит 5) — Отключение буферов чтения: каждое чтение идёт в память NVM.
  • RUN_PD (бит 4) — Память NVM в режиме power-down в режиме Run (запись — после ключей FLASH_PDKEYR).
  • SLEEP_PD (бит 3) — Память NVM в режиме power-down в режиме Sleep.
  • PRFTEN (бит 1) — Предвыборка: интерфейс заранее читает следующее слово программы.
  • LATENCY (бит 0) — Такт ожидания при чтении памяти NVM: 0 или 1.
    LATENCYЗначение
    00 тактов ожидания
    11 такт ожидания

FLASH_PECR — программирование и стирание флеш-памяти и EEPROM

Смещение 0x04, адрес 0x4002 2004, 32 бит, после сброса 0x0000 0007. В коде: FLASH->PECR.

31302928272625242322212019181716
—OBL_LAUNCHERRIEEOPIE
1514131211109876543210
PARALLBANK—FPRGERASEFIX—DATAPROGOPTLOCKPRGLOCKPELOCK
  • OBL_LAUNCH (бит 18) — Запись 1 перезагружает байты опций и вызывает системный сброс.
  • ERRIE (бит 17) — Прерывание по ошибке записи или стирания.
  • EOPIE (бит 16) — Прерывание по окончании записи или стирания.
  • PARALLBANK (бит 15) — Параллельная запись половин страниц в оба банка (у устройств с двумя банками) (только у STM32L071, STM32L081).
  • FPRG (бит 10) — Запись половины страницы за одну операцию (вместе с PROG).
  • ERASE (бит 9) — Стирание страницы или слова (вместе с PROG или DATA).
  • FIX (бит 8) — Фиксированное время записи в EEPROM: всегда со стиранием перед записью.
  • DATA (бит 4) — Операция над данными EEPROM.
  • PROG (бит 3) — Операция над флеш-памятью программ.
  • OPTLOCK (бит 2) — Байты опций заблокированы (разблокировка — ключами FLASH_OPTKEYR).
  • PRGLOCK (бит 1) — Флеш-память программ заблокирована (разблокировка — ключами FLASH_PRGKEYR).
  • PELOCK (бит 0) — FLASH_PECR и EEPROM заблокированы (разблокировка — ключами FLASH_PEKEYR).

FLASH_PDKEYR — ключ выхода памяти NVM из режима power-down

Смещение 0x08, адрес 0x4002 2008, 32 бит, после сброса 0x0000 0000. В коде: FLASH->PDKEYR.

31302928272625242322212019181716
PDKEYR
1514131211109876543210
PDKEYR
  • PDKEYR (биты 31:0) — Ключи 0x0415 2637 и 0xFAFB FCFD разрешают запись бита RUN_PD.

FLASH_PEKEYR — ключ разблокировки FLASH_PECR и EEPROM

Смещение 0x0C, адрес 0x4002 200C, 32 бит, после сброса 0x0000 0000. В коде: FLASH->PEKEYR.

31302928272625242322212019181716
PEKEYR
1514131211109876543210
PEKEYR
  • PEKEYR (биты 31:0) — Ключи 0x89AB CDEF и 0x0203 0405 снимают PELOCK.

FLASH_PRGKEYR — ключ разблокировки флеш-памяти программ

Смещение 0x10, адрес 0x4002 2010, 32 бит, после сброса 0x0000 0000. В коде: FLASH->PRGKEYR.

31302928272625242322212019181716
PRGKEYR
1514131211109876543210
PRGKEYR
  • PRGKEYR (биты 31:0) — Ключи 0x8C9D AEBF и 0x1314 1516 снимают PRGLOCK (после PELOCK).

FLASH_OPTKEYR — ключ разблокировки байтов опций

Смещение 0x14, адрес 0x4002 2014, 32 бит, после сброса 0x0000 0000. В коде: FLASH->OPTKEYR.

31302928272625242322212019181716
OPTKEYR
1514131211109876543210
OPTKEYR
  • OPTKEYR (биты 31:0) — Ключи 0xFBEA D9C8 и 0x2425 2627 снимают OPTLOCK (после PELOCK).

FLASH_SR — состояние и ошибки памяти NVM

Смещение 0x18, адрес 0x4002 2018, 32 бит, после сброса 0x0000 000C. В коде: FLASH->SR.

31302928272625242322212019181716
—FWWERRNOTZEROERR
1514131211109876543210
—RDERR—OPTVERRSIZERRPGAERRWRPERR—READYHVOFFEOPBSY
  • FWWERR (бит 17) — Запись или стирание прервано выборкой команды (сбрасывается записью 1).
  • NOTZEROERR (бит 16) — Запись в нестёртую область (сбрасывается записью 1).
  • RDERR (бит 13) — Чтение защищённой области PCROP (сбрасывается записью 1).
  • OPTVERR (бит 11) — Ошибка байтов опций при загрузке (сбрасывается записью 1).
  • SIZERR (бит 10) — Ошибка размера данных (сбрасывается записью 1).
  • PGAERR (бит 9) — Ошибка выравнивания при записи (сбрасывается записью 1).
  • WRPERR (бит 8) — Запись в защищённую область (сбрасывается записью 1).
  • READY (бит 3) — Память NVM готова после выхода из режима пониженного потребления.
  • HVOFF (бит 2) — Высокое напряжение программирования снято: операция записи или стирания не идёт.
  • EOP (бит 1) — Запись или стирание закончено (сбрасывается записью 1).
  • BSY (бит 0) — Идёт запись или стирание.

FLASH_OPTR — байты опций: защита чтения, BOR и сторож

Смещение 0x1C, адрес 0x4002 201C, 32 бит, после сброса 0xX0XX 0XXX (X — по байтам опций; с завода — 0x8070 00AA). В коде: FLASH->OPTR.

31302928272625242322212019181716
BOOT1—BFB2nRST_STDBYnRST_STOPIWDG_SWBOR_LEV
1514131211109876543210
—WPRMODRDPROT
  • BOOT1 (бит 31) — Бит опций nBOOT1: вместе с выводом BOOT0 выбирает загрузку.
  • BFB2 (бит 23) — Загрузка из системной памяти, которая затем переходит в банк 2 при его валидности (только у STM32L071, STM32L081).
  • nRST_STDBY (бит 22) — 0 — сброс при входе в Standby, 1 — без сброса.
  • nRST_STOP (бит 21) — 0 — сброс при входе в Stop, 1 — без сброса.
  • IWDG_SW (бит 20) — Сторож IWDG: 0 — аппаратный (запускается сам), 1 — программный.
  • BOR_LEV (биты 19:16) — Порог сброса по снижению питания BOR.
    BOR_LEVЗначение
    0000BOR выключен: сброс около 1,5 В (0xxx)
    1000Уровень 1: около 1,8 В
    1001Уровень 2: около 2,0 В
    1010Уровень 3: около 2,5 В
    1011Уровень 4: около 2,7 В
    1100Уровень 5: около 3,0 В
  • WPRMOD (бит 8) — Режим битов защиты секторов: защита записи или защита чтения кода (PCROP).
  • RDPROT (биты 7:0) — Уровень защиты чтения: 0xAA — уровень 0, 0xCC — уровень 2, иначе — уровень 1.

FLASH_WRPROT1 — защита секторов от записи, секторы 0–15

Смещение 0x20, адрес 0x4002 2020, 32 бит, после сброса 0xXXXX XXXX (X — по байтам опций; с завода — 0x0000 0000). В коде: FLASH->WRPR.

31302928272625242322212019181716
—
1514131211109876543210
WRP
  • WRP (биты 15:0) — Защита от записи секторов по 4 КБ, бит на сектор (смысл бита задаёт WPRMOD/SPRMOD).

FLASH_WRPROT2 — защита секторов от записи, секторы 16–31

Смещение 0x80, адрес 0x4002 2080, 32 бит, после сброса 0x0000 XXXX (X — по байтам опций; с завода — 0x0000 0000); регистр есть только у STM32L071, STM32L081. В коде: FLASH->WRPR2.

Регистр данных: значение занимает его целиком.

Частые вопросы

Как записать байт в EEPROM STM32L0?

Снимите PELOCK: запишите в FLASH->PEKEYR 0x89AB CDEF и затем 0x0203 0405. После этого просто запишите байт по адресу EEPROM (с 0x0808 0000) и дождитесь сброса BSY в FLASH_SR. В конце снова заблокируйте запись битом PELOCK.

Зачем RM0377 советует писать NZDISABLE?

Флеш-память проверяет, что слово стёрто перед записью, и ставит флаг NOTZEROERR. В RM0377 бит NZDISABLE (бит 23 FLASH_PECR) отключает это уведомление; заголовки CMSIS помещают его в бит 22, поэтому на странице он не показан.

Источники

  1. STMicroelectronics. RM0377: Reference manual (Rev 10) — раздел 3.7: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-l0 v1.9.4: заголовки CMSIS stm32l011xx.h, stm32l021xx.h, stm32l031xx.h, stm32l041xx.h, stm32l051xx.h, stm32l071xx.h, stm32l081xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32L0

Калькуляторы и статьи