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

Регистры FLASH STM32F7

Регистры интерфейса флеш-памяти STM32F74x/F75x: такты ожидания, ART-ускоритель и предвыборка, ключи разблокировки, запись и стирание секторов, флаги ошибок, байты опций и адреса загрузки.

Такты ожидания задаёт поле LATENCY по частоте HCLK и напряжению питания: при 2,7–3,6 В — 0 до 30 МГц и по одному на каждые 30 МГц, 7 тактов — до 216 МГц (RM0385, таблица 5). ART-ускоритель (ARTEN) кеширует инструкции, читаемые с флеш-памяти через шину AXI.

Запись разблокируют ключи 0x4567 0123 и 0xCDEF 89AB в FLASH_KEYR, байты опций — ключи 0x0819 2A3B и 0x4C5D 6E7F в FLASH_OPTKEYR. У F745, F746 и F756 до 1 МБ флеш-памяти в восьми секторах: четыре по 32 КБ, один 128 КБ и три по 256 КБ; у F750 — 64 КБ.

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

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

РегистрСмещениеНазначениеПосле сброса
FLASH_ACR0x00Такты ожидания, ART-ускоритель и предвыборка0x0000 0000
FLASH_KEYR0x04Ключ разблокировки флеш-памяти0x0000 0000
FLASH_OPTKEYR0x08Ключ разблокировки байтов опций0x0000 0000
FLASH_SR0x0CСостояние и ошибки флеш-памяти0x0000 0000
FLASH_CR0x10Запись и стирание секторов0x8000 0000
FLASH_OPTCR0x14Байты опций: защита, BOR, сторожа и сброс в Stop/Standby0xC0FF AAFD (биты опций загружаются из флеш-памяти при выходе из сброса)
FLASH_OPTCR10x18Байты опций: адреса загрузки BOOT_ADD0 и BOOT_ADD10x0040 0080 (адреса загрузки — во флеш-памяти через шину ITCM; биты опций загружаются из флеш-памяти при выходе из сброса)

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

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

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

FLASH->ACR = 0x00000000;

FLASH_ACR — такты ожидания, ART-ускоритель и предвыборка

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

31302928272625242322212019181716
—
1514131211109876543210
—ARTRST—ARTENPRFTEN—LATENCY
  • ARTRST (бит 11) — Сброс ART-ускорителя (при ARTEN = 0).
  • ARTEN (бит 9) — ART-ускоритель: кеш инструкций флеш-памяти на шине AXI.
  • PRFTEN (бит 8) — Предвыборка инструкций.
  • LATENCY (биты 3:0) — Такты ожидания флеш-памяти по частоте HCLK и напряжению питания.
    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_KEYR — ключ разблокировки флеш-памяти

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

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

FLASH_OPTKEYR — ключ разблокировки байтов опций

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

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

FLASH_SR — состояние и ошибки флеш-памяти

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

31302928272625242322212019181716
—BSY
1514131211109876543210
—ERSERRPGPERRPGAERRWRPERR—OPERREOP
  • BSY (бит 16) — Идёт запись или стирание.
  • ERSERR (бит 7) — Ошибка порядка стирания (сбрасывается записью 1).
  • PGPERR (бит 6) — Ошибка разрядности записи PSIZE (сбрасывается записью 1).
  • PGAERR (бит 5) — Ошибка выравнивания при записи (сбрасывается записью 1).
  • WRPERR (бит 4) — Запись в защищённый сектор (сбрасывается записью 1).
  • OPERR (бит 1) — Ошибка операции (сбрасывается записью 1).
  • EOP (бит 0) — Операция закончена (сбрасывается записью 1).

FLASH_CR — запись и стирание секторов

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

31302928272625242322212019181716
LOCK—ERRIEEOPIE—STRT
1514131211109876543210
—PSIZE—SNBMERSERPG
  • LOCK (бит 31) — Флеш-память заблокирована (разблокировка — ключами FLASH_KEYR).
  • ERRIE (бит 25) — Прерывание по ошибке.
  • EOPIE (бит 24) — Прерывание по окончании операции.
  • STRT (бит 16) — Запуск стирания.
  • PSIZE (биты 9:8) — Разрядность записи: 8, 16, 32 или 64 бита (по напряжению питания).
    PSIZEЗначение
    008 бит
    0116 бит
    1032 бита
    1164 бита
  • SNB (биты 6:3) — Номер стираемого сектора.
  • MER (бит 2) — Стирание всей флеш-памяти.
  • SER (бит 1) — Стирание сектора.
  • PG (бит 0) — Режим записи.

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

Смещение 0x14, адрес 0x4002 3C14, 32 бит, после сброса 0xC0FF AAFD (биты опций загружаются из флеш-памяти при выходе из сброса). В коде: FLASH->OPTCR.

31302928272625242322212019181716
IWDG_STOPIWDG_STDBY—nWRP
1514131211109876543210
RDPnRST_STDBYnRST_STOPIWDG_SWWWDG_SWBOR_LEVOPTSTRTOPTLOCK
  • IWDG_STOP (бит 31) — 0 — IWDG стоит в Stop, 1 — считает.
  • IWDG_STDBY (бит 30) — 0 — IWDG стоит в Standby, 1 — считает.
  • nWRP (биты 23:16) — Защита секторов от записи: 0 — сектор защищён.
  • RDP (биты 15:8) — Уровень защиты чтения: 0xAA — уровень 0, 0xCC — уровень 2, иначе — уровень 1.
  • nRST_STDBY (бит 7) — 0 — сброс при входе в Standby, 1 — без сброса.
  • nRST_STOP (бит 6) — 0 — сброс при входе в Stop, 1 — без сброса.
  • IWDG_SW (бит 5) — Сторож IWDG: 0 — аппаратный, 1 — программный.
  • WWDG_SW (бит 4) — Сторож WWDG: 0 — аппаратный, 1 — программный.
  • BOR_LEV (биты 3:2) — Порог сброса по снижению питания BOR.
    BOR_LEVЗначение
    00Уровень 3 (VBOR3)
    01Уровень 2 (VBOR2)
    10Уровень 1 (VBOR1)
    11BOR выключен: порог POR/PDR
  • OPTSTRT (бит 1) — Запуск записи байтов опций.
  • OPTLOCK (бит 0) — Байты опций заблокированы (разблокировка — ключами FLASH_OPTKEYR).

FLASH_OPTCR1 — байты опций: адреса загрузки BOOT_ADD0 и BOOT_ADD1

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

31302928272625242322212019181716
BOOT_ADD1
1514131211109876543210
BOOT_ADD0
  • BOOT_ADD1 (биты 31:16) — Адрес загрузки при BOOT = 1: биты 29:14 адреса (шаг 16 КБ).
  • BOOT_ADD0 (биты 15:0) — Адрес загрузки при BOOT = 0: биты 29:14 адреса (шаг 16 КБ).

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

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

Снимите LOCK ключами, дождитесь BSY = 0, задайте в FLASH_CR SER = 1, номер сектора SNB и PSIZE по напряжению питания, установите STRT и дождитесь BSY = 0. При включённом кеше данных учтите, что прочитанные ранее данные сектора могут остаться в кеше.

Источники

  1. STMicroelectronics. RM0385: Reference manual (Rev 9) — раздел 3.7: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f7 v1.2.10: заголовки CMSIS stm32f745xx.h, stm32f746xx.h, stm32f750xx.h, stm32f756xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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