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

Альтернативная функция вывода

Альтернативная функция — режим, в котором вывод микроконтроллера управляется не программой через регистр порта, а периферийным блоком: UART, SPI, таймером, I2C. Так один и тот же вывод может быть обычным входом-выходом или линией интерфейса.

Обновлено Редакция GAW

Альтернативная функция (alternate function, AF) — режим вывода микроконтроллера, в котором источником выходного сигнала служит не регистр данных порта, а выход периферийного блока: передатчик UART, тактовый сигнал SPI, канал таймера. Выводов меньше, чем сигналов всей периферии, поэтому каждый вывод может выполнять несколько функций, а программа выбирает нужную.

Как это устроено в STM32

У STM32F4 вывод переводится в режим альтернативной функции полем MODER = 10, а номер функции AF0–AF15 записывается в регистр AFRL (выводы 0–7) или AFRH (выводы 8–15). Какой номер у какого сигнала, указано в таблице альтернативных функций даташита. Тип выхода — двухтактный или открытый сток — и скорость настраиваются так же, как у обычного выхода.

У STM32F1 номеров функций нет: сигналы периферии подключены к фиксированным выводам, а выход периферии включается режимом «альтернативная функция» в поле CNF. Перенести группу сигналов на другие выводы можно ремапом — битами регистра AFIO_MAPR. Входы периферии у STM32F1 настраивают как обычные входы (RM0008, раздел 9.1.11).

Сигнал (STM32F1)Режим вывода
USART TX, SPI SCK и MOSI ведущего, выходы таймеровальтернативная функция, двухтактный
USART RX, SPI MISO ведущеговход без подтяжки или с подтяжкой вверх
I²C SCL и SDAальтернативная функция, открытый сток

Двунаправленные сигналы вроде SDA шины I²C настраиваются как выход альтернативной функции: входной триггер при этом продолжает работать и передаёт уровень линии в периферию. Выводы отладчика PA13 и PA14 после сброса тоже находятся в режиме альтернативной функции — это SWD. Регистры, режимы и примеры — в статье о GPIO STM32.

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

Как включить альтернативную функцию на STM32F4?

Перевести вывод в режим альтернативной функции (MODER = 10) и записать номер функции в AFRL для выводов 0–7 или в AFRH для выводов 8–15. Номер для каждого сигнала периферии берут из таблицы альтернативных функций в даташите конкретного микроконтроллера. Тип выхода, скорость и подтяжку настраивают так же, как для обычного выхода.

Чем альтернативные функции STM32F1 отличаются от STM32F4?

У STM32F1 номера функции нет: каждый сигнал периферии подключён к своему выводу, а выход периферии включают режимом «альтернативная функция» в CNF. Перенести сигналы на другие выводы можно только целыми группами — ремапом в регистре AFIO_MAPR. Входы периферии у STM32F1 настраивают как обычные входы.

Какой режим выбрать для выводов I2C и UART?

По RM0008 для STM32F1: USART TX, SPI SCK и MOSI ведущего, выходы таймеров — альтернативная функция, двухтактный выход; USART RX и SPI MISO ведущего — вход без подтяжки или с подтяжкой вверх; I2C SCL и SDA — альтернативная функция с открытым стоком.

Источники

  1. STMicroelectronics. RM0008: Reference manual STM32F101xx–STM32F107xx, Rev 21, 2021 — 9.1.4 — двунаправленные сигналы в режиме AF; 9.1.11 — настройка выводов для периферии (таблицы 22–33); 9.3 и 9.4.2 — ремап, регистр AFIO_MAPR
  2. STMicroelectronics. RM0090 Rev 22. Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — гл. 8 — режим альтернативной функции MODER = 10, номер функции в AFRL и AFRH

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