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

GPIO (вывод общего назначения)

Почти каждый вывод микроконтроллера можно сделать входом или выходом и управлять им из программы — такой вывод называют GPIO. У него есть настройки: подтяжки, сила выхода, триггер Шмитта, а ещё он может переключаться на функции встроенной периферии.

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

GPIO (general-purpose input/output) — вывод микроконтроллера, которым управляет программа. Его можно сделать входом и читать уровень напряжения на нём или выходом и выставлять логический 0 или 1. У современного микроконтроллера таких выводов десятки: у RP2040 их 30, у ESP32-S3 — 45.

У каждого GPIO есть набор настроек:

НастройкаЗачемПример
Направлениевход или выход—
Подтяжка вверх или вниззадать уровень входа, когда к нему ничего не подключено50–80 кОм у RP2040, ~45 кОм у ESP32-S3
Сила выходасколько тока выход отдаёт без заметного падения уровня2–12 мА у RP2040, по умолчанию 20 мА у большинства выводов ESP32-S3
Триггер Шмиттаустойчивость входа к медленным и зашумлённым фронтамRP2040
Функцияподключить вывод к периферии — UART, SPI, ШИМF1–F9 у RP2040

Функции. Большинство выводов умеют не только работать как GPIO, но и передавать сигналы встроенной периферии. Выбор функции похож на альтернативные функции STM32 и AVR: у RP2040 каждому выводу назначается одна из девяти функций, а чтобы управлять выводом из программы, нужна функция SIO. У ESP32 сигналы периферии можно вывести почти на любой GPIO через матрицу GPIO.

Ограничения. На вход нельзя подавать напряжение выше допустимого: у RP2040 — не выше IOVDD + 0,5 В, у ESP32-S3 — VDD + 0,3 В. Выход ограничен по току, а у RP2040 ещё и суммарно: все выводы вместе отдают не больше 50 мА. Встроенные подтяжки слабые, для шин вроде I²C нужны внешние подтягивающие резисторы. Полные таблицы выводов — на страницах RP2040 и ESP32-S3.

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

Что такое GPIO?

General-purpose input/output — вывод общего назначения. Это вывод микроконтроллера, которым управляет программа: она может сделать его входом и читать уровень или выходом и выставлять 0 или 1. Большинство GPIO можно ещё и переключить на функцию встроенной периферии — UART, SPI, ШИМ.

Сколько тока может дать вывод GPIO?

Зависит от чипа и настройки. У RP2040 силу выхода выбирают из 2, 4, 8 и 12 мА, по умолчанию 4 мА, у большинства выводов ESP32-S3 по умолчанию — 20 мА. Кроме того, ограничен суммарный ток всех выводов: у RP2040 — 50 мА. Поэтому нагрузку больше нескольких миллиампер подключают через транзистор.

Зачем у GPIO подтягивающие резисторы?

Чтобы вход не «висел» в воздухе, когда к нему ничего не подключено или кнопка разомкнута. Встроенные подтяжки большого сопротивления — 50–80 кОм у RP2040 и около 45 кОм у ESP32-S3 — задают уровень по умолчанию; их включают программно.

Источники

  1. Raspberry Pi. RP2040 Datasheet (build 2025-02-20) — разд. 1.2 — 30 GPIO, 4 из них — входы АЦП; табл. 2 и 3 — каждому GPIO выбирается одна из функций F1–F9, для управления выводом из ядер нужна функция SIO (F5), а вход подключён всегда; табл. 614 — программируемые подтяжки, скорость нарастания, триггер Шмитта и сила выхода, по умолчанию 4 мА; табл. 615 — после сброса GPIO подтянуты вниз; табл. 622 — напряжение на выводе не выше IOVDD + 0,5 В; табл. 625 — сила выхода 2, 4, 8 или 12 мА, подтяжки 50–80 кОм, суммарный ток всех выводов от IOVDD — до 50 мА
  2. Espressif. ESP32-S3 Series Datasheet v2.2 — титул — 45 GPIO; разд. 2.3.1 — у каждого вывода пять функций IO MUX (F0–F4), часть сигналов идёт через матрицу GPIO, которая даёт выводу доступ почти к любому сигналу периферии; табл. 2-1, примечание 5 — сила выхода по умолчанию 20 мА, у GPIO17 и GPIO18 — 10 мА, у GPIO19 и GPIO20 — 40 мА; табл. 5-4 — подтяжки 45 кОм, VIH от 0,75 VDD до VDD + 0,3 В, VIL до 0,25 VDD

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