Регистры 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).
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| EXTI | 0x4002 1800 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| EXTI_RTSR1 | 0x00 | Срабатывание по нарастающему фронту, линии 0–31 | 0x0000 0000 |
| EXTI_FTSR1 | 0x04 | Срабатывание по спадающему фронту, линии 0–31 | 0x0000 0000 |
| EXTI_SWIER1 | 0x08 | Программное событие, линии 0–31 | 0x0000 0000 |
| EXTI_RPR1 | 0x0C | Флаги по нарастающему фронту, линии 0–31 | 0x0000 0000 |
| EXTI_FPR1 | 0x10 | Флаги по спадающему фронту, линии 0–31 | 0x0000 0000 |
| EXTI_RTSR2 | 0x28 | Срабатывание по нарастающему фронту, линии 32–36 | 0x0000 0000 |
| EXTI_FTSR2 | 0x2C | Срабатывание по спадающему фронту, линии 32–36 | 0x0000 0000 |
| EXTI_SWIER2 | 0x30 | Программное событие, линии 32–36 | 0x0000 0000 |
| EXTI_RPR2 | 0x34 | Флаги по нарастающему фронту, линии 32–36 | 0x0000 0000 |
| EXTI_FPR2 | 0x38 | Флаги по спадающему фронту, линии 32–36 | 0x0000 0000 |
| EXTI_EXTICR1 | 0x60 | Порты линий EXTI0–EXTI3 | 0x0000 0000 |
| EXTI_EXTICR2 | 0x64 | Порты линий EXTI4–EXTI7 | 0x0000 0000 |
| EXTI_EXTICR3 | 0x68 | Порты линий EXTI8–EXTI11 | 0x0000 0000 |
| EXTI_EXTICR4 | 0x6C | Порты линий EXTI12–EXTI15 | 0x0000 0000 |
| EXTI_IMR1 | 0x80 | Маска прерываний, линии 0–31 | 0xFFF8 0000 |
| EXTI_EMR1 | 0x84 | Маска событий, линии 0–31 | 0x0000 0000 |
| EXTI_IMR2 | 0x90 | Маска прерываний, линии 32–36 | 0x0000 001B |
| EXTI_EMR2 | 0x94 | Маска событий, линии 32–36 | 0x0000 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | RT20 | — | RT18 | 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 |
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | FT20 | — | FT18 | 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 |
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | SWI20 | — | SWI18 | 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 |
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | RPIF20 | — | RPIF18 | RPIF17 | RPIF16 | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| RPIF15 | RPIF14 | RPIF13 | RPIF12 | RPIF11 | RPIF10 | RPIF9 | RPIF8 | RPIF7 | RPIF6 | RPIF5 | RPIF4 | RPIF3 | RPIF2 | RPIF1 | RPIF0 |
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | FPIF20 | — | FPIF18 | FPIF17 | FPIF16 | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| FPIF15 | FPIF14 | FPIF13 | FPIF12 | FPIF11 | FPIF10 | FPIF9 | FPIF8 | FPIF7 | FPIF6 | FPIF5 | FPIF4 | FPIF3 | FPIF2 | FPIF1 | FPIF0 |
- 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 не исправит заголовок.
| 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 |
| — | 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 не исправит заголовок.
| 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 |
| — | 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 не исправит заголовок.
| 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 |
| — | 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 не исправит заголовок.
| 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 |
| — | 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 не исправит заголовок.
| 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 |
| — | RPIF34 | — | |||||||||||||
- RPIF34 (бит 2) — Флаг срабатывания линии 34 по спадающему фронту; сбрасывается записью 1 (в CMSIS поле названо RPIF34 — опечатка заголовка, по RM0444 это FPIF34).
EXTI_EXTICR1 — порты линий EXTI0–EXTI3
Смещение 0x60, адрес 0x4002 1860, 32 бит, после сброса 0x0000 0000. В коде: EXTI->EXTICR[0].
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | EXTI3 | — | EXTI2 | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | 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].
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | EXTI7 | — | EXTI6 | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | 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].
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | EXTI11 | — | EXTI10 | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | 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].
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | EXTI15 | — | EXTI14 | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | 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.
| 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 |
- 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.
| 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 |
- 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.
| 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 |
| — | IM36 | IM35 | IM34 | IM33 | IM32 | ||||||||||
- 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.
| 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 |
| — | EM36 | EM35 | EM34 | EM33 | EM32 | ||||||||||
- 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 тот, что установлен.
Источники
- STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 13.5: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32G0Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_PLLCFGR, RCC_CRRCR, RCC_CIER
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_CFGR1, SYSCFG_CFGR2
- 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 — прямой доступ к памяти и DMAMUXDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- ADC — аналого-цифровой преобразователь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 — блок отладкиDBG_IDCODE, DBG_CR, DBG_APB_FZ1, DBG_APB_FZ2
- PWR — управление питаниемPWR_CR1, PWR_CR2, PWR_CR3, PWR_CR4, PWR_SR1, PWR_SR2
- FLASH — интерфейс флеш-памятиFLASH_ACR, FLASH_KEYR, FLASH_OPTKEYR, FLASH_SR, FLASH_CR, FLASH_ECCR
- RTC — часы реального времени и защита от вмешательстваRTC_TR, RTC_DR, RTC_SSR, RTC_ICSR, RTC_PRER, RTC_WUTR
- DAC — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2