Регистры EXTI STM32L0
Регистры EXTI STM32L0x1: маски прерываний и событий IMR и EMR, выбор фронта в RTSR и FTSR, программный запуск SWIER и флаги PR.
Линии 0–15 подключены к выводам портов, выбранных в SYSCFG_EXTICR. Остальные — к внутренним источникам (RM0377, таблица 54): PVD, будильнику, тамперу и таймеру пробуждения RTC, отказу LSE, компараторам, I2C1, I2C3, USART1, USART2, LPUART1 и LPTIM1. Линии 23–29 периферии с собственным тактом (I2C, USART, LPUART, LPTIM) — прямые: у них нет выбора фронта, и через них эти блоки будят микроконтроллер из Stop (RM0377, раздел 12.5).
Чтобы получить прерывание, линию размаскируют в IMR, выбирают фронт в RTSR и FTSR и разрешают прерывание в NVIC. На линии 0–15 у STM32L0 всего три вектора прерываний: линии 0–1, 2–3 и 4–15. Флаг в PR сбрасывают записью единицы.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| EXTI | 0x4001 0400 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| EXTI_IMR | 0x00 | Маска прерываний | 0x3F84 0000 |
| EXTI_EMR | 0x04 | Маска событий | 0x0000 0000 |
| EXTI_RTSR | 0x08 | Срабатывание по нарастающему фронту | 0x0000 0000 |
| EXTI_FTSR | 0x0C | Срабатывание по спадающему фронту | 0x0000 0000 |
| EXTI_SWIER | 0x10 | Программное прерывание | 0x0000 0000 |
| EXTI_PR | 0x14 | Флаги срабатывания | 0x0000 0000 |
Конструктор значения
Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.
Значение: 0x3F840000
0011 1111 1000 0100 0000 0000 0000 0000
EXTI->IMR = 0x3F840000;EXTI_IMR — маска прерываний
Смещение 0x00, адрес 0x4001 0400, 32 бит, после сброса 0x3F84 0000. В коде: EXTI->IMR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | IM29 | IM28 | — | IM26 | IM25 | IM24 | IM23 | IM22 | IM21 | IM20 | IM19 | — | 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 |
- IM0–IM29 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y.
- IM24 (бит 24) — Разрешение прерывания линии 24 (только у STM32L071, STM32L081).
EXTI_EMR — маска событий
Смещение 0x04, адрес 0x4001 0404, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EMR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | EM29 | EM28 | — | EM26 | EM25 | EM24 | EM23 | EM22 | EM21 | EM20 | EM19 | — | 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 |
- EM0–EM29 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y.
- EM24 (бит 24) — Разрешение события линии 24 (только у STM32L071, STM32L081).
EXTI_RTSR — срабатывание по нарастающему фронту
Смещение 0x08, адрес 0x4001 0408, 32 бит, после сброса 0x0000 0000. В коде: EXTI->RTSR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | 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 |
- RT0–RT22 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по нарастающему фронту.
EXTI_FTSR — срабатывание по спадающему фронту
Смещение 0x0C, адрес 0x4001 040C, 32 бит, после сброса 0x0000 0000. В коде: EXTI->FTSR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | 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 |
- FT0–FT22 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по спадающему фронту.
EXTI_SWIER — программное прерывание
Смещение 0x10, адрес 0x4001 0410, 32 бит, после сброса 0x0000 0000. В коде: EXTI->SWIER.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | 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 |
- SWI0–SWI22 (по биту на каждый y, положение — на карте битов) — Программный запуск линии y: запись 1 устанавливает флаг в PR.
- SWI1 (бит 1) — Программный запуск линии 1: запись 1 устанавливает флаг в PR.
EXTI_PR — флаги срабатывания
Смещение 0x14, адрес 0x4001 0414, 32 бит, после сброса 0x0000 0000. В коде: EXTI->PR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | 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 |
- PIF0–PIF22 (по биту на каждый y, положение — на карте битов) — Флаг срабатывания линии y; сбрасывается записью 1.
- PIF1 (бит 1) — Флаг срабатывания линии 1; сбрасывается записью 1.
Частые вопросы
Какой обработчик вызывается для линии EXTI5 у STM32L0?
EXTI4_15_IRQHandler: линии 4–15 делят один вектор. В обработчике проверьте биты EXTI->PR, чтобы понять, какая линия сработала, и сбросьте их записью единицы.
Почему у линии USART в RTSR нет бита?
Линии пробуждения от USART, LPUART, I2C и LPTIM прямые: событие приходит от самого блока уровнем, без выбора фронта, и флага в PR у них нет — флаг сбрасывается в регистрах периферии.
Источники
- STMicroelectronics. RM0377: Reference manual (Rev 10) — раздел 12.5: описание регистров, назначение полей и значения после сброса
- STMicroelectronics. cmsis-device-l0 v1.9.4: заголовки CMSIS stm32l011xx.h, stm32l021xx.h, stm32l031xx.h, stm32l041xx.h, stm32l051xx.h, stm32l071xx.h, stm32l081xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0
Нашли ошибку в регистрах?
Другие регистры STM32L0
- Все регистры STM32L0Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_CIER, RCC_CIFR, RCC_CICR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_CFGR1, SYSCFG_CFGR2, 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_CFGR1, ADC_CFGR2, ADC_SMPR
- 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
- DBG — поддержка отладкиDBGMCU_IDCODE, DBG_CR, DBG_APB1_FZ, DBG_APB2_FZ
- PWR — управление питаниемPWR_CR, PWR_CSR
- FLASH — интерфейс флеш-памяти и EEPROMFLASH_ACR, FLASH_PECR, FLASH_PDKEYR, FLASH_PEKEYR, FLASH_PRGKEYR, FLASH_OPTKEYR
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR