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

Регистры EXTI STM32G0

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

EXTI STM32G0 отличается от EXTI STM32F0. Флагов по два на линию: RPR — по нарастающему фронту, FPR — по спадающему, оба сбрасываются записью 1. Порт для линий 0–15 выбирается в регистрах EXTI_EXTICR1–4 самого EXTI, а не в SYSCFG; на линию отведено 8 бит, код порта — 0 для A, 1 для B и далее (RM0444, раздел 13.5).

Линии 0–15 — выводы, 16 и выше — периферия: PVD, компараторы, RTC, TAMP, I2C, USART, LPUART, LPTIM, UCPD, USB. Прямые линии периферии не имеют выбора фронта и флагов в EXTI: прерывание идёт от самого блока, а маска в IMR после сброса для них установлена. Векторы в NVIC общие: EXTI0_1, EXTI2_3 и EXTI4_15.

Регистры второй группы линий у STM32G0B1/C1 стоят по смещениям 0x028–0x038, как в RM0444 Rev 6 (таблица 68) и в SVD ST (STM32G0B1.svd v1.8). В заголовке CMSIS cmsis-device-g0 v1.4.5 структура EXTI_TypeDef ставит RTSR2…FPR2 на 0x20–0x30 — обращение EXTI->RTSR2 попадает на 8 байт раньше. Страница показывает смещения и адреса по руководству; пока заголовок не исправлен, пишите в эти регистры по адресу, например *(volatile uint32_t *)(EXTI_BASE + 0x28).

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

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

РегистрСмещениеНазначениеПосле сброса
EXTI_RTSR10x00Срабатывание по нарастающему фронту, линии 0–310x0000 0000
EXTI_FTSR10x04Срабатывание по спадающему фронту, линии 0–310x0000 0000
EXTI_SWIER10x08Программное событие, линии 0–310x0000 0000
EXTI_RPR10x0CФлаги по нарастающему фронту, линии 0–310x0000 0000
EXTI_FPR10x10Флаги по спадающему фронту, линии 0–310x0000 0000
EXTI_RTSR20x28Срабатывание по нарастающему фронту, линии 32–360x0000 0000
EXTI_FTSR20x2CСрабатывание по спадающему фронту, линии 32–360x0000 0000
EXTI_SWIER20x30Программное событие, линии 32–360x0000 0000
EXTI_RPR20x34Флаги по нарастающему фронту, линии 32–360x0000 0000
EXTI_FPR20x38Флаги по спадающему фронту, линии 32–360x0000 0000
EXTI_EXTICR10x60Порты линий EXTI0–EXTI30x0000 0000
EXTI_EXTICR20x64Порты линий EXTI4–EXTI70x0000 0000
EXTI_EXTICR30x68Порты линий EXTI8–EXTI110x0000 0000
EXTI_EXTICR40x6CПорты линий EXTI12–EXTI150x0000 0000
EXTI_IMR10x80Маска прерываний, линии 0–310xFFF8 0000
EXTI_EMR10x84Маска событий, линии 0–310x0000 0000
EXTI_IMR20x90Маска прерываний, линии 32–360x0000 001B
EXTI_EMR20x94Маска событий, линии 32–360x0000 0000

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

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

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

EXTI->RTSR1 = 0x00000000;

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

Смещение 0x00, адрес 0x4002 1800, 32 бит, после сброса 0x0000 0000. В коде: EXTI->RTSR1.

