PIN-код 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, але вважаються незалежними процесорами і потребують власного штифтового відображення для того, щоб бути зв’язаним із зовнішнім світом.