SYSCFG (system configuration controller)
Чтобы прерывание EXTI0 пришло от вывода PB0, а не PA0, в STM32 нужно настроить не GPIO и не EXTI, а третий блок — SYSCFG. Туда же собраны другие системные настройки, которые не принадлежат ни одной периферии.
Обновлено Редакция GAW
SYSCFG (system configuration controller) — периферийный блок STM32 с системными настройками, которые не относятся ни к одной конкретной периферии. По RM0385 (гл. 7) он в основном служит для ремапа областей памяти, выбора интерфейса Ethernet PHY и подключения внешних линий прерываний к выводам GPIO. У STM32H7 набор шире (RM0433, разд. 12.2).
Главные функции
- Выбор порта для EXTI. Регистры SYSCFG_EXTICR задают, с какого порта линия EXTI n берёт сигнал вывода n: PA0, PB0 или PC0 для EXTI0 и так далее.
- Ремап памяти и загрузка. SYSCFG_MEMRMP управляет ремапом областей памяти; у STM32F7 в нём есть и бит, который показывает, какой из опционных байтов BOOT_ADD0 или BOOT_ADD1 задал адрес загрузки.
- Ячейка компенсации ввода-вывода. По RM0385 по умолчанию выключена; при скорости выходов 50 или 100 МГц её рекомендуется включать, чтобы управлять фронтами и снизить шум по питанию. Работает при VDD 2,4–3,6 В, готовность — флаг READY.
- Интерфейс Ethernet PHY — MII или RMII.
- Режим Fm+ для выводов I²C (у STM32H7).
Дополнительно у STM32H7
Аналоговые ключи, сведения о защите чтения и обмене банков флеш-памяти, адреса загрузки, уровень BOR, поведение IWDG, сброс при входе в Stop и Standby. Здесь же бит ODEN регистра SYSCFG_PWRCR, которым включают повышенный уровень напряжения ядра VOS0 (RM0433, разд. 6.6.2).
Не забыть такт
SYSCFG — обычный блок на шине APB, и запись в него действует только после включения его такта в RCC. Пропущенный бит SYSCFGEN — частая причина того, что прерывание EXTI приходит не с того порта. Регистры блока — на странице регистров SYSCFG STM32F4, прерывания — в статье «Прерывания STM32».
Частые вопросы
Как выбрать порт для линии EXTI в STM32?
В регистрах SYSCFG_EXTICR1–4: для каждой линии EXTI0–EXTI15 там поле, в которое записывают номер порта — 0 для GPIOA, 1 для GPIOB и так далее. Линия n может принимать сигнал только с вывода n одного порта, поэтому PA0 и PB0 одновременно на прерывание не повесить. Предварительно включают такт SYSCFG в RCC.
Почему настройка SYSCFG не срабатывает?
Скорее всего, не включён такт самого SYSCFG. Это обычный периферийный блок на шине APB, и пока его бит в RCC не установлен, запись в его регистры не действует. Например, у STM32H7 для включения VOS0 через SYSCFG_PWRCR RM0433 прямо требует сначала установить SYSCFGEN в RCC_APB4ENR.
Есть ли SYSCFG в STM32F1?
Нет, у STM32F1 выбор порта для EXTI и ремап выводов выполняет блок AFIO. В STM32F0, F3, F4, F7, G0, G4, L0, L4 и H7 эти функции перенесли в SYSCFG, а ремап выводов заменили выбором альтернативной функции в самих GPIO.
Источники
- STMicroelectronics. RM0385: STM32F75xxx and STM32F74xxx advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — гл. 7: SYSCFG в основном служит для ремапа областей памяти, выбора интерфейса Ethernet PHY и подключения внешних линий прерываний к GPIO; разд. 7.1: ячейка компенсации ввода-вывода по умолчанию не используется; при скорости выходов 50 или 100 МГц её рекомендуется включать для управления фронтами и снижения шума по питанию; флаг READY; работает только при питании 2,4–3,6 В; разд. 7.2.1: SYSCFG_MEMRMP — в том числе какой из опционных байтов BOOT_ADD0 или BOOT_ADD1 задаёт адрес загрузки; SYSCFG_EXTICR1–4 — код порта для линии EXTIx: 0000 — PA[x], 0001 — PB[x] и далее
- STMicroelectronics. RM0433: STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm-based 32-bit MCUs. Reference manual, Rev 9 — разд. 12.2: функции SYSCFG STM32H7 — аналоговые ключи, режим I²C Fm+, выбор интерфейса Ethernet PHY, подключение внешних линий прерываний к GPIO, ячейка компенсации ввода-вывода, сведения о защите чтения и обмене банков флеш-памяти, последовательность и адреса загрузки, уровень BOR, состояние защищённых секторов и защиты записи, защищённая область DTCM, поведение IWDG, сброс при входе в Stop и Standby, безопасный режим; разд. 6.6.2 — VOS0 включают битом ODEN регистра SYSCFG_PWRCR, перед этим включив такт SYSCFG битом SYSCFGEN в RCC_APB4ENR
Нашли ошибку?
Смотрите также
- EXTI — внешние прерывания STM32Линии, которые превращают фронт на выводе в прерывание или событие
- Скорость выхода GPIOКрутизна фронтов вывода: MODE и OSPEEDR у STM32
- Режим загрузки STM32 (BOOT0, BOOT1)Выводы, выбирающие, откуда стартует STM32
- Скоростные режимы I²CРежимы шины I²C от 100 кбит/с до 5 Мбит/с и их требования к фронтам и ёмкости
- STM32F7Cortex-M7 до 216 МГц: F72x/F73x, F74x/F75x, F76x/F77x — линейки, память, загрузка и распиновки
- Прерывания STM32Векторы и IRQn, приоритеты и HAL, EXTI и общие векторы, флаги, события, примеры
- RCC (reset and clock control)Блок STM32, управляющий источниками тактов, делителями, включением периферии и сбросами