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

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.

Источники

  1. 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] и далее
  2. 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

Нашли ошибку?