Регистры 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.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| FLASH | 0x4002 3C00 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| FLASH_ACR | 0x00 | Такты ожидания, предвыборка и кэши | 0x0000 0000 |
| FLASH_KEYR | 0x04 | Ключи разблокировки FLASH_CR | 0x0000 0000 |
| FLASH_OPTKEYR | 0x08 | Ключи разблокировки FLASH_OPTCR | 0x0000 0000 |
| FLASH_SR | 0x0C | Флаги состояния и ошибок | 0x0000 0000 |
| FLASH_CR | 0x10 | Стирание и программирование | 0x8000 0000 |
| FLASH_OPTCR | 0x14 | Байты опций: защита, BOR, сторож | STM32F405, STM32F407, STM32F415, STM32F417: 0x0FFF AAED (биты опций загружаются из флеш-памяти при сбросе); STM32F427, STM32F429, STM32F437, STM32F439: 0x0FFF AAED (биты опций загружаются из флеш-памяти при сбросе) |
| FLASH_OPTCR1 | 0x18 | Защита секторов банка 2 | 0x0FFF 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.
| 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 |
| — | DCRST | ICRST | DCEN | ICEN | PRFTEN | — | LATENCY | ||||||||
- DCRST (бит 12) — Сброс кэша данных (при выключенном кэше).
- ICRST (бит 11) — Сброс кэша команд (при выключенном кэше).
- DCEN (бит 10) — Кэш данных.
- ICEN (бит 9) — Кэш команд.
- PRFTEN (бит 8) — Предвыборка команд.
- LATENCY (биты 3:0) — Такты ожидания флеш-памяти: по частоте HCLK и напряжению питания (только у STM32F427, STM32F429, STM32F437, STM32F439).
LATENCY Значение Макрос CMSIS 0000 0 тактов ожидания FLASH_ACR_LATENCY_0WS 0001 1 такт ожидания FLASH_ACR_LATENCY_1WS 0010 2 такта ожидания FLASH_ACR_LATENCY_2WS 0011 3 такта ожидания FLASH_ACR_LATENCY_3WS 0100 4 такта ожидания FLASH_ACR_LATENCY_4WS 0101 5 тактов ожидания FLASH_ACR_LATENCY_5WS 0110 6 тактов ожидания FLASH_ACR_LATENCY_6WS 0111 7 тактов ожидания FLASH_ACR_LATENCY_7WS 1000 8 тактов ожидания FLASH_ACR_LATENCY_8WS 1001 9 тактов ожидания FLASH_ACR_LATENCY_9WS 1010 10 тактов ожидания FLASH_ACR_LATENCY_10WS 1011 11 тактов ожидания FLASH_ACR_LATENCY_11WS 1100 12 тактов ожидания FLASH_ACR_LATENCY_12WS 1101 13 тактов ожидания FLASH_ACR_LATENCY_13WS 1110 14 тактов ожидания FLASH_ACR_LATENCY_14WS 1111 15 тактов ожидания FLASH_ACR_LATENCY_15WS - LATENCY (биты 2:0) — Такты ожидания флеш-памяти: по частоте HCLK и напряжению питания (только у STM32F405, STM32F407, STM32F415, STM32F417).
LATENCY Значение Макрос CMSIS 000 0 тактов ожидания FLASH_ACR_LATENCY_0WS 001 1 такт ожидания FLASH_ACR_LATENCY_1WS 010 2 такта ожидания FLASH_ACR_LATENCY_2WS 011 3 такта ожидания FLASH_ACR_LATENCY_3WS 100 4 такта ожидания FLASH_ACR_LATENCY_4WS 101 5 тактов ожидания FLASH_ACR_LATENCY_5WS 110 6 тактов ожидания FLASH_ACR_LATENCY_6WS 111 7 тактов ожидания 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | BSY | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | RDERR | PGSERR | PGPERR | PGAERR | WRPERR | — | OPERR | EOP | |||||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| LOCK | — | ERRIE | EOPIE | — | STRT | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| MER2 | — | PSIZE | SNB | MER | SER | PG | |||||||||
- LOCK (бит 31) — Блокировка FLASH_CR; снимается ключами в KEYR.
- ERRIE (бит 25) — Прерывание по ошибке.
- EOPIE (бит 24) — Прерывание по окончании операции.
- STRT (бит 16) — Запуск стирания.
- MER2 (бит 15) — Стирание всех секторов банка 2 (только у STM32F427, STM32F429, STM32F437, STM32F439).
- PSIZE (биты 9:8) — Разрядность программирования; зависит от напряжения питания.
PSIZE Значение 00 8 бит 01 16 бит 10 32 бита 11 64 бита - 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| SPRMOD | DB1M | — | nWRP | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RDP | nRST_STDBY | nRST_STOP | WDG_SW | BFB2 | BOR_LEV | OPTSTRT | OPTLOCK | ||||||||
- 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) 11 BOR выключен: действует порог POR/PDR - OPTSTRT (бит 1) — Запуск записи байтов опций.
- OPTLOCK (бит 0) — Блокировка FLASH_OPTCR; снимается ключами в OPTKEYR.
FLASH_OPTCR1 — защита секторов банка 2
Смещение 0x18, адрес 0x4002 3C18, 32 бит, после сброса 0x0FFF 0000 (биты опций загружаются из флеш-памяти при сбросе). В коде: FLASH->OPTCR1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | nWRP | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
- 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 отключаются навсегда, байты опций больше не меняются. Этот уровень необратим — используйте его только для серийных изделий.
Источники
- STMicroelectronics. RM0090: Reference manual (Rev 22) — раздел 3.9: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32F4Блоки периферии и заголовки CMSIS
- RCC — сброс и тактированиеRCC_CR, RCC_PLLCFGR, RCC_CFGR, RCC_CIR, RCC_AHB1RSTR, RCC_AHB2RSTR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_MEMRMP, SYSCFG_PMC, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4
- EXTI — контроллер внешних прерываний и событийEXTI_IMR, EXTI_EMR, EXTI_RTSR, EXTI_FTSR, EXTI_SWIER, EXTI_PR
- USART — последовательные порты USART и UARTUSART_SR, USART_DR, USART_BRR, USART_CR1, USART_CR2, USART_CR3
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_DR, I2C_SR1
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- DMA — контроллеры прямого доступа к памятиDMA_LISR, DMA_HISR, DMA_LIFCR, DMA_HIFCR, DMA_SxCR, DMA_SxNDT
- ADC — аналого-цифровые преобразователиADC_SR, ADC_CR1, ADC_CR2, ADC_SMPR1, ADC_SMPR2, ADC_JOFR1
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — блок вычисления CRCCRC_DR, CRC_IDR, CRC_CR
- DBGMCU — регистры отладкиDBGMCU_IDCODE, DBGMCU_CR, DBGMCU_APB1_FZ, DBGMCU_APB2_FZ
- PWR — управление питаниемPWR_CR, PWR_CSR
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR
- DAC — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
- CAN — контроллер CAN (bxCAN)CAN_MCR, CAN_MSR, CAN_TSR, CAN_RF0R, CAN_RF1R, CAN_IER