Регистры FLASH STM32G0
Регистры FLASH STM32G0: такты ожидания, кэш инструкций и предвыборка, ключи, программирование и стирание, флаги ошибок, коррекция ошибок ECC, байты опций, защита чтения, записи и PCROP.
Флеш-память STM32G0 программируется двойными словами по 64 бита (с ECC на каждое): установите PG и запишите два слова подряд по выровненному адресу. Быстрое программирование FSTPG пишет строку из 32 двойных слов. Страница — 2 КБ, номер страницы для стирания — в поле PNB регистра FLASH_CR (RM0444, раздел 3.3).
Байты опций в FLASH_OPTR задают уровень защиты чтения RDP, пороги BOR, режимы сторожей, сбросы при входе в пониженное потребление, режим вывода NRST и загрузку nBOOT0/nBOOT_SEL. Их меняют после ключей FLASH_OPTKEYR битом OPTSTRT, а применяют — OBL_LAUNCH.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| FLASH | 0x4002 2000 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| FLASH_ACR | 0x00 | Такты ожидания, кэш инструкций и предвыборка | 0b0000 0000 0000 010X 0000 0110 0000 0000 (X — бит PROGEMPTY: обновляется при загрузке байтов опций, системный сброс его не меняет) |
| FLASH_KEYR | 0x08 | Ключ разблокировки FLASH_CR | 0x0000 0000 |
| FLASH_OPTKEYR | 0x0C | Ключ разблокировки байтов опций | 0x0000 0000 |
| FLASH_SR | 0x10 | Флаги занятости, окончания и ошибок | 0x000X 0000 |
| FLASH_CR | 0x14 | Программирование, стирание и блокировка | 0xC000 0000 |
| FLASH_ECCR | 0x18 | Ошибки ECC банка 1 | 0x0000 0000 |
| FLASH_ECC2R | 0x1C | Ошибки ECC банка 2 | 0x0000 0000 |
| FLASH_OPTR | 0x20 | Байты опций: защита чтения, BOR, сторожа, загрузка | 0b11XX XXXX 1XXX XXXX XXXX XXXX XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP1ASR | 0x24 | Начало области PCROP A банка 1 | 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP1AER | 0x28 | Конец области PCROP A банка 1 | 0bX000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_WRP1AR | 0x2C | Область A защиты от записи, банк 1 | 0x00XX 00XX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_WRP1BR | 0x30 | Область B защиты от записи, банк 1 | 0b0000 0000 0XXX XXXX 0000 0000 0XXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP1BSR | 0x34 | Начало области PCROP B банка 1 | 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP1BER | 0x38 | Конец области PCROP B банка 1 | 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP2ASR | 0x44 | Начало области PCROP A банка 2 | 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP2AER | 0x48 | Конец области PCROP A банка 2 | 0bX000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_WRP2AR | 0x4C | Область A защиты от записи, банк 2 | 0b0000 0000 0XXX XXXX 0000 0000 0XXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_WRP2BR | 0x50 | Область B защиты от записи, банк 2 | 0b0000 0000 0XXX XXXX 0000 0000 0XXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP2BSR | 0x54 | Начало области PCROP B банка 2 | 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_PCROP2BER | 0x58 | Конец области PCROP B банка 2 | 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания) |
| FLASH_SECR | 0x80 | Защищённая область и блокировка загрузки | 0x0000 0000 (X — биты опций, загруженные из флеш-памяти при включении питания) |
Конструктор значения
Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.
Значение: 0x00000000
0000 0000 0000 0000 0000 0000 0000 0000
FLASH->ACR = 0x00000000;FLASH_ACR — такты ожидания, кэш инструкций и предвыборка
Смещение 0x00, адрес 0x4002 2000, 32 бит, после сброса 0b0000 0000 0000 010X 0000 0110 0000 0000 (X — бит PROGEMPTY: обновляется при загрузке байтов опций, системный сброс его не меняет). В коде: FLASH->ACR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | DBG_SWEN | — | PROGEMPTY | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ICRST | — | ICEN | PRFTEN | — | LATENCY | |||||||||
- DBG_SWEN (бит 18) — Разрешение доступа отладчика SWD.
- PROGEMPTY (бит 16) — Флеш-память пуста (0xFFFF FFFF по адресу 0x0800 0000): загрузка из системной памяти.
- ICRST (бит 11) — Сброс кэша инструкций; только при выключенном кэше.
- ICEN (бит 9) — Включение кэша инструкций.
- PRFTEN (бит 8) — Включение буфера предвыборки.
- LATENCY (биты 2:0) — Такты ожидания флеш-памяти: 0 — до 24 МГц, 1 — до 48 МГц, 2 — до 64 МГц.
LATENCY Значение 000 0 тактов ожидания: HCLK до 24 МГц 001 1 такт ожидания: до 48 МГц 010 2 такта ожидания: до 64 МГц
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 бит, после сброса 0x000X 0000. В коде: FLASH->SR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | CFGBSY | BSY2 | BSY1 | ||||||||||||
| 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 | |||
- CFGBSY (бит 18) — Занят: идёт программирование или стирание.
- BSY2 (бит 17) — Идёт операция с флеш-памятью (банк 2) (только у STM32G0B1, STM32G0C1).
- BSY1 (бит 16) — Идёт операция с флеш-памятью (банк 1).
- 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_PROT | 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 до сброса (только у STM32G0B1, STM32G0C1).
- SEC_PROT (бит 28) — Закрыть защищённую область до сброса.
- OBL_LAUNCH (бит 27) — Перезагрузить байты опций (вызывает системный сброс).
- RDERRIE (бит 26) — Прерывание по ошибке чтения PCROP.
- ERRIE (бит 25) — Прерывание по ошибке.
- EOPIE (бит 24) — Прерывание по окончании операции.
- FSTPG (бит 18) — Быстрое программирование строки из 32 двойных слов.
- OPTSTRT (бит 17) — Запуск записи байтов опций.
- STRT (бит 16) — Запуск стирания.
- MER2 (бит 15) — Стирание всей флеш-памяти банка 2 (только у STM32G0B1, STM32G0C1).
- BKER (бит 13) — Банк стираемой страницы (только у STM32G0B1, STM32G0C1).
- PNB (биты 12:3) — Номер стираемой страницы (по 2 КБ).
- MER1 (бит 2) — Стирание всей флеш-памяти банка 1.
- PER (бит 1) — Стирание страницы.
- PG (бит 0) — Программирование.
FLASH_ECCR — ошибки ECC банка 1
Смещение 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 | — | ECCCIE | — | SYSF_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.
- ECCCIE (бит 24) — Прерывание по исправленной ошибке ECC.
- SYSF_ECC (бит 20) — Ошибка ECC в системной памяти.
- ADDR_ECC (биты 14:0) — Адрес двойного слова с ошибкой ECC (только у STM32G0B1, STM32G0C1).
- ADDR_ECC (биты 13:0) — Адрес двойного слова с ошибкой ECC (только у STM32G031, STM32G041, STM32G051, STM32G061, STM32G071, STM32G081).
FLASH_ECC2R — ошибки ECC банка 2
Смещение 0x1C, адрес 0x4002 201C, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32G0B1, STM32G0C1. В коде: FLASH->ECC2R.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ECCD | ECCC | — | ECCCIE | — | SYSF_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.
- ECCCIE (бит 24) — Прерывание по исправленной ошибке ECC.
- SYSF_ECC (бит 20) — Ошибка ECC в системной памяти.
- ADDR_ECC (биты 14:0) — Адрес двойного слова с ошибкой ECC.
FLASH_OPTR — байты опций: защита чтения, BOR, сторожа, загрузка
Смещение 0x20, адрес 0x4002 2020, 32 бит, после сброса 0b11XX XXXX 1XXX XXXX XXXX XXXX XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: FLASH->OPTR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | IRHEN | NRST_MODE | nBOOT0 | nBOOT1 | nBOOT_SEL | — | RAM_PARITY_CHECK | DUAL_BANK | nSWAP_BANK | 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 | BORF_LEV | BORR_LEV | BOR_EN | RDP | |||||||||
- IRHEN (бит 29) — Сброс внутренними источниками выводится на NRST.
- NRST_MODE (биты 28:27) — Режим вывода NRST: вход и выход сброса, только вход или GPIO.
- nBOOT0 (бит 26) — Значение BOOT0 при BOOT_SEL = 0.
- nBOOT1 (бит 25) — Вместе с BOOT0 выбирает загрузку из SRAM или системной памяти.
- nBOOT_SEL (бит 24) — Загрузка по биту nBOOT0 (1) или по выводу BOOT0 (0).
- RAM_PARITY_CHECK (бит 22) — Контроль чётности SRAM (0 — включён).
- DUAL_BANK (бит 21) — Двухбанковый режим (STM32G0B1/C1 с 256 КБ) (только у STM32G0B1, STM32G0C1).
- nSWAP_BANK (бит 20) — Перестановка банков флеш-памяти (только у STM32G0B1, STM32G0C1).
- WWDG_SW (бит 19) — Сторож WWDG: программный или аппаратный.
- IWDG_STDBY (бит 18) — Остановка IWDG в Standby.
- IWDG_STOP (бит 17) — Остановка IWDG в Stop.
- IWDG_SW (бит 16) — Сторож IWDG: программный (1) или аппаратный — включён после сброса (0).
- nRST_SHDW (бит 15) — Сброс при входе в Shutdown (0) или нормальный вход.
- nRST_STDBY (бит 14) — Сброс при входе в Standby (0) или нормальный вход.
- nRST_STOP (бит 13) — Сброс при входе в Stop (0) или нормальный вход.
- BORF_LEV (биты 12:11) — Порог BOR при спаде напряжения.
- BORR_LEV (биты 10:9) — Порог BOR при нарастании напряжения.
- BOR_EN (бит 8) — Включение сброса по снижению напряжения BOR.
- RDP (биты 7:0) — Защита чтения: 0xAA — уровень 0, 0xCC — уровень 2 (необратимо), другое — уровень 1.
FLASH_PCROP1ASR — начало области PCROP A банка 1
Смещение 0x24, адрес 0x4002 2024, 32 бит, после сброса 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: FLASH->PCROP1ASR.
| 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 |
| — | PCROP1A_STRT | ||||||||||||||
- PCROP1A_STRT (биты 8:0) — Начало области A защиты PCROP банка 1, в блоках по 512 байт (только у STM32G0B1, STM32G0C1).
- PCROP1A_STRT (биты 7:0) — Начало области A защиты PCROP банка 1, в блоках по 512 байт (только у STM32G071, STM32G081).
- PCROP1A_STRT (биты 6:0) — Начало области A защиты PCROP банка 1, в блоках по 512 байт (только у STM32G031, STM32G041, STM32G051, STM32G061).
FLASH_PCROP1AER — конец области PCROP A банка 1
Смещение 0x28, адрес 0x4002 2028, 32 бит, после сброса 0bX000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: FLASH->PCROP1AER.
| 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 |
| — | PCROP1A_END | ||||||||||||||
- PCROP_RDP (бит 31) — Стирать области PCROP при снижении уровня защиты чтения с 1 до 0.
- PCROP1A_END (биты 8:0) — Конец области A защиты PCROP банка 1, в блоках по 512 байт (только у STM32G0B1, STM32G0C1).
- PCROP1A_END (биты 7:0) — Конец области A защиты PCROP банка 1, в блоках по 512 байт (только у STM32G071, STM32G081).
- PCROP1A_END (биты 6:0) — Конец области A защиты PCROP банка 1, в блоках по 512 байт (только у STM32G031, STM32G041, STM32G051, STM32G061).
FLASH_WRP1AR — область A защиты от записи, банк 1
Смещение 0x2C, адрес 0x4002 202C, 32 бит, после сброса 0x00XX 00XX (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: 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 (только у STM32G0B1, STM32G0C1).
- WRP1A_END (биты 21:16) — Последняя страница области A защиты от записи банка 1 (только у STM32G071, STM32G081).
- WRP1A_END (биты 20:16) — Последняя страница области A защиты от записи банка 1 (только у STM32G031, STM32G041, STM32G051, STM32G061).
- WRP1A_STRT (биты 6:0) — Первая страница области A защиты от записи банка 1 (только у STM32G0B1, STM32G0C1).
- WRP1A_STRT (биты 5:0) — Первая страница области A защиты от записи банка 1 (только у STM32G071, STM32G081).
- WRP1A_STRT (биты 4:0) — Первая страница области A защиты от записи банка 1 (только у STM32G031, STM32G041, STM32G051, STM32G061).
FLASH_WRP1BR — область B защиты от записи, банк 1
Смещение 0x30, адрес 0x4002 2030, 32 бит, после сброса 0b0000 0000 0XXX XXXX 0000 0000 0XXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: 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 (только у STM32G0B1, STM32G0C1).
- WRP1B_END (биты 21:16) — Последняя страница области B защиты от записи банка 1 (только у STM32G071, STM32G081).
- WRP1B_END (биты 20:16) — Последняя страница области B защиты от записи банка 1 (только у STM32G031, STM32G041, STM32G051, STM32G061).
- WRP1B_STRT (биты 6:0) — Первая страница области B защиты от записи банка 1 (только у STM32G0B1, STM32G0C1).
- WRP1B_STRT (биты 5:0) — Первая страница области B защиты от записи банка 1 (только у STM32G071, STM32G081).
- WRP1B_STRT (биты 4:0) — Первая страница области B защиты от записи банка 1 (только у STM32G031, STM32G041, STM32G051, STM32G061).
FLASH_PCROP1BSR — начало области PCROP B банка 1
Смещение 0x34, адрес 0x4002 2034, 32 бит, после сброса 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: FLASH->PCROP1BSR.
| 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 |
| — | PCROP1B_STRT | ||||||||||||||
- PCROP1B_STRT (биты 8:0) — Начало области B защиты PCROP банка 1, в блоках по 512 байт (только у STM32G0B1, STM32G0C1).
- PCROP1B_STRT (биты 7:0) — Начало области B защиты PCROP банка 1, в блоках по 512 байт (только у STM32G071, STM32G081).
- PCROP1B_STRT (биты 6:0) — Начало области B защиты PCROP банка 1, в блоках по 512 байт (только у STM32G031, STM32G041, STM32G051, STM32G061).
FLASH_PCROP1BER — конец области PCROP B банка 1
Смещение 0x38, адрес 0x4002 2038, 32 бит, после сброса 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: FLASH->PCROP1BER.
| 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 |
| — | PCROP1B_END | ||||||||||||||
- PCROP1B_END (биты 8:0) — Конец области B защиты PCROP банка 1, в блоках по 512 байт (только у STM32G0B1, STM32G0C1).
- PCROP1B_END (биты 7:0) — Конец области B защиты PCROP банка 1, в блоках по 512 байт (только у STM32G071, STM32G081).
- PCROP1B_END (биты 6:0) — Конец области B защиты PCROP банка 1, в блоках по 512 байт (только у STM32G031, STM32G041, STM32G051, STM32G061).
FLASH_PCROP2ASR — начало области PCROP A банка 2
Смещение 0x44, адрес 0x4002 2044, 32 бит, после сброса 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания); регистр есть только у STM32G0B1, STM32G0C1. В коде: FLASH->PCROP2ASR.
| 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 |
| — | PCROP2A_STRT | ||||||||||||||
- PCROP2A_STRT (биты 8:0) — Начало области A защиты PCROP банка 2, в блоках по 512 байт.
FLASH_PCROP2AER — конец области PCROP A банка 2
Смещение 0x48, адрес 0x4002 2048, 32 бит, после сброса 0bX000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания); регистр есть только у STM32G0B1, STM32G0C1. В коде: FLASH->PCROP2AER.
| 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 |
| — | PCROP2A_END | ||||||||||||||
- PCROP2A_END (биты 8:0) — Конец области A защиты PCROP банка 2, в блоках по 512 байт.
FLASH_WRP2AR — область A защиты от записи, банк 2
Смещение 0x4C, адрес 0x4002 204C, 32 бит, после сброса 0b0000 0000 0XXX XXXX 0000 0000 0XXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания); регистр есть только у STM32G0B1, STM32G0C1. В коде: 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 бит, после сброса 0b0000 0000 0XXX XXXX 0000 0000 0XXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания); регистр есть только у STM32G0B1, STM32G0C1. В коде: 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_PCROP2BSR — начало области PCROP B банка 2
Смещение 0x54, адрес 0x4002 2054, 32 бит, после сброса 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания); регистр есть только у STM32G0B1, STM32G0C1. В коде: FLASH->PCROP2BSR.
| 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 |
| — | PCROP2B_STRT | ||||||||||||||
- PCROP2B_STRT (биты 8:0) — Начало области B защиты PCROP банка 2, в блоках по 512 байт.
FLASH_PCROP2BER — конец области PCROP B банка 2
Смещение 0x58, адрес 0x4002 2058, 32 бит, после сброса 0b0000 0000 0000 0000 0000 000X XXXX XXXX (X — биты опций, загруженные из флеш-памяти при включении питания); регистр есть только у STM32G0B1, STM32G0C1. В коде: FLASH->PCROP2BER.
| 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 |
| — | PCROP2B_END | ||||||||||||||
- PCROP2B_END (биты 8:0) — Конец области B защиты PCROP банка 2, в блоках по 512 байт.
FLASH_SECR — защищённая область и блокировка загрузки
Смещение 0x80, адрес 0x4002 2080, 32 бит, после сброса 0x0000 0000 (X — биты опций, загруженные из флеш-памяти при включении питания). В коде: FLASH->SECR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | SEC_SIZE2 | — | BOOT_LOCK | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SEC_SIZE | ||||||||||||||
- SEC_SIZE2 (биты 27:20) — Размер защищённой области банка 2 в страницах (только у STM32G0B1, STM32G0C1).
- BOOT_LOCK (бит 16) — Запуск только из основной флеш-памяти.
- SEC_SIZE (биты 7:0) — Размер защищённой области в страницах (только у STM32G0B1, STM32G0C1).
- SEC_SIZE (биты 6:0) — Размер защищённой области в страницах (только у STM32G071, STM32G081).
- SEC_SIZE (биты 5:0) — Размер защищённой области в страницах (только у STM32G031, STM32G041, STM32G051, STM32G061).
Частые вопросы
Как записать двойное слово во флеш-память STM32G0?
FLASH->KEYR = 0x45670123; FLASH->KEYR = 0xCDEF89AB; дождитесь сброса BSY1, сбросьте флаги ошибок в SR. FLASH->CR |= FLASH_CR_PG; запишите два 32-битных слова по адресу, кратному 8; дождитесь BSY1 = 0, проверьте EOP и сбросьте PG.
Почему STM32G0 игнорирует вывод BOOT0?
По умолчанию nBOOT_SEL = 1 в байтах опций: загрузка определяется битом nBOOT0, а вывод PA14-BOOT0 работает как SWCLK. Чтобы снова использовать вывод BOOT0, сбросьте nBOOT_SEL в FLASH_OPTR.
Источники
- STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 3.7: описание регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-g0 v1.4.5: заголовки CMSIS stm32g031xx.h, stm32g041xx.h, stm32g051xx.h, stm32g061xx.h, stm32g071xx.h, stm32g081xx.h, stm32g0b1xx.h, stm32g0c1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры STM32G0
- Все регистры STM32G0Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_PLLCFGR, RCC_CRRCR, RCC_CIER
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_CFGR1, SYSCFG_CFGR2
- EXTI — внешние прерыванияEXTI_RTSR1, EXTI_FTSR1, EXTI_SWIER1, EXTI_RPR1, EXTI_FPR1, EXTI_RTSR2
- 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 — прямой доступ к памяти и DMAMUXDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- ADC — аналого-цифровой преобразовательADC_ISR, ADC_IER, ADC_CR, ADC_CFGR1, ADC_CFGR2, ADC_SMPR
- 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
- DBG — блок отладкиDBG_IDCODE, DBG_CR, DBG_APB_FZ1, DBG_APB_FZ2
- 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 — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
Калькуляторы и статьи
- Flash и загрузчик STM32Страницы и секторы, BOOT0, системный загрузчик, AN3155, IAP, option bytes, RDP
- Такты ожидания флеш-памяти STM32LATENCY в FLASH_ACR по частоте и питанию, таблица и код
- Карта флеш-памяти STM32Секторы и страницы, адрес → сектор, что стирать, CubeProgrammer и HAL
- STM32G0Cortex-M0+, до 64 МГц: G030–G0B0 Value line, G031–G0C1 — линейки и распиновки