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

Регистры EXTI STM32F3

Регистры EXTI STM32F3: маска прерываний и событий, срабатывание по нарастающему и спадающему фронту, программный запуск и флаги для линий 0–31 и второго банка линий 32–35.

Линии EXTI0–EXTI15 обслуживают выводы с тем же номером, порт выбирается в SYSCFG_EXTICR. Остальные линии подключены к периферии: PVD, RTC, USB, компараторам, I2C и USART. Часть из них — прямые линии без выбора фронта: прерывание от самого блока, они просто будят микроконтроллер из Stop. Маска этих линий после сброса уже установлена: IMR1 = 0x1F80 0000, IMR2 = 0xFFFF FFFC (RM0316, раздел 14.3).

В заголовках CMSIS STM32F3 первый банк назван без номера — EXTI->IMR, EXTI->PR, — хотя в руководстве это EXTI_IMR1 и EXTI_PR1; поля называются MRx и TRx, как у STM32F1. Флаги в PR сбрасываются записью 1.

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

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

РегистрСмещениеНазначениеПосле сброса
EXTI_IMR10x00Маска прерываний, линии 0–310x1F80 0000
EXTI_EMR10x04Маска событий, линии 0–310x0000 0000
EXTI_RTSR10x08Срабатывание по нарастающему фронту, линии 0–310x0000 0000
EXTI_FTSR10x0CСрабатывание по спадающему фронту, линии 0–310x0000 0000
EXTI_SWIER10x10Программное прерывание, линии 0–310x0000 0000
EXTI_PR10x14Флаги срабатывания, линии 0–310x0000 0000
EXTI_IMR20x20Маска прерываний, линии 32 и выше0xFFFF FFFC
EXTI_EMR20x24Маска событий, линии 32 и выше0x0000 0000
EXTI_RTSR20x28Срабатывание по нарастающему фронту, линии 32 и выше0x0000 0000
EXTI_FTSR20x2CСрабатывание по спадающему фронту, линии 32 и выше0x0000 0000
EXTI_SWIER20x30Программное прерывание, линии 32 и выше0x0000 0000
EXTI_PR20x34Флаги срабатывания, линии 32 и выше0x0000 0000

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x1F800000

0001 1111 1000 0000 0000 0000 0000 0000

EXTI->IMR = 0x1F800000;

EXTI_IMR1 — маска прерываний, линии 0–31

Смещение 0x00, адрес 0x4001 0400, 32 бит, после сброса 0x1F80 0000. В коде: EXTI->IMR.

31302928272625242322212019181716
MR31MR30MR29MR28MR27MR26MR25MR24MR23MR22MR21MR20MR19MR18MR17MR16
1514131211109876543210
MR15MR14MR13MR12MR11MR10MR9MR8MR7MR6MR5MR4MR3MR2MR1MR0
  • MR21–MR31 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y (только у STM32F303xC/xE, STM32F358, STM32F398).
  • MR0–MR30 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y.
  • MR27 (бит 27) — Разрешение прерывания линии 27 (только у STM32F303xE, STM32F398).
  • MR18 (бит 18) — Разрешение прерывания линии 18 (только у STM32F303xC/xE).

EXTI_EMR1 — маска событий, линии 0–31

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

31302928272625242322212019181716
MR31MR30MR29MR28MR27MR26MR25MR24MR23MR22MR21MR20MR19MR18MR17MR16
1514131211109876543210
MR15MR14MR13MR12MR11MR10MR9MR8MR7MR6MR5MR4MR3MR2MR1MR0
  • MR21–MR31 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y (только у STM32F303xC/xE, STM32F358, STM32F398).
  • MR0–MR30 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y.
  • MR27 (бит 27) — Разрешение события линии 27 (только у STM32F303xE, STM32F398).
  • MR18 (бит 18) — Разрешение события линии 18 (только у STM32F303xC/xE).

EXTI_RTSR1 — срабатывание по нарастающему фронту, линии 0–31

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

31302928272625242322212019181716
TR31TR30TR29—TR22TR21TR20TR19TR18TR17TR16
1514131211109876543210
TR15TR14TR13TR12TR11TR10TR9TR8TR7TR6TR5TR4TR3TR2TR1TR0
  • TR21–TR31 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по нарастающему фронту (только у STM32F303xC/xE, STM32F358, STM32F398).
  • TR0–TR30 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по нарастающему фронту.
  • TR18 (бит 18) — Срабатывание линии 18 по нарастающему фронту (только у STM32F303xC/xE).

EXTI_FTSR1 — срабатывание по спадающему фронту, линии 0–31

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

31302928272625242322212019181716
TR31TR30TR29—TR22TR21TR20TR19TR18TR17TR16
1514131211109876543210
TR15TR14TR13TR12TR11TR10TR9TR8TR7TR6TR5TR4TR3TR2TR1TR0
  • TR21–TR31 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по спадающему фронту (только у STM32F303xC/xE, STM32F358, STM32F398).
  • TR0–TR30 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по спадающему фронту.
  • TR18 (бит 18) — Срабатывание линии 18 по спадающему фронту (только у STM32F303xC/xE).

EXTI_SWIER1 — программное прерывание, линии 0–31

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

