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

Регистры FLASH STM32L1

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

Такт ожидания STM32L1 один (LATENCY), но включать его можно только при 64-битном доступе: сначала ACC64 = 1, затем LATENCY = 1 и предвыборка PRFTEN. Такт нужен выше 16 МГц в диапазоне 1 и выше 8 МГц в диапазоне 2 (RM0038, раздел 3.9 и таблица 13).

Запись разблокируется по ступеням: ключи PEKEY в FLASH_PEKEYR снимают PELOCK, затем PRGKEY или OPTKEY снимают PRGLOCK или OPTLOCK. EEPROM данных пишется словами, полусловами и байтами, флеш-память — словами или половинами страниц. Защиту секторов по 4 КБ задают регистры FLASH_WRPR1–WRPR4.

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

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

РегистрСмещениеНазначениеПосле сброса
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Состояние и ошибки памяти NVM0b0000 0000 0000 0000 000X X000 0000 0100 (при системном сбросе)
FLASH_OBR0x1CБайты опций: защита чтения, BOR и сторож0x00F8 00AA (у нового кристалла; иначе — по байтам опций RDP и USER)
FLASH_WRPR10x20Защита секторов от записи, секторы 0–310x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx)
FLASH_WRPR20x80Защита секторов от записи, секторы 32–630x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx)
FLASH_WRPR30x84Защита секторов от записи, секторы 64–950x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx)
FLASH_WRPR40x88Защита секторов от записи, секторы 96–1270x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx)

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

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

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

FLASH->ACR = 0x00000000;

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

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

31302928272625242322212019181716
—
1514131211109876543210
—RUN_PDSLEEP_PDACC64PRFTENLATENCY
  • RUN_PD (бит 4) — Память NVM в режиме power-down в режиме Run (запись — после ключей FLASH_PDKEYR).
  • SLEEP_PD (бит 3) — Память NVM в режиме power-down в режиме Sleep.
  • ACC64 (бит 2) — 64-битный доступ к флеш-памяти — обязателен перед LATENCY = 1 и предвыборкой.
  • PRFTEN (бит 1) — Предвыборка: интерфейс заранее читает следующее слово программы.
  • LATENCY (бит 0) — Такт ожидания при чтении памяти NVM: 0 или 1.
    LATENCYЗначение
    00 тактов ожидания
    11 такт ожидания (только при ACC64 = 1)

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

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

31302928272625242322212019181716
—OBL_LAUNCHERRIEEOPIE
1514131211109876543210
PARALLBANK—FPRGERASEFTDW—DATAPROGOPTLOCKPRGLOCKPELOCK
  • OBL_LAUNCH (бит 18) — Запись 1 перезагружает байты опций и вызывает системный сброс.
  • ERRIE (бит 17) — Прерывание по ошибке записи или стирания.
  • EOPIE (бит 16) — Прерывание по окончании записи или стирания.
  • PARALLBANK (бит 15) — Параллельная запись половин страниц в оба банка (у устройств с двумя банками) (только у STM32L151xD/xDX/xE, STM32L152xD/xDX/xE, STM32L162xD/xDX/xE).
  • FPRG (бит 10) — Запись половины страницы за одну операцию (вместе с PROG).
  • ERASE (бит 9) — Стирание страницы или слова (вместе с PROG или DATA).
  • FTDW (бит 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 3C08, 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 3C0C, 32 бит, после сброса 0x0000 0000. В коде: FLASH->PEKEYR.

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

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

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

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

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

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

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

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

Смещение 0x18, адрес 0x4002 3C18, 32 бит, после сброса 0b0000 0000 0000 0000 000X X000 0000 0100 (при системном сбросе). В коде: FLASH->SR.

31302928272625242322212019181716
—
1514131211109876543210
—RDERROPTVERRUSROPTVERRSIZERRPGAERRWRPERR—READYENDHVEOPBSY
  • RDERR (бит 13) — Чтение защищённой области PCROP (сбрасывается записью 1) (только у STM32L100xBA/xC, STM32L151xBA/xC, STM32L152xBA/xC, STM32L162xC).
  • OPTVERRUSR (бит 12) — Ошибка пользовательских байтов опций при загрузке (сбрасывается записью 1) (только у STM32L100xC, STM32L151xC/xCA/xD/xDX/xE, STM32L152xC/xCA/xD/xDX/xE, STM32L162).
  • OPTVERR (бит 11) — Ошибка байтов опций при загрузке (сбрасывается записью 1).
  • SIZERR (бит 10) — Ошибка размера данных (сбрасывается записью 1).
  • PGAERR (бит 9) — Ошибка выравнивания при записи (сбрасывается записью 1).
  • WRPERR (бит 8) — Запись в защищённую область (сбрасывается записью 1).
  • READY (бит 3) — Память NVM готова после выхода из режима пониженного потребления.
  • ENDHV (бит 2) — Высокое напряжение программирования снято: операция записи или стирания не идёт.
  • EOP (бит 1) — Запись или стирание закончено (сбрасывается записью 1).
  • BSY (бит 0) — Идёт запись или стирание.

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

Смещение 0x1C, адрес 0x4002 3C1C, 32 бит, после сброса 0x00F8 00AA (у нового кристалла; иначе — по байтам опций RDP и USER). В коде: FLASH->OBR.

31302928272625242322212019181716
—nRST_BFB2nRST_STDBYnRST_STOPIWDG_SWBOR_LEV
1514131211109876543210
—SPRMODRDPRT
  • nRST_BFB2 (бит 23) — Загрузка из системной памяти, которая затем переходит в банк 2 при его валидности (только у STM32L151xD/xDX/xE, STM32L152xD/xDX/xE, STM32L162xD/xDX/xE).
  • 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,45–1,55 В (0xxx)
    1000Уровень 1: 1,69–1,8 В
    1001Уровень 2: 1,94–2,1 В
    1010Уровень 3: 2,3–2,49 В
    1011Уровень 4: 2,54–2,74 В
    1100Уровень 5: 2,77–3,0 В
  • SPRMOD (бит 8) — Режим битов защиты секторов: защита записи или защита чтения кода (PCROP) (только у STM32L151xBA/xC, STM32L152xBA/xC, STM32L162xC).
  • RDPRT (биты 7:0) — Уровень защиты чтения: 0xAA — уровень 0, 0xCC — уровень 2, иначе — уровень 1.

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

Смещение 0x20, адрес 0x4002 3C20, 32 бит, после сброса 0x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx). В коде: FLASH->WRPR1.

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

