Регистры FLASH STM32G4
Регистры FLASH STM32G4: такты ожидания, кэши инструкций и данных, ключи разблокировки, программирование двойными словами и быстрое программирование, стирание страниц и банков, байты опций, защита PCROP и WRP, безопасная область.
Флеш-память STM32G4 программируется двойными словами по 64 бита с ECC; быстрое программирование FSTPG пишет строку двойных слов подряд, без проверки после каждого. Ключи 0x4567 0123 и 0xCDEF 89AB в KEYR снимают LOCK. Такты ожидания по таблице 9 RM0440: в Range 1 boost — 0 до 34 МГц и 4 до 170 МГц, в Range 2 — 2 такта до 26 МГц.
У категорий 2, 3 и 4 главы флеш-памяти разные (3, 4 и 5 RM0440), и значения после сброса страница даёт по ним. У категории 3 (STM32G47x/G48x, 512 КБ) два банка: в двухбанковом режиме DBANK = 1 страницы по 2 КБ, в однобанковом — по 4 КБ. Байты опций — защита чтения, BOR, сторожа, загрузка, режим вывода NRST — загружаются в FLASH_OPTR при сбросе.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| FLASH | 0x4002 2000 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| FLASH_ACR | 0x00 | Такты ожидания, кэши и предвыборка, режимы пониженного потребления | 0x0004 0601 |
| FLASH_PDKEYR | 0x04 | Ключ выключения флеш-памяти в режиме Run | 0x0000 0000 |
| FLASH_KEYR | 0x08 | Ключ разблокировки FLASH_CR | 0x0000 0000 |
| FLASH_OPTKEYR | 0x0C | Ключ разблокировки байтов опций | 0x0000 0000 |
| FLASH_SR | 0x10 | Флаги занятости, окончания и ошибок | 0x0000 0000 |
| FLASH_CR | 0x14 | Программирование, стирание и блокировка | 0xC000 0000 |
| FLASH_ECCR | 0x18 | Ошибки ECC | 0x0000 0000 |
| FLASH_OPTR | 0x20 | Байты опций: защита чтения, BOR, сторожа, загрузка | 0xFXXX XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)) |
| FLASH_PCROP1SR | 0x24 | Начало области PCROP банка 1 | 0xFFFF XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)) |
| FLASH_PCROP1ER | 0x28 | Конец области PCROP банка 1 | 0xX000 XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)) |
| FLASH_WRP1AR | 0x2C | Область A защиты от записи, банк 1 | 0x00XX 00XX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)) |
| FLASH_WRP1BR | 0x30 | Область B защиты от записи, банк 1 | 0x00XX 00XX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)) |
| FLASH_PCROP2SR | 0x44 | Начало области PCROP банка 2 | 0xFFFF XXXX |
| FLASH_PCROP2ER | 0x48 | Конец области PCROP банка 2 | 0x0000 XXXX |
| FLASH_WRP2AR | 0x4C | Область A защиты от записи, банк 2 | 0x00XX 00XX |
| FLASH_WRP2BR | 0x50 | Область B защиты от записи, банк 2 | 0x00XX 00XX |
| FLASH_SEC1R | 0x70 | Защищённая область банка 1 и блокировка загрузки | STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1: 0xFFFX FFXX; STM32G431, STM32G441: 0xFFFX FXXX |
| FLASH_SEC2R | 0x74 | Защищённая область банка 2 | 0xFFFF FFXX |
Конструктор значения
Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.
Значение: 0x00040601
0000 0000 0000 0100 0000 0110 0000 0001
FLASH->ACR = 0x00040601;FLASH_ACR — такты ожидания, кэши и предвыборка, режимы пониженного потребления
Смещение 0x00, адрес 0x4002 2000, 32 бит, после сброса 0x0004 0601. В коде: FLASH->ACR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | DBG_SWEN | — | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SLEEP_PD | RUN_PD | DCRST | ICRST | DCEN | ICEN | PRFTEN | — | LATENCY | ||||||
- DBG_SWEN (бит 18) — Разрешение доступа отладчика SWD.
- SLEEP_PD (бит 14) — Выключение флеш-памяти в режимах Sleep и Low-power sleep.
- RUN_PD (бит 13) — Выключение флеш-памяти в режиме Low-power run (после ключей FLASH_PDKEYR).
- DCRST (бит 12) — Сброс кэша данных; только при выключенном кэше.
- ICRST (бит 11) — Сброс кэша инструкций; только при выключенном кэше.
- DCEN (бит 10) — Включение кэша данных.
- ICEN (бит 9) — Включение кэша инструкций.
- PRFTEN (бит 8) — Включение буфера предвыборки.
- LATENCY (биты 3:0) — Такты ожидания флеш-памяти: 0 — до 34 МГц, 4 — до 170 МГц в Range 1 boost (таблица 9 RM0440).
LATENCY Значение Макрос CMSIS 0000 0 тактов ожидания FLASH_ACR_LATENCY_0WS 0001 1 такт ожидания FLASH_ACR_LATENCY_1WS 0010 2 такта ожидания FLASH_ACR_LATENCY_2WS 0011 3 такта ожидания FLASH_ACR_LATENCY_3WS 0100 4 такта ожидания FLASH_ACR_LATENCY_4WS 0101 5 тактов ожидания FLASH_ACR_LATENCY_5WS 0110 6 тактов ожидания FLASH_ACR_LATENCY_6WS 0111 7 тактов ожидания FLASH_ACR_LATENCY_7WS 1000 8 тактов ожидания FLASH_ACR_LATENCY_8WS 1001 9 тактов ожидания FLASH_ACR_LATENCY_9WS 1010 10 тактов ожидания FLASH_ACR_LATENCY_10WS 1011 11 тактов ожидания FLASH_ACR_LATENCY_11WS 1100 12 тактов ожидания FLASH_ACR_LATENCY_12WS 1101 13 тактов ожидания FLASH_ACR_LATENCY_13WS 1110 14 тактов ожидания FLASH_ACR_LATENCY_14WS 1111 15 тактов ожидания FLASH_ACR_LATENCY_15WS
FLASH_PDKEYR — ключ выключения флеш-памяти в режиме Run
Смещение 0x04, адрес 0x4002 2004, 32 бит, после сброса 0x0000 0000. В коде: FLASH->PDKEYR.
Регистр данных: значение занимает его целиком.
FLASH_KEYR — ключ разблокировки FLASH_CR
Смещение 0x08, адрес 0x4002 2008, 32 бит, после сброса 0x0000 0000. В коде: FLASH->KEYR.
Регистр данных: значение занимает его целиком.
FLASH_OPTKEYR — ключ разблокировки байтов опций
Смещение 0x0C, адрес 0x4002 200C, 32 бит, после сброса 0x0000 0000. В коде: FLASH->OPTKEYR.
Регистр данных: значение занимает его целиком.
FLASH_SR — флаги занятости, окончания и ошибок
Смещение 0x10, адрес 0x4002 2010, 32 бит, после сброса 0x0000 0000. В коде: FLASH->SR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | BSY | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| OPTVERR | RDERR | — | FASTERR | MISERR | PGSERR | SIZERR | PGAERR | WRPERR | PROGERR | — | OPERR | EOP | |||
- BSY (бит 16) — Идёт операция с флеш-памятью.
- OPTVERR (бит 15) — Байты опций не прошли проверку при загрузке.
- RDERR (бит 14) — Чтение защищённой области PCROP.
- FASTERR (бит 9) — Прерывание быстрого программирования.
- MISERR (бит 8) — Нарушена последовательность быстрого программирования.
- PGSERR (бит 7) — Ошибка последовательности программирования.
- SIZERR (бит 6) — Запись не двойным словом.
- PGAERR (бит 5) — Ошибка выравнивания: двойное слово не по границе 8 байт.
- WRPERR (бит 4) — Запись в защищённую область; сбрасывается записью 1.
- PROGERR (бит 3) — Программирование ячейки, которая не стёрта; сбрасывается записью 1.
- OPERR (бит 1) — Ошибка операции; сбрасывается записью 1.
- EOP (бит 0) — Операция завершена; сбрасывается записью 1.
FLASH_CR — программирование, стирание и блокировка
Смещение 0x14, адрес 0x4002 2014, 32 бит, после сброса 0xC000 0000. В коде: FLASH->CR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| LOCK | OPTLOCK | SEC_PROT2 | SEC_PROT1 | OBL_LAUNCH | RDERRIE | ERRIE | EOPIE | — | FSTPG | OPTSTRT | STRT | ||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| MER2 | — | BKER | PNB | MER1 | PER | PG | |||||||||
- LOCK (бит 31) — Блокировка FLASH_CR; снимается ключами FLASH_KEYR.
- OPTLOCK (бит 30) — Блокировка байтов опций; снимается ключами FLASH_OPTKEYR.
- SEC_PROT2 (бит 29) — Закрыть защищённую область банка 2 до следующего сброса (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- SEC_PROT1 (бит 28) — Закрыть защищённую область банка 1 до следующего сброса.
- OBL_LAUNCH (бит 27) — Перезагрузить байты опций (вызывает сброс).
- RDERRIE (бит 26) — Прерывание по ошибке чтения PCROP.
- ERRIE (бит 25) — Прерывание по ошибке.
- EOPIE (бит 24) — Прерывание по окончании операции.
- FSTPG (бит 18) — Быстрое программирование строки двойных слов (у категории 3 — 64 двойных слова).
- OPTSTRT (бит 17) — Запуск записи байтов опций.
- STRT (бит 16) — Запуск стирания.
- MER2 (бит 15) — Стирание всей флеш-памяти банка 2 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- BKER (бит 11) — Банк стираемой страницы (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- PNB (биты 10:3) — Номер стираемой страницы (страница — 2 КБ, у категории 3 в двухбанковом режиме — 2 КБ, в однобанковом — 4 КБ) (только у STM32G491, STM32G4A1).
- PNB (биты 9:3) — Номер стираемой страницы (страница — 2 КБ, у категории 3 в двухбанковом режиме — 2 КБ, в однобанковом — 4 КБ) (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- PNB (биты 8:3) — Номер стираемой страницы (страница — 2 КБ, у категории 3 в двухбанковом режиме — 2 КБ, в однобанковом — 4 КБ) (только у STM32G431, STM32G441).
- MER1 (бит 2) — Стирание всей флеш-памяти банка 1.
- PER (бит 1) — Стирание страницы.
- PG (бит 0) — Программирование.
FLASH_ECCR — ошибки ECC
Смещение 0x18, адрес 0x4002 2018, 32 бит, после сброса 0x0000 0000. В коде: FLASH->ECCR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ECCD | ECCC | ECCD2 | ECCC2 | — | ECCIE | — | SYSF_ECC | BK_ECC | — | ADDR_ECC | |||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| ADDR_ECC | |||||||||||||||
- ECCD (бит 31) — Двойная ошибка ECC (неисправимая); сбрасывается записью 1.
- ECCC (бит 30) — Одиночная ошибка ECC исправлена; сбрасывается записью 1.
- ECCD2 (бит 29) — Двойная ошибка ECC (неисправимая) в старших 64 битах (127:64) при DBANK = 0; сбрасывается записью 1 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- ECCC2 (бит 28) — Одиночная ошибка ECC исправлена в старших 64 битах (127:64) при DBANK = 0; сбрасывается записью 1 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- ECCIE (бит 24) — Прерывание по исправленной ошибке ECC.
- SYSF_ECC (бит 22) — Ошибка ECC в системной памяти.
- BK_ECC (бит 21) — Банк с ошибкой ECC (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- ADDR_ECC (биты 18:0) — Адрес двойного слова с ошибкой ECC (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- ADDR_ECC (биты 17:0) — Адрес двойного слова с ошибкой ECC (только у STM32G431, STM32G441).
FLASH_OPTR — байты опций: защита чтения, BOR, сторожа, загрузка
Смещение 0x20, адрес 0x4002 2020, 32 бит, после сброса 0xFXXX XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)). В коде: FLASH->OPTR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | IRHEN | NRST_MODE | nBOOT0 | nSWBOOT0 | CCMSRAM_RST | SRAM_PE | nBOOT1 | DBANK | — | BFB2 | WWDG_SW | IWDG_STDBY | IWDG_STOP | IWDG_SW | |
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | nRST_SHDW | nRST_STDBY | nRST_STOP | — | BOR_LEV | RDP | |||||||||
- IRHEN (бит 30) — Сброс внутренними источниками выводится на NRST.
- NRST_MODE (биты 29:28) — Режим вывода PG10/NRST: вход и выход сброса, только вход или GPIO.
- nBOOT0 (бит 27) — Значение BOOT0 при nSWBOOT0 = 0.
- nSWBOOT0 (бит 26) — Источник BOOT0: бит nBOOT0 (0) или вывод BOOT0 (1).
- CCMSRAM_RST (бит 25) — Стирание CCM SRAM при системном сбросе (0 — стирается).
- SRAM_PE (бит 24) — Контроль чётности SRAM1 и CCM SRAM (0 — включён).
- nBOOT1 (бит 23) — Вместе с BOOT0 выбирает загрузку из SRAM или системной памяти.
- DBANK (бит 22) — Двухбанковый режим флеш-памяти (категория 3, 512 КБ) (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- PB4_PUPEN (бит 22) — PB4: 0 — «мёртвая батарея» UCPD1 включена, подтяжка NJTRST выключена; 1 — наоборот (категория 4) (только у STM32G491, STM32G4A1).
- BFB2 (бит 20) — Загрузка из банка 2 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- WWDG_SW (бит 19) — Сторож WWDG: программный или аппаратный.
- IWDG_STDBY (бит 18) — Остановка IWDG в Standby.
- IWDG_STOP (бит 17) — Остановка IWDG в Stop.
- IWDG_SW (бит 16) — Сторож IWDG: программный (1) или аппаратный — включён после сброса (0).
- nRST_SHDW (бит 14) — Сброс при входе в Shutdown (0) или нормальный вход.
- nRST_STDBY (бит 13) — Сброс при входе в Standby (0) или нормальный вход.
- nRST_STOP (бит 12) — Сброс при входе в Stop (0) или нормальный вход.
- BOR_LEV (биты 10:8) — Порог сброса по снижению напряжения BOR: 0…4.
- RDP (биты 7:0) — Защита чтения: 0xAA — уровень 0, 0xCC — уровень 2 (необратимо), другое — уровень 1.
FLASH_PCROP1SR — начало области PCROP банка 1
Смещение 0x24, адрес 0x4002 2024, 32 бит, после сброса 0xFFFF XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)). В коде: FLASH->PCROP1SR.
| 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 |
| — | PCROP1_STRT | ||||||||||||||
- PCROP1_STRT (биты 14:0) — Начало области PCROP банка 1, в двойных словах (у категории 3 в двухбанковом режиме) или по 16 байт (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- PCROP1_STRT (биты 13:0) — Начало области PCROP банка 1, в двойных словах (у категории 3 в двухбанковом режиме) или по 16 байт (только у STM32G431, STM32G441).
FLASH_PCROP1ER — конец области PCROP банка 1
Смещение 0x28, адрес 0x4002 2028, 32 бит, после сброса 0xX000 XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)). В коде: FLASH->PCROP1ER.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| PCROP_RDP | — | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | PCROP1_END | ||||||||||||||
- PCROP_RDP (бит 31) — Стирать области PCROP при снижении уровня защиты чтения с 1 до 0.
- PCROP1_END (биты 14:0) — Конец области PCROP банка 1 (включительно) (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- PCROP1_END (биты 13:0) — Конец области PCROP банка 1 (включительно) (только у STM32G431, STM32G441).
FLASH_WRP1AR — область A защиты от записи, банк 1
Смещение 0x2C, адрес 0x4002 202C, 32 бит, после сброса 0x00XX 00XX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)). В коде: FLASH->WRP1AR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | WRP1A_END | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | WRP1A_STRT | ||||||||||||||
- WRP1A_END (биты 22:16) — Последняя страница области A защиты от записи банка 1 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- WRP1A_END (биты 21:16) — Последняя страница области A защиты от записи банка 1 (только у STM32G431, STM32G441).
- WRP1A_STRT (биты 6:0) — Первая страница области A защиты от записи банка 1 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- WRP1A_STRT (биты 5:0) — Первая страница области A защиты от записи банка 1 (только у STM32G431, STM32G441).
FLASH_WRP1BR — область B защиты от записи, банк 1
Смещение 0x30, адрес 0x4002 2030, 32 бит, после сброса 0x00XX 00XX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL)). В коде: FLASH->WRP1BR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | WRP1B_END | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | WRP1B_STRT | ||||||||||||||
- WRP1B_END (биты 22:16) — Последняя страница области B защиты от записи банка 1 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- WRP1B_END (биты 21:16) — Последняя страница области B защиты от записи банка 1 (только у STM32G431, STM32G441).
- WRP1B_STRT (биты 6:0) — Первая страница области B защиты от записи банка 1 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- WRP1B_STRT (биты 5:0) — Первая страница области B защиты от записи банка 1 (только у STM32G431, STM32G441).
FLASH_PCROP2SR — начало области PCROP банка 2
Смещение 0x44, адрес 0x4002 2044, 32 бит, после сброса 0xFFFF XXXX; регистр есть только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484. В коде: FLASH->PCROP2SR.
| 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 |
| — | PCROP2_STRT | ||||||||||||||
- PCROP2_STRT (биты 14:0) — Начало области PCROP банка 2, в двойных словах (у категории 3 в двухбанковом режиме) или по 16 байт.
FLASH_PCROP2ER — конец области PCROP банка 2
Смещение 0x48, адрес 0x4002 2048, 32 бит, после сброса 0x0000 XXXX; регистр есть только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484. В коде: FLASH->PCROP2ER.
| 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 |
| — | PCROP2_END | ||||||||||||||
- PCROP2_END (биты 14:0) — Конец области PCROP банка 2 (включительно).
FLASH_WRP2AR — область A защиты от записи, банк 2
Смещение 0x4C, адрес 0x4002 204C, 32 бит, после сброса 0x00XX 00XX; регистр есть только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484. В коде: FLASH->WRP2AR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | WRP2A_END | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | WRP2A_STRT | ||||||||||||||
- WRP2A_END (биты 22:16) — Последняя страница области A защиты от записи банка 2.
- WRP2A_STRT (биты 6:0) — Первая страница области A защиты от записи банка 2.
FLASH_WRP2BR — область B защиты от записи, банк 2
Смещение 0x50, адрес 0x4002 2050, 32 бит, после сброса 0x00XX 00XX; регистр есть только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484. В коде: FLASH->WRP2BR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | WRP2B_END | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | WRP2B_STRT | ||||||||||||||
- WRP2B_END (биты 22:16) — Последняя страница области B защиты от записи банка 2.
- WRP2B_STRT (биты 6:0) — Первая страница области B защиты от записи банка 2.
FLASH_SEC1R — защищённая область банка 1 и блокировка загрузки
Смещение 0x70, адрес 0x4002 2070, 32 бит, после сброса STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1: 0xFFFX FFXX; STM32G431, STM32G441: 0xFFFX FXXX. В коде: FLASH->SEC1R.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | BOOT_LOCK | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SEC_SIZE1 | ||||||||||||||
- BOOT_LOCK (бит 16) — Запуск только из основной флеш-памяти.
- SEC_SIZE1 (биты 7:0) — Размер защищённой области банка 1 в страницах (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- SEC_SIZE1 (биты 6:0) — Размер защищённой области банка 1 в страницах (только у STM32G431, STM32G441).
FLASH_SEC2R — защищённая область банка 2
Смещение 0x74, адрес 0x4002 2074, 32 бит, после сброса 0xFFFF FFXX; регистр есть только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484. В коде: FLASH->SEC2R.
| 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 |
| — | SEC_SIZE2 | ||||||||||||||
- SEC_SIZE2 (биты 7:0) — Размер защищённой области банка 2 в страницах.
Частые вопросы
Как стереть страницу флеш-памяти STM32G474?
Разблокируйте FLASH_CR, дождитесь BSY = 0, сбросьте флаги ошибок в SR. Установите PER, номер страницы в PNB и банк в BKER (в двухбанковом режиме), затем STRT. Дождитесь BSY = 0 и проверьте EOP.
Зачем нужна безопасная область SEC_SIZE?
Это начало флеш-памяти, которое после выполнения закрывается битом SEC_PROT до сброса: загрузчик или код с ключами недоступен основному приложению. Размер задаётся байтами опций SEC_SIZE1 и SEC_SIZE2 в страницах.
Источники
- STMicroelectronics. RM0440: Reference manual (Rev 9) — раздел 3.7–5.7: описание регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-g4 v1.2.6: заголовки CMSIS stm32g431xx.h, stm32g441xx.h, stm32g471xx.h, stm32g473xx.h, stm32g474xx.h, stm32g483xx.h, stm32g484xx.h, stm32g491xx.h, stm32g4a1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры STM32G4
- Все регистры STM32G4Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_PLLCFGR, RCC_CIER, RCC_CIFR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_MEMRMP, SYSCFG_CFGR1, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4
- EXTI — внешние прерыванияEXTI_IMR1, EXTI_EMR1, EXTI_RTSR1, EXTI_FTSR1, EXTI_SWIER1, EXTI_PR1
- USART — последовательные порты USART и LPUARTUSART_CR1, USART_CR2, USART_CR3, USART_BRR, USART_GTPR, USART_RTOR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_TIMINGR, I2C_TIMEOUTR
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- LPTIM — маломощный таймерLPTIM_ISR, LPTIM_ICR, LPTIM_IER, LPTIM_CFGR, LPTIM_CR, LPTIM_CMP
- DMA — прямой доступ к памятиDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- АЦП — аналого-цифровые преобразователиADC_ISR, ADC_IER, ADC_CR, ADC_CFGR, ADC_CFGR2, ADC_SMPR1
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR, IWDG_WINR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — вычислитель CRCCRC_DR, CRC_IDR, CRC_CR, CRC_INIT, CRC_POL
- DBGMCU — отладкаDBGMCU_IDCODE, DBGMCU_CR, DBGMCU_APB1FZR1, DBGMCU_APB1FZR2, DBGMCU_APB2FZR
- PWR — управление питаниемPWR_CR1, PWR_CR2, PWR_CR3, PWR_CR4, PWR_SR1, PWR_SR2
- RTC — часы реального времени и вмешательствоRTC_TR, RTC_DR, RTC_SSR, RTC_ICSR, RTC_PRER, RTC_WUTR
- ЦАП — цифро-аналоговые преобразователиDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
- CORDIC — сопроцессор тригонометрии CORDICCORDIC_CSR, CORDIC_WDATA, CORDIC_RDATA
- FMAC — фильтровый ускоритель FMACFMAC_X1BUFCFG, FMAC_X2BUFCFG, FMAC_YBUFCFG, FMAC_PARAM, FMAC_CR, FMAC_SR