31302928272625242322212019181716
SWIER31SWIER30SWIER29—SWIER22SWIER21SWIER20SWIER19SWIER18SWIER17SWIER16
1514131211109876543210
SWIER15SWIER14SWIER13SWIER12SWIER11SWIER10SWIER9SWIER8SWIER7SWIER6SWIER5SWIER4SWIER3SWIER2SWIER1SWIER0
  • SWIER21–SWIER31 (по биту на каждый y, положение — на карте битов) — Программный запуск линии y: запись 1 устанавливает флаг в PR (только у STM32F303xC/xE, STM32F358, STM32F398).
  • SWIER0–SWIER30 (по биту на каждый y, положение — на карте битов) — Программный запуск линии y: запись 1 устанавливает флаг в PR.
  • SWIER18 (бит 18) — Программный запуск линии 18: запись 1 устанавливает флаг в PR (только у STM32F303xC/xE).
  • SWIER1 (бит 1) — Программный запуск линии 1: запись 1 устанавливает флаг в PR.

EXTI_PR1 — флаги срабатывания, линии 0–31

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

31302928272625242322212019181716
PR31PR30PR29—PR22PR21PR20PR19PR18PR17PR16
1514131211109876543210
PR15PR14PR13PR12PR11PR10PR9PR8PR7PR6PR5PR4PR3PR2PR1PR0
  • PR21–PR31 (по биту на каждый y, положение — на карте битов) — Флаг срабатывания линии y; сбрасывается записью 1 (только у STM32F303xC/xE, STM32F358, STM32F398).
  • PR0–PR30 (по биту на каждый y, положение — на карте битов) — Флаг срабатывания линии y; сбрасывается записью 1.
  • PR18 (бит 18) — Флаг срабатывания линии 18; сбрасывается записью 1 (только у STM32F303xC/xE).
  • PR1 (бит 1) — Флаг срабатывания линии 1; сбрасывается записью 1.

EXTI_IMR2 — маска прерываний, линии 32 и выше

Смещение 0x20, адрес 0x4001 0420, 32 бит, после сброса 0xFFFF FFFC. В коде: EXTI->IMR2.

31302928272625242322212019181716
—
1514131211109876543210
—MR35MR34MR33MR32
  • MR33–MR35 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y (только у STM32F303xC/xE, STM32F358, STM32F398).
  • MR32 (бит 0) — Разрешение прерывания линии 32.

EXTI_EMR2 — маска событий, линии 32 и выше

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

31302928272625242322212019181716
—
1514131211109876543210
—MR35MR34MR33MR32
  • MR33–MR35 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y (только у STM32F303xC/xE, STM32F358, STM32F398).
  • MR32 (бит 0) — Разрешение события линии 32.

EXTI_RTSR2 — срабатывание по нарастающему фронту, линии 32 и выше

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

31302928272625242322212019181716
—
1514131211109876543210
—TR33TR32
  • TR33 (бит 1) — Срабатывание линии 33 по нарастающему фронту (только у STM32F303xC/xE, STM32F358, STM32F398).
  • TR32 (бит 0) — Срабатывание линии 32 по нарастающему фронту.

EXTI_FTSR2 — срабатывание по спадающему фронту, линии 32 и выше

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

31302928272625242322212019181716
—
1514131211109876543210
—TR33TR32
  • TR33 (бит 1) — Срабатывание линии 33 по спадающему фронту (только у STM32F303xC/xE, STM32F358, STM32F398).
  • TR32 (бит 0) — Срабатывание линии 32 по спадающему фронту.

EXTI_SWIER2 — программное прерывание, линии 32 и выше

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

31302928272625242322212019181716
—
1514131211109876543210
—SWIER33SWIER32
  • SWIER33 (бит 1) — Программный запуск линии 33: запись 1 устанавливает флаг в PR (только у STM32F303xC/xE, STM32F358, STM32F398).
  • SWIER32 (бит 0) — Программный запуск линии 32: запись 1 устанавливает флаг в PR.

EXTI_PR2 — флаги срабатывания, линии 32 и выше

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

31302928272625242322212019181716
—
1514131211109876543210
—PR33PR32
  • PR33 (бит 1) — Флаг срабатывания линии 33; сбрасывается записью 1 (только у STM32F303xC/xE, STM32F358, STM32F398).
  • PR32 (бит 0) — Флаг срабатывания линии 32; сбрасывается записью 1.

Частые вопросы

Как разрешить прерывание от кнопки на PA0 STM32F303?

Порт A выбран по умолчанию (SYSCFG_EXTICR1 = 0). Установите EXTI->IMR |= EXTI_IMR_MR0 и FTSR0, разрешите EXTI0_IRQn в NVIC. В обработчике проверьте EXTI->PR & EXTI_PR_PR0 и сбросьте флаг записью 1.

Зачем нужны линии 32–35?

Это второй банк EXTI: линии 32 и 33 — выходы компараторов COMP6 и COMP7, 34 и 35 — прямые линии пробуждения от UART4 и UART5 (у STM32F303xB/xC/xD/xE, F358 и F398). Их маски и флаги — в регистрах IMR2, EMR2, RTSR2, FTSR2, SWIER2 и PR2.

Источники

  1. STMicroelectronics. RM0316: Reference manual (Rev 10) — раздел 14.3: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f3 v2.3.9: заголовки CMSIS stm32f303x8.h, stm32f303xc.h, stm32f303xe.h, stm32f328xx.h, stm32f358xx.h, stm32f398xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32F3

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