Альтернативная функция вывода
Альтернативная функция — режим, в котором вывод микроконтроллера управляется не программой через регистр порта, а периферийным блоком: 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 — альтернативная функция с открытым стоком.
Источники
- 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
- STMicroelectronics. RM0090 Rev 22. Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 — гл. 8 — режим альтернативной функции MODER = 10, номер функции в AFRL и AFRH
Нашли ошибку?