Регистры 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.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| FLASH | 0x4002 3C00 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| FLASH_ACR | 0x00 | Такты ожидания, предвыборка и режимы памяти NVM | 0x0000 0000 |
| FLASH_PECR | 0x04 | Программирование и стирание флеш-памяти и EEPROM | 0x0000 0007 |
| FLASH_PDKEYR | 0x08 | Ключ выхода памяти NVM из режима power-down | 0x0000 0000 |
| FLASH_PEKEYR | 0x0C | Ключ разблокировки FLASH_PECR и EEPROM | 0x0000 0000 |
| FLASH_PRGKEYR | 0x10 | Ключ разблокировки флеш-памяти программ | 0x0000 0000 |
| FLASH_OPTKEYR | 0x14 | Ключ разблокировки байтов опций | 0x0000 0000 |
| FLASH_SR | 0x18 | Состояние и ошибки памяти NVM | 0b0000 0000 0000 0000 000X X000 0000 0100 (при системном сбросе) |
| FLASH_OBR | 0x1C | Байты опций: защита чтения, BOR и сторож | 0x00F8 00AA (у нового кристалла; иначе — по байтам опций RDP и USER) |
| FLASH_WRPR1 | 0x20 | Защита секторов от записи, секторы 0–31 | 0x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx) |
| FLASH_WRPR2 | 0x80 | Защита секторов от записи, секторы 32–63 | 0x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx) |
| FLASH_WRPR3 | 0x84 | Защита секторов от записи, секторы 64–95 | 0x0000 0000 (у нового кристалла; иначе — по байтам опций WRPx) |
| FLASH_WRPR4 | 0x88 | Защита секторов от записи, секторы 96–127 | 0x0000 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | RUN_PD | SLEEP_PD | ACC64 | PRFTEN | LATENCY | ||||||||||
- 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 Значение 0 0 тактов ожидания 1 1 такт ожидания (только при ACC64 = 1)
FLASH_PECR — программирование и стирание флеш-памяти и EEPROM
Смещение 0x04, адрес 0x4002 3C04, 32 бит, после сброса 0x0000 0007. В коде: FLASH->PECR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | OBL_LAUNCH | ERRIE | EOPIE | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PARALLBANK | — | FPRG | ERASE | FTDW | — | DATA | PROG | OPTLOCK | PRGLOCK | PELOCK | |||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| PDKEYR | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PDKEYR | |||||||||||||||
- PDKEYR (биты 31:0) — Ключи 0x0415 2637 и 0xFAFB FCFD разрешают запись бита RUN_PD.
FLASH_PEKEYR — ключ разблокировки FLASH_PECR и EEPROM
Смещение 0x0C, адрес 0x4002 3C0C, 32 бит, после сброса 0x0000 0000. В коде: FLASH->PEKEYR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| PEKEYR | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PEKEYR | |||||||||||||||
- PEKEYR (биты 31:0) — Ключи 0x89AB CDEF и 0x0203 0405 снимают PELOCK.
FLASH_PRGKEYR — ключ разблокировки флеш-памяти программ
Смещение 0x10, адрес 0x4002 3C10, 32 бит, после сброса 0x0000 0000. В коде: FLASH->PRGKEYR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| PRGKEYR | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PRGKEYR | |||||||||||||||
- PRGKEYR (биты 31:0) — Ключи 0x8C9D AEBF и 0x1314 1516 снимают PRGLOCK (после PELOCK).
FLASH_OPTKEYR — ключ разблокировки байтов опций
Смещение 0x14, адрес 0x4002 3C14, 32 бит, после сброса 0x0000 0000. В коде: FLASH->OPTKEYR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| OPTKEYR | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | RDERR | OPTVERRUSR | OPTVERR | SIZERR | PGAERR | WRPERR | — | READY | ENDHV | EOP | BSY | ||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | nRST_BFB2 | nRST_STDBY | nRST_STOP | IWDG_SW | BOR_LEV | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SPRMOD | RDPRT | |||||||||||||
- 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 Значение 0000 BOR выключен: сброс при 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| WRP | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| WRP | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| WRP | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| WRP | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 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.
Источники
- STMicroelectronics. RM0038: Reference manual (Rev 18) — раздел 3.9: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32L1Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_CIR, RCC_AHBRSTR, RCC_APB2RSTR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_MEMRMP, SYSCFG_PMC, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4
- EXTI — контроллер внешних прерываний и событийEXTI_IMR, EXTI_EMR, EXTI_RTSR, EXTI_FTSR, EXTI_SWIER, EXTI_PR
- USART — последовательные порты USART и UARTUSART_SR, USART_DR, USART_BRR, USART_CR1, USART_CR2, USART_CR3
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_DR, I2C_SR1
- TIM — таймеры общего назначения и базовыеTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- DMA — контроллеры прямого доступа к памятиDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- АЦП — аналого-цифровой преобразовательADC_SR, ADC_CR1, ADC_CR2, ADC_SMPR1, ADC_SMPR2, ADC_SMPR3
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — блок вычисления CRCCRC_DR, CRC_IDR, CRC_CR
- DBGMCU — поддержка отладкиDBGMCU_IDCODE, DBGMCU_CR, DBGMCU_APB1_FZ, DBGMCU_APB2_FZ
- PWR — управление питаниемPWR_CR, PWR_CSR
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR
- ЦАП — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2