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

Регистры 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 при сбросе.

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

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

РегистрСмещениеНазначениеПосле сброса
FLASH_ACR0x00Такты ожидания, кэши и предвыборка, режимы пониженного потребления0x0004 0601
FLASH_PDKEYR0x04Ключ выключения флеш-памяти в режиме Run0x0000 0000
FLASH_KEYR0x08Ключ разблокировки FLASH_CR0x0000 0000
FLASH_OPTKEYR0x0CКлюч разблокировки байтов опций0x0000 0000
FLASH_SR0x10Флаги занятости, окончания и ошибок0x0000 0000
FLASH_CR0x14Программирование, стирание и блокировка0xC000 0000
FLASH_ECCR0x18Ошибки ECC0x0000 0000
FLASH_OPTR0x20Байты опций: защита чтения, BOR, сторожа, загрузка0xFXXX XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL))
FLASH_PCROP1SR0x24Начало области PCROP банка 10xFFFF XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL))
FLASH_PCROP1ER0x28Конец области PCROP банка 10xX000 XXXX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL))
FLASH_WRP1AR0x2CОбласть A защиты от записи, банк 10x00XX 00XX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL))
FLASH_WRP1BR0x30Область B защиты от записи, банк 10x00XX 00XX (X — биты, загруженные из флеш-памяти при загрузке байтов опций (OBL))
FLASH_PCROP2SR0x44Начало области PCROP банка 20xFFFF XXXX
FLASH_PCROP2ER0x48Конец области PCROP банка 20x0000 XXXX
FLASH_WRP2AR0x4CОбласть A защиты от записи, банк 20x00XX 00XX
FLASH_WRP2BR0x50Область B защиты от записи, банк 20x00XX 00XX
FLASH_SEC1R0x70Защищённая область банка 1 и блокировка загрузкиSTM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1: 0xFFFX FFXX; STM32G431, STM32G441: 0xFFFX FXXX
FLASH_SEC2R0x74Защищённая область банка 20xFFFF 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.

31302928272625242322212019181716
—DBG_SWEN—
1514131211109876543210
—SLEEP_PDRUN_PDDCRSTICRSTDCENICENPRFTEN—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
    00000 тактов ожиданияFLASH_ACR_LATENCY_0WS
    00011 такт ожиданияFLASH_ACR_LATENCY_1WS
    00102 такта ожиданияFLASH_ACR_LATENCY_2WS
    00113 такта ожиданияFLASH_ACR_LATENCY_3WS
    01004 такта ожиданияFLASH_ACR_LATENCY_4WS
    01015 тактов ожиданияFLASH_ACR_LATENCY_5WS
    01106 тактов ожиданияFLASH_ACR_LATENCY_6WS
    01117 тактов ожиданияFLASH_ACR_LATENCY_7WS
    10008 тактов ожиданияFLASH_ACR_LATENCY_8WS
    10019 тактов ожиданияFLASH_ACR_LATENCY_9WS
    101010 тактов ожиданияFLASH_ACR_LATENCY_10WS
    101111 тактов ожиданияFLASH_ACR_LATENCY_11WS
    110012 тактов ожиданияFLASH_ACR_LATENCY_12WS
    110113 тактов ожиданияFLASH_ACR_LATENCY_13WS
    111014 тактов ожиданияFLASH_ACR_LATENCY_14WS
    111115 тактов ожидания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.

31302928272625242322212019181716
—BSY
1514131211109876543210
OPTVERRRDERR—FASTERRMISERRPGSERRSIZERRPGAERRWRPERRPROGERR—OPERREOP
  • 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.

31302928272625242322212019181716
LOCKOPTLOCKSEC_PROT2SEC_PROT1OBL_LAUNCHRDERRIEERRIEEOPIE—FSTPGOPTSTRTSTRT
1514131211109876543210
MER2—BKERPNBMER1PERPG
  • 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.

31302928272625242322212019181716
ECCDECCCECCD2ECCC2—ECCIE—SYSF_ECCBK_ECC—ADDR_ECC
1514131211109876543210
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.

31302928272625242322212019181716
—IRHENNRST_MODEnBOOT0nSWBOOT0CCMSRAM_RSTSRAM_PEnBOOT1DBANK—BFB2WWDG_SWIWDG_STDBYIWDG_STOPIWDG_SW
1514131211109876543210
—nRST_SHDWnRST_STDBYnRST_STOP—BOR_LEVRDP
  • 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.

31302928272625242322212019181716
—
1514131211109876543210
—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.

31302928272625242322212019181716
PCROP_RDP—
1514131211109876543210
—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.

31302928272625242322212019181716
—WRP1A_END
1514131211109876543210
—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.

31302928272625242322212019181716
—WRP1B_END
1514131211109876543210
—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.

31302928272625242322212019181716
—
1514131211109876543210
—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.

31302928272625242322212019181716
—
1514131211109876543210
—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.

31302928272625242322212019181716
—WRP2A_END
1514131211109876543210
—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.

31302928272625242322212019181716
—WRP2B_END
1514131211109876543210
—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.

31302928272625242322212019181716
—BOOT_LOCK
1514131211109876543210
—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.

31302928272625242322212019181716
—
1514131211109876543210
—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 в страницах.

Источники

  1. STMicroelectronics. RM0440: Reference manual (Rev 9) — раздел 3.7–5.7: описание регистров, назначение полей и значения после сброса
  2. 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

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