31302928272625242322212019181716
—RT20—RT18RT17RT16
1514131211109876543210
RT15RT14RT13RT12RT11RT10RT9RT8RT7RT6RT5RT4RT3RT2RT1RT0
  • RT20 (бит 20) — Срабатывание линии 20 по нарастающему фронту (только у STM32G0B1, STM32G0C1).
  • RT18 (бит 18) — Срабатывание линии 18 по нарастающему фронту (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • RT17 (бит 17) — Срабатывание линии 17 по нарастающему фронту (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • RT0–RT16 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по нарастающему фронту.

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

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

31302928272625242322212019181716
—FT20—FT18FT17FT16
1514131211109876543210
FT15FT14FT13FT12FT11FT10FT9FT8FT7FT6FT5FT4FT3FT2FT1FT0
  • FT20 (бит 20) — Срабатывание линии 20 по спадающему фронту (только у STM32G0B1, STM32G0C1).
  • FT18 (бит 18) — Срабатывание линии 18 по спадающему фронту (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • FT17 (бит 17) — Срабатывание линии 17 по спадающему фронту (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • FT0–FT16 (по биту на каждый y, положение — на карте битов) — Срабатывание линии y по спадающему фронту.

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

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

31302928272625242322212019181716
—SWI20—SWI18SWI17SWI16
1514131211109876543210
SWI15SWI14SWI13SWI12SWI11SWI10SWI9SWI8SWI7SWI6SWI5SWI4SWI3SWI2SWI1SWI0
  • SWI20 (бит 20) — Программное событие на линии 20: запись 1 устанавливает флаг RPIF20 (только у STM32G0B1, STM32G0C1).
  • SWI18 (бит 18) — Программное событие на линии 18: запись 1 устанавливает флаг RPIF18 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • SWI17 (бит 17) — Программное событие на линии 17: запись 1 устанавливает флаг RPIF17 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • SWI0–SWI16 (по биту на каждый y, положение — на карте битов) — Программное событие на линии y: запись 1 устанавливает флаг RPIFy.
  • SWI1 (бит 1) — Программное событие на линии 1: запись 1 устанавливает флаг RPIF1.

EXTI_RPR1 — флаги по нарастающему фронту, линии 0–31

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

31302928272625242322212019181716
—RPIF20—RPIF18RPIF17RPIF16
1514131211109876543210
RPIF15RPIF14RPIF13RPIF12RPIF11RPIF10RPIF9RPIF8RPIF7RPIF6RPIF5RPIF4RPIF3RPIF2RPIF1RPIF0
  • RPIF20 (бит 20) — Флаг срабатывания линии 20 по нарастающему фронту; сбрасывается записью 1 (только у STM32G0B1, STM32G0C1).
  • RPIF18 (бит 18) — Флаг срабатывания линии 18 по нарастающему фронту; сбрасывается записью 1 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • RPIF17 (бит 17) — Флаг срабатывания линии 17 по нарастающему фронту; сбрасывается записью 1 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • RPIF0–RPIF16 (по биту на каждый y, положение — на карте битов) — Флаг срабатывания линии y по нарастающему фронту; сбрасывается записью 1.
  • RPIF1 (бит 1) — Флаг срабатывания линии 1 по нарастающему фронту; сбрасывается записью 1.

EXTI_FPR1 — флаги по спадающему фронту, линии 0–31

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

31302928272625242322212019181716
—FPIF20—FPIF18FPIF17FPIF16
1514131211109876543210
FPIF15FPIF14FPIF13FPIF12FPIF11FPIF10FPIF9FPIF8FPIF7FPIF6FPIF5FPIF4FPIF3FPIF2FPIF1FPIF0
  • FPIF20 (бит 20) — Флаг срабатывания линии 20 по спадающему фронту; сбрасывается записью 1 (только у STM32G0B1, STM32G0C1).
  • FPIF18 (бит 18) — Флаг срабатывания линии 18 по спадающему фронту; сбрасывается записью 1 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • FPIF17 (бит 17) — Флаг срабатывания линии 17 по спадающему фронту; сбрасывается записью 1 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • FPIF0–FPIF16 (по биту на каждый y, положение — на карте битов) — Флаг срабатывания линии y по спадающему фронту; сбрасывается записью 1.
  • FPIF1 (бит 1) — Флаг срабатывания линии 1 по спадающему фронту; сбрасывается записью 1.

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

Смещение 0x28, адрес 0x4002 1828, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32G0B1, STM32G0C1. В коде: EXTI->RTSR2.

Смещение — по справочному руководству и SVD ST (RM0444 Rev 6, table 68; STM32G0B1.svd v1.8). В заголовке CMSIS этот регистр стоит по смещению 0x20, и обращение EXTI->RTSR2 попадает не туда: пишите по адресу, пока ST не исправит заголовок.

31302928272625242322212019181716
—
1514131211109876543210
—RT34—
  • RT34 (бит 2) — Срабатывание линии 34 по нарастающему фронту.

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

Смещение 0x2C, адрес 0x4002 182C, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32G0B1, STM32G0C1. В коде: EXTI->FTSR2.

Смещение — по справочному руководству и SVD ST (RM0444 Rev 6, table 68; STM32G0B1.svd v1.8). В заголовке CMSIS этот регистр стоит по смещению 0x24, и обращение EXTI->FTSR2 попадает не туда: пишите по адресу, пока ST не исправит заголовок.

31302928272625242322212019181716
—
1514131211109876543210
—FT34—
  • FT34 (бит 2) — Срабатывание линии 34 по спадающему фронту.

EXTI_SWIER2 — программное событие, линии 32–36

Смещение 0x30, адрес 0x4002 1830, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32G0B1, STM32G0C1. В коде: EXTI->SWIER2.

Смещение — по справочному руководству и SVD ST (RM0444 Rev 6, table 68; STM32G0B1.svd v1.8). В заголовке CMSIS этот регистр стоит по смещению 0x28, и обращение EXTI->SWIER2 попадает не туда: пишите по адресу, пока ST не исправит заголовок.

31302928272625242322212019181716
—
1514131211109876543210
—SWI34—
  • SWI34 (бит 2) — Программное событие на линии 34: запись 1 устанавливает флаг RPIF34.

EXTI_RPR2 — флаги по нарастающему фронту, линии 32–36

Смещение 0x34, адрес 0x4002 1834, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32G0B1, STM32G0C1. В коде: EXTI->RPR2.

Смещение — по справочному руководству и SVD ST (RM0444 Rev 6, table 68; STM32G0B1.svd v1.8). В заголовке CMSIS этот регистр стоит по смещению 0x2C, и обращение EXTI->RPR2 попадает не туда: пишите по адресу, пока ST не исправит заголовок.

31302928272625242322212019181716
—
1514131211109876543210
—RPIF34—
  • RPIF34 (бит 2) — Флаг срабатывания линии 34 по нарастающему фронту; сбрасывается записью 1.

EXTI_FPR2 — флаги по спадающему фронту, линии 32–36

Смещение 0x38, адрес 0x4002 1838, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32G0B1, STM32G0C1. В коде: EXTI->FPR2.

Смещение — по справочному руководству и SVD ST (RM0444 Rev 6, table 68; STM32G0B1.svd v1.8). В заголовке CMSIS этот регистр стоит по смещению 0x30, и обращение EXTI->FPR2 попадает не туда: пишите по адресу, пока ST не исправит заголовок.

31302928272625242322212019181716
—
1514131211109876543210
—RPIF34—
  • RPIF34 (бит 2) — Флаг срабатывания линии 34 по спадающему фронту; сбрасывается записью 1 (в CMSIS поле названо RPIF34 — опечатка заголовка, по RM0444 это FPIF34).

EXTI_EXTICR1 — порты линий EXTI0–EXTI3

Смещение 0x60, адрес 0x4002 1860, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EXTICR[0].

31302928272625242322212019181716
—EXTI3—EXTI2
1514131211109876543210
—EXTI1—EXTI0
  • EXTI0–EXTI3 (по 3 бита на каждый y, положение — на карте битов) — Порт, вывод y которого подключён к линии EXTIy.
    EXTIyЗначение
    000Порт A
    001Порт B
    010Порт C
    011Порт D
    100Порт E
    101Порт F

EXTI_EXTICR2 — порты линий EXTI4–EXTI7

Смещение 0x64, адрес 0x4002 1864, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EXTICR[1].

31302928272625242322212019181716
—EXTI7—EXTI6
1514131211109876543210
—EXTI5—EXTI4
  • EXTI4–EXTI7 (по 3 бита на каждый y, положение — на карте битов) — Порт, вывод y которого подключён к линии EXTIy.
    EXTIyЗначение
    000Порт A
    001Порт B
    010Порт C
    011Порт D
    100Порт E
    101Порт F

EXTI_EXTICR3 — порты линий EXTI8–EXTI11

Смещение 0x68, адрес 0x4002 1868, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EXTICR[2].

31302928272625242322212019181716
—EXTI11—EXTI10
1514131211109876543210
—EXTI9—EXTI8
  • EXTI8–EXTI11 (по 3 бита на каждый y, положение — на карте битов) — Порт, вывод y которого подключён к линии EXTIy.
    EXTIyЗначение
    000Порт A
    001Порт B
    010Порт C
    011Порт D
    100Порт E
    101Порт F

EXTI_EXTICR4 — порты линий EXTI12–EXTI15

Смещение 0x6C, адрес 0x4002 186C, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EXTICR[3].

31302928272625242322212019181716
—EXTI15—EXTI14
1514131211109876543210
—EXTI13—EXTI12
  • EXTI12–EXTI15 (по 3 бита на каждый y, положение — на карте битов) — Порт, вывод y которого подключён к линии EXTIy.
    EXTIyЗначение
    000Порт A
    001Порт B
    010Порт C
    011Порт D
    100Порт E
    101Порт F

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

Смещение 0x80, адрес 0x4002 1880, 32 бит, после сброса 0xFFF8 0000. В коде: EXTI->IMR1.

31302928272625242322212019181716
IM31IM30IM29IM28IM27IM26IM25IM24IM23IM22IM21IM20IM19IM18IM17IM16
1514131211109876543210
IM15IM14IM13IM12IM11IM10IM9IM8IM7IM6IM5IM4IM3IM2IM1IM0
  • IM0–IM31 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y.
  • IM27 (бит 27) — Разрешение прерывания линии 27 (только у STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • IM26 (бит 26) — Разрешение прерывания линии 26 (только у STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • IM20–IM24 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y (только у STM32G0B1, STM32G0C1).
  • IM18 (бит 18) — Разрешение прерывания линии 18 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • IM17 (бит 17) — Разрешение прерывания линии 17 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).

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

Смещение 0x84, адрес 0x4002 1884, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EMR1.

31302928272625242322212019181716
EM31EM30EM29EM28EM27EM26EM25EM24EM23EM22EM21EM20EM19EM18EM17EM16
1514131211109876543210
EM15EM14EM13EM12EM11EM10EM9EM8EM7EM6EM5EM4EM3EM2EM1EM0
  • EM0–EM31 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y.
  • EM27 (бит 27) — Разрешение события линии 27 (только у STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • EM26 (бит 26) — Разрешение события линии 26 (только у STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • EM20–EM24 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y (только у STM32G0B1, STM32G0C1).
  • EM18 (бит 18) — Разрешение события линии 18 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).
  • EM17 (бит 17) — Разрешение события линии 17 (только у STM32G051, STM32G061, STM32G071, STM32G081, STM32G0B1, STM32G0C1).

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

Смещение 0x90, адрес 0x4002 1890, 32 бит, после сброса 0x0000 001B; регистр есть только у STM32G071, STM32G081, STM32G0B1, STM32G0C1. В коде: EXTI->IMR2.

31302928272625242322212019181716
—
1514131211109876543210
—IM36IM35IM34IM33IM32
  • IM34–IM36 (по биту на каждый y, положение — на карте битов) — Разрешение прерывания линии y (только у STM32G0B1, STM32G0C1).
  • IM33 (бит 1) — Разрешение прерывания линии 33.
  • IM32 (бит 0) — Разрешение прерывания линии 32.

EXTI_EMR2 — маска событий, линии 32–36

Смещение 0x94, адрес 0x4002 1894, 32 бит, после сброса 0x0000 0000; регистр есть только у STM32G071, STM32G081, STM32G0B1, STM32G0C1. В коде: EXTI->EMR2.

31302928272625242322212019181716
—
1514131211109876543210
—EM36EM35EM34EM33EM32
  • EM34–EM36 (по биту на каждый y, положение — на карте битов) — Разрешение события линии y (только у STM32G0B1, STM32G0C1).
  • EM33 (бит 1) — Разрешение события линии 33.
  • EM32 (бит 0) — Разрешение события линии 32.

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

Как сделать прерывание по нажатию кнопки на PC13 STM32G0?

EXTI->EXTICR[3] = (EXTI->EXTICR[3] & ~EXTI_EXTICR4_EXTI13) | (2U << EXTI_EXTICR4_EXTI13_Pos) — порт C. Затем FTSR1 бит 13, IMR1 бит 13, NVIC_EnableIRQ(EXTI4_15_IRQn). В обработчике сбросьте флаг: EXTI->FPR1 = EXTI_FPR1_FPIF13.

Почему обработчик EXTI вызывается снова и снова?

Не сброшен флаг. У STM32G0 их два регистра: спадающий фронт — FPR1, нарастающий — RPR1. Сбрасывайте записью 1 тот, что установлен.

Источники

  1. STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 13.5: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-g0 v1.4.5: заголовки CMSIS stm32g031xx.h, stm32g041xx.h, stm32g051xx.h, stm32g061xx.h, stm32g071xx.h, stm32g081xx.h, stm32g0b1xx.h, stm32g0c1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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