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

Регистры FLASH STM32F4

Регистры интерфейса флеш-памяти STM32F4: такты ожидания, предвыборка и кэши ART, ключи разблокировки, флаги ошибок, стирание секторов и программирование, байты опций — защита от чтения RDP, защита секторов, порог BOR.

Поле LATENCY регистра ACR задаёт число тактов ожидания флеш-памяти — его выбирают по частоте HCLK и напряжению питания по таблицам RM0090: при 2,7–3,6 В и 168 МГц нужно 5 тактов. Предвыборка (PRFTEN) и кэши команд и данных (ICEN, DCEN) ускорителя ART скрывают эти задержки (RM0090, глава 3).

Регистр CR после сброса заблокирован: его открывают записью ключей 0x45670123 и 0xCDEF89AB в KEYR, неверная последовательность блокирует CR до сброса. Стирание сектора: дождаться BSY = 0, выбрать сектор в SNB, установить SER, затем STRT. Программирование: PG = 1 и запись данных разрядностью PSIZE — она зависит от напряжения питания. Флаги SR сбрасываются записью единиц.

Байты опций меняют через OPTCR после ключей 0x08192A3B и 0x4C5D6E7F в OPTKEYR: защита от чтения RDP (0xAA — уровень 0, 0xCC — уровень 2, необратимо), защита секторов nWRP, порог сброса BOR_LEV, режимы IWDG и сброса в Stop и Standby. Запись запускает бит OPTSTRT.

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

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

РегистрСмещениеНазначениеПосле сброса
FLASH_ACR0x00Такты ожидания, предвыборка и кэши0x0000 0000
FLASH_KEYR0x04Ключи разблокировки FLASH_CR0x0000 0000
FLASH_OPTKEYR0x08Ключи разблокировки FLASH_OPTCR0x0000 0000
FLASH_SR0x0CФлаги состояния и ошибок0x0000 0000
FLASH_CR0x10Стирание и программирование0x8000 0000
FLASH_OPTCR0x14Байты опций: защита, BOR, сторожSTM32F405, STM32F407, STM32F415, STM32F417: 0x0FFF AAED (биты опций загружаются из флеш-памяти при сбросе); STM32F427, STM32F429, STM32F437, STM32F439: 0x0FFF AAED (биты опций загружаются из флеш-памяти при сбросе)
FLASH_OPTCR10x18Защита секторов банка 20x0FFF 0000 (биты опций загружаются из флеш-памяти при сбросе)

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

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

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

FLASH->ACR = 0x00000000;

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

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

31302928272625242322212019181716
—
1514131211109876543210
—DCRSTICRSTDCENICENPRFTEN—LATENCY
  • DCRST (бит 12) — Сброс кэша данных (при выключенном кэше).
  • ICRST (бит 11) — Сброс кэша команд (при выключенном кэше).
  • DCEN (бит 10) — Кэш данных.
  • ICEN (бит 9) — Кэш команд.
  • PRFTEN (бит 8) — Предвыборка команд.
  • LATENCY (биты 3:0) — Такты ожидания флеш-памяти: по частоте HCLK и напряжению питания (только у STM32F427, STM32F429, STM32F437, STM32F439).
    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
  • LATENCY (биты 2:0) — Такты ожидания флеш-памяти: по частоте HCLK и напряжению питания (только у STM32F405, STM32F407, STM32F415, STM32F417).
    LATENCYЗначениеМакрос CMSIS
    0000 тактов ожиданияFLASH_ACR_LATENCY_0WS
    0011 такт ожиданияFLASH_ACR_LATENCY_1WS
    0102 такта ожиданияFLASH_ACR_LATENCY_2WS
    0113 такта ожиданияFLASH_ACR_LATENCY_3WS
    1004 такта ожиданияFLASH_ACR_LATENCY_4WS
    1015 тактов ожиданияFLASH_ACR_LATENCY_5WS
    1106 тактов ожиданияFLASH_ACR_LATENCY_6WS
    1117 тактов ожиданияFLASH_ACR_LATENCY_7WS

FLASH_KEYR — ключи разблокировки FLASH_CR

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

Регистр данных: значение занимает его целиком.

FLASH_OPTKEYR — ключи разблокировки FLASH_OPTCR

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

Регистр данных: значение занимает его целиком.

FLASH_SR — флаги состояния и ошибок

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

31302928272625242322212019181716
—BSY
1514131211109876543210
—RDERRPGSERRPGPERRPGAERRWRPERR—OPERREOP
  • BSY (бит 16) — Идёт операция с флеш-памятью.
  • RDERR (бит 8) — Чтение сектора с защитой PCROP; сбрасывается записью 1 (только у STM32F427, STM32F429, STM32F437, STM32F439).
  • PGSERR (бит 7) — Ошибка последовательности программирования; сбрасывается записью 1.
  • PGPERR (бит 6) — Разрядность записи не совпадает с PSIZE; сбрасывается записью 1.
  • PGAERR (бит 5) — Ошибка выравнивания при программировании; сбрасывается записью 1.
  • WRPERR (бит 4) — Запись в защищённую область; сбрасывается записью 1.
  • OPERR (бит 1) — Ошибка операции; сбрасывается записью 1.
  • EOP (бит 0) — Операция завершена (при EOPIE = 1); сбрасывается записью 1.