FLASH_WRPR2 — защита секторов от записи, секторы 32–63

Смещение 0x80, адрес 0x4002 3C80, 32 бит, после сброса 0x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx); регистр есть только у STM32L100xC, STM32L151xC/xCA/xD/xDX/xE, STM32L152xC/xCA/xD/xDX/xE, STM32L162. В коде: FLASH->WRPR2.

31302928272625242322212019181716
WRP
1514131211109876543210
WRP
  • WRP (биты 31:0) — Защита от записи секторов по 4 КБ, бит на сектор (смысл бита задаёт WPRMOD/SPRMOD) (только у STM32L100xC, STM32L151xC/xCA/xD/xE, STM32L152xC/xCA/xD/xE, STM32L162xC/xCA/xD/xE).
  • WRP (биты 15:0) — Защита от записи секторов по 4 КБ, бит на сектор (смысл бита задаёт WPRMOD/SPRMOD) (только у STM32L151xDX, STM32L152xDX, STM32L162xDX).

FLASH_WRPR3 — защита секторов от записи, секторы 64–95

Смещение 0x84, адрес 0x4002 3C84, 32 бит, после сброса 0x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx); регистр есть только у STM32L151xD/xDX/xE, STM32L152xD/xDX/xE, STM32L162xD/xDX/xE. В коде: FLASH->WRPR3.

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

FLASH_WRPR4 — защита секторов от записи, секторы 96–127

Смещение 0x88, адрес 0x4002 3C88, 32 бит, после сброса 0x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx); регистр есть только у STM32L151xDX/xE, STM32L152xDX/xE, STM32L162xDX/xE. В коде: FLASH->WRPR4.

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

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

Почему STM32L1 падает после установки LATENCY?

LATENCY = 1 записан при ACC64 = 0. Порядок обязателен: сначала ACC64, затем LATENCY и проверка, что значение записалось, и только потом повышение частоты.

Как записать слово в EEPROM STM32L1?

Запишите в FLASH->PEKEYR 0x89AB CDEF и 0x0203 0405, чтобы снять PELOCK, затем запишите слово по адресу EEPROM (с 0x0808 0000) и дождитесь сброса BSY. В конце установите PELOCK.

Источники

  1. STMicroelectronics. RM0038: Reference manual (Rev 18) — раздел 3.9: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-l1 v2.3.4: заголовки CMSIS stm32l100xb.h, stm32l100xba.h, stm32l100xc.h, stm32l151xb.h, stm32l151xba.h, stm32l151xc.h, stm32l151xca.h, stm32l151xd.h, stm32l151xdx.h, stm32l151xe.h, stm32l152xb.h, stm32l152xba.h, stm32l152xc.h, stm32l152xca.h, stm32l152xd.h, stm32l152xdx.h, stm32l152xe.h, stm32l162xc.h, stm32l162xca.h, stm32l162xd.h, stm32l162xdx.h, stm32l162xe.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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