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

Регистры FLASH STM32F0

Регистры FLASH STM32F0: такт ожидания и буфер предвыборки, ключи разблокировки, программирование и стирание страниц, флаги ошибок, байты опций, защита чтения и записи.

Флеш-память STM32F0 программируется полусловами по 16 бит: установите PG в FLASH_CR и запишите полуслово по адресу. Страница — 1 КБ у STM32F03x–F05x и 2 КБ у STM32F07x и F09x; стирание — бит PER, адрес страницы в FLASH_AR и бит STRT. Перед записью FLASH_CR разблокируют ключами 0x4567 0123 и 0xCDEF 89AB в FLASH_KEYR (RM0091, раздел 3.2).

При SYSCLK выше 24 МГц нужен один такт ожидания (LATENCY = 1). Регистр OBR показывает загруженные байты опций: уровень защиты чтения, режимы сторожа, nBOOT1 и пользовательские байты Data0 и Data1; WRPR — защиту страниц от записи.

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

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

РегистрСмещениеНазначениеПосле сброса
FLASH_ACR0x00Такты ожидания и буфер предвыборки0x0000 0000
FLASH_KEYR0x04Ключ разблокировки FLASH_CR0xXXXX XXXX
FLASH_OPTKEYR0x08Ключ разблокировки байтов опций0xXXXX XXXX
FLASH_SR0x0CФлаги занятости, окончания и ошибок0x0000 0000
FLASH_CR0x10Программирование, стирание и блокировка0x0000 0080
FLASH_AR0x14Адрес стираемой страницы0x0000 0000
FLASH_OBR0x1CЗагруженные байты опций0xXXXX XX0X
FLASH_WRPR0x20Защита страниц от записи0xXXXX XXXX

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

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

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

FLASH->ACR = 0x00000000;

FLASH_ACR — такты ожидания и буфер предвыборки

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

31302928272625242322212019181716
—
1514131211109876543210
—PRFTBSPRFTBE—LATENCY
  • PRFTBS (бит 5) — Буфер предвыборки включён (только чтение).
  • PRFTBE (бит 4) — Включение буфера предвыборки.
  • LATENCY (бит 0) — Такт ожидания флеш-памяти: 0 — до 24 МГц, 1 — от 24 до 48 МГц.
    LATENCYЗначение
    00 тактов ожидания: SYSCLK до 24 МГц
    11 такт ожидания: SYSCLK от 24 до 48 МГц

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

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

31302928272625242322212019181716
FKEYR
1514131211109876543210
FKEYR
  • FKEYR (биты 31:0) — Ключ: запись 0x4567 0123, затем 0xCDEF 89AB снимает LOCK.

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

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

31302928272625242322212019181716
OPTKEYR
1514131211109876543210
OPTKEYR
  • OPTKEYR (биты 31:0) — Ключ: запись 0x4567 0123, затем 0xCDEF 89AB разрешает запись байтов опций.

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

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

31302928272625242322212019181716
—
1514131211109876543210
—EOPWRPRTERR—PGERR—BSY
  • EOP (бит 5) — Операция завершена; сбрасывается записью 1.
  • WRPRTERR (бит 4) — Запись в защищённую страницу; сбрасывается записью 1.
  • PGERR (бит 2) — Ошибка программирования: ячейка не стёрта; сбрасывается записью 1.
  • BSY (бит 0) — Идёт операция с флеш-памятью.

FLASH_CR — программирование, стирание и блокировка

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

31302928272625242322212019181716
—
1514131211109876543210
—OBL_LAUNCHEOPIE—ERRIEOPTWRE—LOCKSTRTOPTEROPTPG—MERPERPG
  • OBL_LAUNCH (бит 13) — Перезагрузить байты опций (вызывает системный сброс).
  • EOPIE (бит 12) — Прерывание по окончании операции.
  • ERRIE (бит 10) — Прерывание по ошибке.
  • OPTWRE (бит 9) — Запись байтов опций разрешена (после OPTKEYR).
  • LOCK (бит 7) — Блокировка FLASH_CR; снимается ключами FLASH_KEYR.
  • STRT (бит 6) — Запуск стирания.
  • OPTER (бит 5) — Стирание байтов опций.
  • OPTPG (бит 4) — Программирование байтов опций.
  • MER (бит 2) — Стирание всей флеш-памяти.
  • PER (бит 1) — Стирание страницы.
  • PG (бит 0) — Программирование.

FLASH_AR — адрес стираемой страницы

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

31302928272625242322212019181716
FAR
1514131211109876543210
FAR
  • FAR (биты 31:0) — Адрес страницы для стирания (бит PER).

FLASH_OBR — загруженные байты опций

Смещение 0x1C, адрес 0x4002 201C, 32 бит, после сброса 0xXXXX XX0X. В коде: FLASH->OBR.

31302928272625242322212019181716
DATA1DATA0
1514131211109876543210
BOOT_SELRAM_PARITY_CHECKVDDA_MONITORnBOOT1nBOOT0nRST_STDBYnRST_STOPIWDG_SW—RDPRT2RDPRT1OPTERR
  • DATA1 (биты 31:24) — Пользовательский байт Data1 из байтов опций.
  • DATA0 (биты 23:16) — Пользовательский байт Data0 из байтов опций.
  • BOOT_SEL (бит 15) — Загрузка по биту nBOOT0 вместо вывода BOOT0 (только у STM32F042, STM32F048, STM32F091, STM32F098).
  • RAM_PARITY_CHECK (бит 14) — Контроль чётности SRAM (0 — включён).
  • VDDA_MONITOR (бит 13) — Контроль напряжения VDDA.
  • nBOOT1 (бит 12) — Вместе с BOOT0 выбирает загрузку из SRAM или системной памяти.
  • nBOOT0 (бит 11) — Значение BOOT0 при BOOT_SEL = 0 (только у STM32F042, STM32F048, STM32F091, STM32F098).
  • nRST_STDBY (бит 10) — Сброс при входе в Standby (0) или нормальный вход.
  • nRST_STOP (бит 9) — Сброс при входе в Stop (0) или нормальный вход.
  • IWDG_SW (бит 8) — Сторож IWDG: программный (1) или аппаратный — включён после сброса (0).
  • RDPRT2 (бит 2) — Защита чтения уровня 2 активна.
  • RDPRT1 (бит 1) — Защита чтения уровня 1 активна.
  • OPTERR (бит 0) — Ошибка загрузки байтов опций.

FLASH_WRPR — защита страниц от записи

Смещение 0x20, адрес 0x4002 2020, 32 бит, после сброса 0xXXXX XXXX. В коде: FLASH->WRPR.

31302928272625242322212019181716
—
1514131211109876543210
WRP
  • WRP (биты 15:0) — Защита страниц от записи: по биту на группу страниц, 0 — защищено.

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

Как записать полуслово во флеш-память STM32F0?

Разблокируйте: FLASH->KEYR = 0x45670123; FLASH->KEYR = 0xCDEF89AB. Затем FLASH->CR |= FLASH_CR_PG; *(volatile uint16_t *)addr = data; дождитесь сброса BSY, проверьте EOP и сбросьте PG. Ячейка должна быть стёрта (0xFFFF), иначе флаг PGERR.

Источники

  1. STMicroelectronics. RM0091: Reference manual (Rev 10) — раздел 3.5: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f0 v2.3.8: заголовки CMSIS stm32f031x6.h, stm32f038xx.h, stm32f042x6.h, stm32f048xx.h, stm32f051x8.h, stm32f058xx.h, stm32f071xb.h, stm32f072xb.h, stm32f078xx.h, stm32f091xc.h, stm32f098xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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