FLASH_CR — стирание и программирование

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

31302928272625242322212019181716
LOCK—ERRIEEOPIE—STRT
1514131211109876543210
MER2—PSIZESNBMERSERPG
  • LOCK (бит 31) — Блокировка FLASH_CR; снимается ключами в KEYR.
  • ERRIE (бит 25) — Прерывание по ошибке.
  • EOPIE (бит 24) — Прерывание по окончании операции.
  • STRT (бит 16) — Запуск стирания.
  • MER2 (бит 15) — Стирание всех секторов банка 2 (только у STM32F427, STM32F429, STM32F437, STM32F439).
  • PSIZE (биты 9:8) — Разрядность программирования; зависит от напряжения питания.
    PSIZEЗначение
    008 бит
    0116 бит
    1032 бита
    1164 бита
  • SNB (биты 7:3) — Номер стираемого сектора (только у STM32F427, STM32F429, STM32F437, STM32F439).
  • SNB (биты 6:3) — Номер стираемого сектора (только у STM32F405, STM32F407, STM32F415, STM32F417).
  • MER (бит 2) — Стирание всех секторов (банка 1).
  • SER (бит 1) — Стирание сектора.
  • PG (бит 0) — Программирование.

FLASH_OPTCR — байты опций: защита, BOR, сторож

Смещение 0x14, адрес 0x4002 3C14, 32 бит, после сброса STM32F405, STM32F407, STM32F415, STM32F417: 0x0FFF AAED (биты опций загружаются из флеш-памяти при сбросе); STM32F427, STM32F429, STM32F437, STM32F439: 0x0FFF AAED (биты опций загружаются из флеш-памяти при сбросе). В коде: FLASH->OPTCR.

31302928272625242322212019181716
SPRMODDB1M—nWRP
1514131211109876543210
RDPnRST_STDBYnRST_STOPWDG_SWBFB2BOR_LEVOPTSTRTOPTLOCK
  • SPRMOD (бит 31) — Назначение битов nWRP: защита от записи или защита PCROP (только у STM32F427, STM32F429, STM32F437, STM32F439).
  • DB1M (бит 30) — Два банка по 512 Кбайт у устройств с 1 Мбайт флеш-памяти (только у STM32F427, STM32F429, STM32F437, STM32F439).
  • nWRP (биты 27:16) — Защита секторов 0–11 от записи: 0 — сектор защищён.
  • RDP (биты 15:8) — Уровень защиты от чтения.
    RDPЗначение
    10101010Уровень 0: без защиты
    11001100Уровень 2: защита кристалла, необратимо
  • nRST_STDBY (бит 7) — Сброс при входе в Standby: 0 — сброс, 1 — без сброса.
  • nRST_STOP (бит 6) — Сброс при входе в Stop: 0 — сброс, 1 — без сброса.
  • WDG_SW (бит 5) — Сторож IWDG: 0 — запускается аппаратно, 1 — программно.
  • BFB2 (бит 4) — Загрузка из банка 2 (только у STM32F427, STM32F429, STM32F437, STM32F439).
  • BOR_LEV (биты 3:2) — Порог сброса по снижению питания BOR.
    BOR_LEVЗначение
    00Уровень 3 (VBOR3)
    01Уровень 2 (VBOR2)
    10Уровень 1 (VBOR1)
    11BOR выключен: действует порог POR/PDR
  • OPTSTRT (бит 1) — Запуск записи байтов опций.
  • OPTLOCK (бит 0) — Блокировка FLASH_OPTCR; снимается ключами в OPTKEYR.

FLASH_OPTCR1 — защита секторов банка 2

Смещение 0x18, адрес 0x4002 3C18, 32 бит, после сброса 0x0FFF 0000 (биты опций загружаются из флеш-памяти при сбросе). В коде: FLASH->OPTCR1.

31302928272625242322212019181716
—nWRP
1514131211109876543210
—
  • nWRP (биты 27:16) — Защита секторов 12–23 от записи: 0 — сектор защищён.

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

Сколько тактов ожидания нужно STM32F407 на 168 МГц?

При питании 2,7–3,6 В — 5 тактов: FLASH->ACR = FLASH_ACR_LATENCY_5WS | FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN. Задайте их до переключения SYSCLK на PLL. Число тактов для других частот и напряжений считает калькулятор тактирования STM32.

Как стереть сектор флеш-памяти STM32F4?

Разблокируйте CR ключами в KEYR, дождитесь BSY = 0, запишите номер сектора в SNB, установите SER и затем STRT. Когда BSY снова станет 0, сбросьте SER. У STM32F42x/43x с двумя банками сектора 12–23 кодируются в SNB значениями 16–27.

Что будет, если записать RDP = 0xCC?

Включится уровень защиты 2: отладка и загрузка из SRAM отключаются навсегда, байты опций больше не меняются. Этот уровень необратим — используйте его только для серийных изделий.

Источники

  1. STMicroelectronics. RM0090: Reference manual (Rev 22) — раздел 3.9: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f4 v2.6.11: заголовки CMSIS stm32f405xx.h, stm32f407xx.h, stm32f415xx.h, stm32f417xx.h, stm32f427xx.h, stm32f429xx.h, stm32f437xx.h, stm32f439xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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