Регистры 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 КБ.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| FLASH | 0x4002 3C00 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| FLASH_ACR | 0x00 | Такты ожидания, ART-ускоритель и предвыборка | 0x0000 0000 |
| FLASH_KEYR | 0x04 | Ключ разблокировки флеш-памяти | 0x0000 0000 |
| FLASH_OPTKEYR | 0x08 | Ключ разблокировки байтов опций | 0x0000 0000 |
| FLASH_SR | 0x0C | Состояние и ошибки флеш-памяти | 0x0000 0000 |
| FLASH_CR | 0x10 | Запись и стирание секторов | 0x8000 0000 |
| FLASH_OPTCR | 0x14 | Байты опций: защита, BOR, сторожа и сброс в Stop/Standby | 0xC0FF AAFD (биты опций загружаются из флеш-памяти при выходе из сброса) |
| FLASH_OPTCR1 | 0x18 | Байты опций: адреса загрузки BOOT_ADD0 и BOOT_ADD1 | 0x0040 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.
| 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 |
| — | ARTRST | — | ARTEN | PRFTEN | — | LATENCY | |||||||||
- ARTRST (бит 11) — Сброс ART-ускорителя (при ARTEN = 0).
- ARTEN (бит 9) — ART-ускоритель: кеш инструкций флеш-памяти на шине AXI.
- PRFTEN (бит 8) — Предвыборка инструкций.
- LATENCY (биты 3:0) — Такты ожидания флеш-памяти по частоте HCLK и напряжению питания.
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
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.
| 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 |
| — | ERSERR | PGPERR | PGAERR | WRPERR | — | OPERR | EOP | ||||||||
- 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.
| 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 |
| — | PSIZE | — | SNB | MER | SER | PG | |||||||||
- LOCK (бит 31) — Флеш-память заблокирована (разблокировка — ключами FLASH_KEYR).
- ERRIE (бит 25) — Прерывание по ошибке.
- EOPIE (бит 24) — Прерывание по окончании операции.
- STRT (бит 16) — Запуск стирания.
- PSIZE (биты 9:8) — Разрядность записи: 8, 16, 32 или 64 бита (по напряжению питания).
PSIZE Значение 00 8 бит 01 16 бит 10 32 бита 11 64 бита - SNB (биты 6:3) — Номер стираемого сектора.
- MER (бит 2) — Стирание всей флеш-памяти.
- SER (бит 1) — Стирание сектора.
- PG (бит 0) — Режим записи.
FLASH_OPTCR — байты опций: защита, BOR, сторожа и сброс в Stop/Standby
Смещение 0x14, адрес 0x4002 3C14, 32 бит, после сброса 0xC0FF AAFD (биты опций загружаются из флеш-памяти при выходе из сброса). В коде: FLASH->OPTCR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| IWDG_STOP | IWDG_STDBY | — | nWRP | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RDP | nRST_STDBY | nRST_STOP | IWDG_SW | WWDG_SW | BOR_LEV | OPTSTRT | OPTLOCK | ||||||||
- 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) 11 BOR выключен: порог POR/PDR - OPTSTRT (бит 1) — Запуск записи байтов опций.
- OPTLOCK (бит 0) — Байты опций заблокированы (разблокировка — ключами FLASH_OPTKEYR).
FLASH_OPTCR1 — байты опций: адреса загрузки BOOT_ADD0 и BOOT_ADD1
Смещение 0x18, адрес 0x4002 3C18, 32 бит, после сброса 0x0040 0080 (адреса загрузки — во флеш-памяти через шину ITCM; биты опций загружаются из флеш-памяти при выходе из сброса). В коде: FLASH->OPTCR1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| BOOT_ADD1 | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 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. При включённом кеше данных учтите, что прочитанные ранее данные сектора могут остаться в кеше.
Источники
- STMicroelectronics. RM0385: Reference manual (Rev 9) — раздел 3.7: описание регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-f7 v1.2.10: заголовки CMSIS stm32f745xx.h, stm32f746xx.h, stm32f750xx.h, stm32f756xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры STM32F7
- Все регистры STM32F7Блоки периферии и заголовки 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_CR1, USART_CR2, USART_CR3, USART_BRR, USART_GTPR, USART_RTOR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_TIMINGR, I2C_TIMEOUTR
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- LPTIM — малопотребляющий таймерLPTIM_ISR, LPTIM_ICR, LPTIM_IER, LPTIM_CFGR, LPTIM_CR, LPTIM_CMP
- DMA — контроллеры прямого доступа к памятиDMA_LISR, DMA_HISR, DMA_LIFCR, DMA_HIFCR, DMA_SxCR, DMA_SxNDT
- АЦП — аналого-цифровые преобразователиADC_SR, ADC_CR1, ADC_CR2, ADC_SMPR1, ADC_SMPR2, ADC_JOFR1
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR, IWDG_WINR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — блок вычисления CRCCRC_DR, CRC_IDR, CRC_CR, CRC_INIT, CRC_POL
- DBGMCU — поддержка отладкиDBGMCU_IDCODE, DBGMCU_CR, DBGMCU_APB1_FZ, DBGMCU_APB2_FZ
- PWR — управление питаниемPWR_CR1, PWR_CSR1, PWR_CR2, PWR_CSR2
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR
- ЦАП — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
- CAN — контроллеры bxCANCAN_MCR, CAN_MSR, CAN_TSR, CAN_RF0R, CAN_RF1R, CAN_IER
Калькуляторы и статьи
- Такты ожидания флеш-памяти STM32LATENCY в FLASH_ACR по частоте и питанию, таблица и код
- Карта флеш-памяти STM32Секторы и страницы, адрес → сектор, что стирать, CubeProgrammer и HAL
- Flash и загрузчик STM32Страницы и секторы, BOOT0, системный загрузчик, AN3155, IAP, option bytes, RDP
- STM32F7Cortex-M7 до 216 МГц: F72x/F73x, F74x/F75x, F76x/F77x — линейки, память, загрузка и распиновки