Регистры EXTI STM32G4
Регистры EXTI STM32G4: маска прерываний и событий, срабатывание по нарастающему и спадающему фронту, программный запуск и флаги для линий 0–31 и второго банка линий 32–43.
Линии EXTI0–EXTI15 — выводы, порт выбирается в SYSCFG_EXTICR; остальные — периферия: PVD, RTC, компараторы, мониторы PVM, а прямые линии (USB, I2C, USART, LPUART, LPTIM, UCPD) не имеют выбора фронта и будят микроконтроллер из Stop (RM0440, таблица 101).
Значение после сброса масок IMR1 и IMR2 руководство не даёт числом: «прямые линии — 1, остальные — 0, см. таблицу 101». Таблица 102 карты регистров печатает IMR1 = 0xFF82 0000, что с таблицей 101 не сходится, поэтому страница значение после сброса для IMR1 и IMR2 не показывает — прочитайте регистр на своём кристалле. Флаги в PR1 и PR2 сбрасываются записью 1.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| EXTI | 0x4001 0400 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| EXTI_IMR1 | 0x00 | Маска прерываний, линии 0–31 | — |
| EXTI_EMR1 | 0x04 | Маска событий, линии 0–31 | 0x0000 0000 |
| EXTI_RTSR1 | 0x08 | Срабатывание по нарастающему фронту, линии 0–31 | 0x0000 0000 |
| EXTI_FTSR1 | 0x0C | Срабатывание по спадающему фронту, линии 0–31 | 0x0000 0000 |
| EXTI_SWIER1 | 0x10 | Программное прерывание, линии 0–31 | 0x0000 0000 |
| EXTI_PR1 | 0x14 | Флаги срабатывания, линии 0–31 | 0x0000 0000 |
| EXTI_IMR2 | 0x20 | Маска прерываний, линии 32 и выше | — |
| EXTI_EMR2 | 0x24 | Маска событий, линии 32 и выше | 0x0000 0000 |
| EXTI_RTSR2 | 0x28 | Срабатывание по нарастающему фронту, линии 32 и выше | 0x0000 0000 |
| EXTI_FTSR2 | 0x2C | Срабатывание по спадающему фронту, линии 32 и выше | 0x0000 0000 |
| EXTI_SWIER2 | 0x30 | Программное прерывание, линии 32 и выше | 0x0000 0000 |
| EXTI_PR2 | 0x34 | Флаги срабатывания, линии 32 и выше | 0x0000 0000 |
Конструктор значения
Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.
Значение: 0x00000000
0000 0000 0000 0000 0000 0000 0000 0000
EXTI->IMR1 = 0x00000000;EXTI_IMR1 — маска прерываний, линии 0–31
Смещение 0x00, адрес 0x4001 0400, 32 бит. В коде: EXTI->IMR1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| IM31 | IM30 | IM29 | IM28 | IM27 | IM26 | IM25 | IM24 | IM23 | IM22 | IM21 | IM20 | IM19 | IM18 | IM17 | IM16 |
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| IM15 | IM14 | IM13 | IM12 | IM11 | IM10 | IM9 | IM8 | IM7 | IM6 | IM5 | IM4 | IM3 | IM2 | IM1 | IM0 |
- IM31 (бит 31) — Разрешение прерывания линии 31 (только у STM32G473, STM32G474, STM32G483, STM32G484).
- IM0–IM30 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y.
EXTI_EMR1 — маска событий, линии 0–31
Смещение 0x04, адрес 0x4001 0404, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EMR1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| EM31 | EM30 | EM29 | EM28 | EM27 | EM26 | EM25 | EM24 | EM23 | EM22 | EM21 | EM20 | EM19 | EM18 | EM17 | EM16 |
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| EM15 | EM14 | EM13 | EM12 | EM11 | EM10 | EM9 | EM8 | EM7 | EM6 | EM5 | EM4 | EM3 | EM2 | EM1 | EM0 |
- EM31 (бит 31) — Разрешение события линии 31 (только у STM32G473, STM32G474, STM32G483, STM32G484).
- EM0–EM30 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y.
EXTI_RTSR1 — срабатывание по нарастающему фронту, линии 0–31
Смещение 0x08, адрес 0x4001 0408, 32 бит, после сброса 0x0000 0000. В коде: EXTI->RTSR1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| RT31 | RT30 | RT29 | — | RT22 | RT21 | RT20 | RT19 | — | RT17 | RT16 | |||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RT15 | RT14 | RT13 | RT12 | RT11 | RT10 | RT9 | RT8 | RT7 | RT6 | RT5 | RT4 | RT3 | RT2 | RT1 | RT0 |
- RT31 (бит 31) — Срабатывание линии 31 по нарастающему фронту (только у STM32G473, STM32G474, STM32G483, STM32G484).
- RT0–RT30 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по нарастающему фронту.
EXTI_FTSR1 — срабатывание по спадающему фронту, линии 0–31
Смещение 0x0C, адрес 0x4001 040C, 32 бит, после сброса 0x0000 0000. В коде: EXTI->FTSR1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| FT31 | FT30 | FT29 | — | FT22 | FT21 | FT20 | FT19 | — | FT17 | FT16 | |||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| FT15 | FT14 | FT13 | FT12 | FT11 | FT10 | FT9 | FT8 | FT7 | FT6 | FT5 | FT4 | FT3 | FT2 | FT1 | FT0 |
- FT31 (бит 31) — Срабатывание линии 31 по спадающему фронту (только у STM32G473, STM32G474, STM32G483, STM32G484).
- FT0–FT30 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по спадающему фронту.
EXTI_SWIER1 — программное прерывание, линии 0–31
Смещение 0x10, адрес 0x4001 0410, 32 бит, после сброса 0x0000 0000. В коде: EXTI->SWIER1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| SWI31 | SWI30 | SWI29 | — | SWI22 | SWI21 | SWI20 | SWI19 | — | SWI17 | SWI16 | |||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SWI15 | SWI14 | SWI13 | SWI12 | SWI11 | SWI10 | SWI9 | SWI8 | SWI7 | SWI6 | SWI5 | SWI4 | SWI3 | SWI2 | SWI1 | SWI0 |
- SWI31 (бит 31) — Программный запуск линии 31: запись 1 устанавливает флаг в PR (только у STM32G473, STM32G474, STM32G483, STM32G484).
- SWI0–SWI30 (по биту на каждый y, положение — на карте битов) — Программный запуск линии y: запись 1 устанавливает флаг в PR.
- SWI1 (бит 1) — Программный запуск линии 1: запись 1 устанавливает флаг в PR.
EXTI_PR1 — флаги срабатывания, линии 0–31
Смещение 0x14, адрес 0x4001 0414, 32 бит, после сброса 0x0000 0000. В коде: EXTI->PR1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| PIF31 | PIF30 | PIF29 | — | PIF22 | PIF21 | PIF20 | PIF19 | — | PIF17 | PIF16 | |||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| PIF15 | PIF14 | PIF13 | PIF12 | PIF11 | PIF10 | PIF9 | PIF8 | PIF7 | PIF6 | PIF5 | PIF4 | PIF3 | PIF2 | PIF1 | PIF0 |
- PIF31 (бит 31) — Флаг срабатывания линии 31; сбрасывается записью 1 (только у STM32G473, STM32G474, STM32G483, STM32G484).
- PIF0–PIF30 (по биту на каждый y, положение — на карте битов) — Флаг срабатывания линии y; сбрасывается записью 1.
- PIF1 (бит 1) — Флаг срабатывания линии 1; сбрасывается записью 1.
EXTI_IMR2 — маска прерываний, линии 32 и выше
Смещение 0x20, адрес 0x4001 0420, 32 бит. В коде: EXTI->IMR2.
| 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 |
| — | IM42 | IM41 | IM40 | IM39 | IM38 | IM37 | IM36 | IM35 | IM34 | IM33 | IM32 | ||||
- IM42 (бит 10) — Разрешение прерывания линии 42 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- IM34–IM41 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y.
- IM35 (бит 3) — Разрешение прерывания линии 35 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484, STM32G491, STM32G4A1).
- IM33 (бит 1) — Разрешение прерывания линии 33 (только у STM32G473, STM32G474, STM32G483, STM32G484).
- IM32 (бит 0) — Разрешение прерывания линии 32 (только у STM32G473, STM32G474, STM32G483, STM32G484).
EXTI_EMR2 — маска событий, линии 32 и выше
Смещение 0x24, адрес 0x4001 0424, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EMR2.
| 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 |
| — | EM42 | EM41 | EM40 | EM39 | EM38 | EM37 | EM36 | EM35 | EM34 | EM33 | EM32 | ||||
- EM42 (бит 10) — Разрешение события линии 42 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- EM35 (бит 3) — Разрешение события линии 35 (только у STM32G471, STM32G473, STM32G474, STM32G483, STM32G484).
- EM34–EM41 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y.
- EM33 (бит 1) — Разрешение события линии 33 (только у STM32G473, STM32G474, STM32G483, STM32G484).
- EM32 (бит 0) — Разрешение события линии 32 (только у STM32G473, STM32G474, STM32G483, STM32G484).
EXTI_RTSR2 — срабатывание по нарастающему фронту, линии 32 и выше
Смещение 0x28, адрес 0x4001 0428, 32 бит, после сброса 0x0000 0000. В коде: EXTI->RTSR2.
| 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 |
| — | RT41 | RT40 | RT39 | RT38 | — | RT33 | RT32 | ||||||||
- RT38–RT41 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по нарастающему фронту.
- RT33 (бит 1) — Срабатывание линии 33 по нарастающему фронту (только у STM32G473, STM32G474, STM32G483, STM32G484).
- RT32 (бит 0) — Срабатывание линии 32 по нарастающему фронту (только у STM32G473, STM32G474, STM32G483, STM32G484).
EXTI_FTSR2 — срабатывание по спадающему фронту, линии 32 и выше
Смещение 0x2C, адрес 0x4001 042C, 32 бит, после сброса 0x0000 0000. В коде: EXTI->FTSR2.
| 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 |
| — | FT41 | FT40 | FT39 | FT38 | — | FT33 | FT32 | ||||||||
- FT38–FT41 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по спадающему фронту.
- FT33 (бит 1) — Срабатывание линии 33 по спадающему фронту (только у STM32G473, STM32G474, STM32G483, STM32G484).
- FT32 (бит 0) — Срабатывание линии 32 по спадающему фронту (только у STM32G473, STM32G474, STM32G483, STM32G484).
EXTI_SWIER2 — программное прерывание, линии 32 и выше
Смещение 0x30, адрес 0x4001 0430, 32 бит, после сброса 0x0000 0000. В коде: EXTI->SWIER2.
| 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 |
| — | SWI41 | SWI40 | SWI39 | SWI38 | — | SWI33 | SWI32 | ||||||||
- SWI38–SWI41 (по биту на каждый y, положение — на карте битов) — Программный запуск линии y: запись 1 устанавливает флаг в PR.
- SWI33 (бит 1) — Программный запуск линии 33: запись 1 устанавливает флаг в PR (только у STM32G473, STM32G474, STM32G483, STM32G484).
- SWI32 (бит 0) — Программный запуск линии 32: запись 1 устанавливает флаг в PR (только у STM32G473, STM32G474, STM32G483, STM32G484).
EXTI_PR2 — флаги срабатывания, линии 32 и выше
Смещение 0x34, адрес 0x4001 0434, 32 бит, после сброса 0x0000 0000. В коде: EXTI->PR2.
| 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 |
| — | PIF41 | PIF40 | PIF39 | PIF38 | — | PIF33 | PIF32 | ||||||||
- PIF38–PIF41 (по биту на каждый y, положение — на карте битов) — Флаг срабатывания линии y; сбрасывается записью 1.
- PIF33 (бит 1) — Флаг срабатывания линии 33; сбрасывается записью 1 (только у STM32G473, STM32G474, STM32G483, STM32G484).
- PIF32 (бит 0) — Флаг срабатывания линии 32; сбрасывается записью 1 (только у STM32G473, STM32G474, STM32G483, STM32G484).
Частые вопросы
Как разрешить прерывание от кнопки на PC13 STM32G474?
SYSCFG->EXTICR[3] = SYSCFG_EXTICR4_EXTI13_PC; EXTI->FTSR1 |= EXTI_FTSR1_FT13; EXTI->IMR1 |= EXTI_IMR1_IM13; NVIC_EnableIRQ(EXTI15_10_IRQn). В обработчике проверьте EXTI->PR1 & EXTI_PR1_PIF13 и сбросьте флаг записью 1.
Почему у линии I2C1 нет бита в RTSR1?
Это прямая линия: событие приходит от самого I2C, фронт выбирать не нужно. Достаточно разрешить её в IMR1 или EMR1, чтобы пробуждаться из Stop по адресу на шине.
Источники
- STMicroelectronics. RM0440: Reference manual (Rev 9) — раздел 15.5: описание регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-g4 v1.2.6: заголовки CMSIS stm32g431xx.h, stm32g441xx.h, stm32g471xx.h, stm32g473xx.h, stm32g474xx.h, stm32g483xx.h, stm32g484xx.h, stm32g491xx.h, stm32g4a1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры STM32G4
- Все регистры STM32G4Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_PLLCFGR, RCC_CIER, RCC_CIFR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_MEMRMP, SYSCFG_CFGR1, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4
- USART — последовательные порты USART и LPUARTUSART_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_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- АЦП — аналого-цифровые преобразователиADC_ISR, ADC_IER, ADC_CR, ADC_CFGR, ADC_CFGR2, ADC_SMPR1
- 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_APB1FZR1, DBGMCU_APB1FZR2, DBGMCU_APB2FZR
- PWR — управление питаниемPWR_CR1, PWR_CR2, PWR_CR3, PWR_CR4, PWR_SR1, PWR_SR2
- FLASH — флеш-памятьFLASH_ACR, FLASH_PDKEYR, FLASH_KEYR, FLASH_OPTKEYR, FLASH_SR, FLASH_CR
- RTC — часы реального времени и вмешательствоRTC_TR, RTC_DR, RTC_SSR, RTC_ICSR, RTC_PRER, RTC_WUTR
- ЦАП — цифро-аналоговые преобразователиDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
- CORDIC — сопроцессор тригонометрии CORDICCORDIC_CSR, CORDIC_WDATA, CORDIC_RDATA
- FMAC — фильтровый ускоритель FMACFMAC_X1BUFCFG, FMAC_X2BUFCFG, FMAC_YBUFCFG, FMAC_PARAM, FMAC_CR, FMAC_SR