Вывод GPIO является выводом «общего назначения ввода / вывода». По умолчанию это только высокий или низкий уровень (уровень напряжения, высокий - напряжение питания микроконтроллера, низкий уровень - заземление или 0 В). Но уровни «высокий» и «низкий» обычно задаются как напряжения как пропорция напряжения питания. Таким образом, все, что обычно выше 66% от напряжения питания, считается логическим уровнем «высокого», что означает, что некоторые устройства с низким напряжением могут общаться с устройствами высокого напряжения, пока уровни находятся в пределах того, что считается «высоким». Например, у микроконтроллера с низким энергопотреблением 1,8–2,7 В или приемника GPS будут проблемы с подключением напрямую к микроконтроллеру с напряжением 5 В, потому что то, что низковольтное устройство считает «высоким», высоковольтное устройство вообще не будет считать, что оно высокое. Это для использования GPIO в качестве входного контакта,
Иногда вы можете использовать одиночный вывод для «аналоговых» значений, настроив вывод GPIO для использования другими встроенными устройствами, такими как аналого-цифровой преобразователь (АЦП). Вывод настроен на канал на АЦП, и теперь он служит входом для АЦП, а не обычным выводом GPIO. Затем вы можете настроить АЦП на выборку и прочитать значение регистра результата АЦП для чисел, таких как 0-1024, если это 10-битное разрешение.
Как кто-то упомянул, вывод GPIO может использоваться в программном обеспечении для получения эффекта сигнала ШИМ, обычно на низких скоростях для переключения GPIO. Большинство микроконтроллеров имеют выделенные генераторы ШИМ, которые можно настроить на использование вывода GPIO в качестве выходного вывода, и они очень быстрые и гораздо более стабильные, чем использование программного обеспечения для управления GPIO для генерации сигнала ШИМ. ШИМ используются для сигналов «среднего» или «%» стиля и позволяют вам делать такие вещи, как приглушенный свет и контролировать скорость двигателя.
Контакты GPIO обычно располагаются группами, называемыми портами. В небольших контроллерах это может быть 8-битная архитектура, поэтому порты часто группируются в лоты по 8, и их значения могут считываться одновременно, считывая «регистр данных», который представляет логические высокие / низкие значения этих штырьки. Точно так же вы можете установить выводы для вывода, а затем записать 8-битные данные в регистр данных, и контроллер GPIO микроконтроллеров будет считывать измененные значения регистра и выводить вывод на высокий уровень или выводить вывод на низкий уровень в зависимости от того, какое значение вы только что установили.
В новых контроллерах, таких как ARM Cortex A8 и A9, таких как Raspberry Pi и BeagleBone, их контроллеры GPIO и различные опции очень сложны. Они используют 32-разрядную архитектуру, поэтому большинство выводов GPIO расположены в 32-контактных блоках, даже если не все они фактически используются (некоторые могут быть выделены или не включены). BeagleBone (над которым я работал ранее) имеет несколько действительно замечательных опций для большого количества выводов, и иногда вам нужно будет использовать инструмент «pin mux», который позволяет вам устанавливать специальные режимы для определенных выводов для вещей. такие как ШИМ, захват импульсов, выходы таймера, входы аналогового канала (АЦП) и даже (в любом случае на BeagleBone) отображение на промышленные подпроцессоры, доступные на ядре ARM, но считаются независимыми процессорами и нуждаются в собственном отображении контактов для быть связанным с внешним миром.