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

Регистры 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 сбрасывают записью единицы.

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

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

РегистрСмещениеНазначениеПосле сброса
EXTI_IMR0x00Маска прерываний0x3F84 0000
EXTI_EMR0x04Маска событий0x0000 0000
EXTI_RTSR0x08Срабатывание по нарастающему фронту0x0000 0000
EXTI_FTSR0x0CСрабатывание по спадающему фронту0x0000 0000
EXTI_SWIER0x10Программное прерывание0x0000 0000
EXTI_PR0x14Флаги срабатывания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.

31302928272625242322212019181716
—IM29IM28—IM26IM25IM24IM23IM22IM21IM20IM19—IM17IM16
1514131211109876543210
IM15IM14IM13IM12IM11IM10IM9IM8IM7IM6IM5IM4IM3IM2IM1IM0
  • IM0–IM29 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y.
  • IM24 (бит 24) — Разрешение прерывания линии 24 (только у STM32L071, STM32L081).

EXTI_EMR — маска событий

Смещение 0x04, адрес 0x4001 0404, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EMR.

31302928272625242322212019181716
—EM29EM28—EM26EM25EM24EM23EM22EM21EM20EM19—EM17EM16
1514131211109876543210
EM15EM14EM13EM12EM11EM10EM9EM8EM7EM6EM5EM4EM3EM2EM1EM0
  • EM0–EM29 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y.
  • EM24 (бит 24) — Разрешение события линии 24 (только у STM32L071, STM32L081).

EXTI_RTSR — срабатывание по нарастающему фронту

Смещение 0x08, адрес 0x4001 0408, 32 бит, после сброса 0x0000 0000. В коде: EXTI->RTSR.

31302928272625242322212019181716
—RT22RT21RT20RT19—RT17RT16
1514131211109876543210
RT15RT14RT13RT12RT11RT10RT9RT8RT7RT6RT5RT4RT3RT2RT1RT0
  • RT0–RT22 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по нарастающему фронту.

EXTI_FTSR — срабатывание по спадающему фронту

Смещение 0x0C, адрес 0x4001 040C, 32 бит, после сброса 0x0000 0000. В коде: EXTI->FTSR.

31302928272625242322212019181716
—FT22FT21FT20FT19—FT17FT16
1514131211109876543210
FT15FT14FT13FT12FT11FT10FT9FT8FT7FT6FT5FT4FT3FT2FT1FT0
  • FT0–FT22 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по спадающему фронту.

EXTI_SWIER — программное прерывание

Смещение 0x10, адрес 0x4001 0410, 32 бит, после сброса 0x0000 0000. В коде: EXTI->SWIER.

31302928272625242322212019181716
—SWI22SWI21SWI20SWI19—SWI17SWI16
1514131211109876543210
SWI15SWI14SWI13SWI12SWI11SWI10SWI9SWI8SWI7SWI6SWI5SWI4SWI3SWI2SWI1SWI0
  • SWI0–SWI22 (по биту на каждый y, положение — на карте битов) — Программный запуск линии y: запись 1 устанавливает флаг в PR.
  • SWI1 (бит 1) — Программный запуск линии 1: запись 1 устанавливает флаг в PR.

EXTI_PR — флаги срабатывания

Смещение 0x14, адрес 0x4001 0414, 32 бит, после сброса 0x0000 0000. В коде: EXTI->PR.

31302928272625242322212019181716
—PIF22PIF21PIF20PIF19—PIF17PIF16
1514131211109876543210
PIF15PIF14PIF13PIF12PIF11PIF10PIF9PIF8PIF7PIF6PIF5PIF4PIF3PIF2PIF1PIF0
  • 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 у них нет — флаг сбрасывается в регистрах периферии.

Источники

  1. STMicroelectronics. RM0377: Reference manual (Rev 10) — раздел 12.5: описание регистров, назначение полей и значения после сброса
  2. 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

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