Chân GPIO là chân 'đầu vào / đầu ra cho mục đích chung'. Điều này theo mặc định chỉ cao hoặc thấp (mức điện áp, cao là điện áp cung cấp của bộ điều khiển vi mô, mức thấp thường là mặt đất hoặc 0V). Nhưng các mức 'cao' và 'thấp' thường được đưa ra dưới dạng điện áp như là một tỷ lệ của điện áp cung cấp. Vì vậy, bất cứ điều gì thường trên 66% điện áp cung cấp được coi là mức logic 'cao', có nghĩa là một số thiết bị điện áp thấp hơn có thể nói chuyện với các thiết bị điện áp cao miễn là các mức nằm trong mức được coi là 'cao'. Ví dụ, một bộ vi điều khiển công suất thấp hoặc máy thu GPS 1.8.72VV sẽ gặp khó khăn khi giao tiếp trực tiếp với vi điều khiển 5V bởi vì những gì thiết bị điện áp thấp thấy là 'cao' thì thiết bị điện áp cao hơn sẽ không nghĩ nó cao. Đây là để sử dụng GPIO làm chân đầu vào,
Đôi khi, bạn có thể sử dụng chân SINGLE cho các giá trị 'tương tự', bằng cách định cấu hình chân GPIO được sử dụng bởi các thiết bị khác trên bo mạch như bộ chuyển đổi 'tương tự sang số' (ADC). Chân được đặt thành một kênh trên ADC và giờ đây đóng vai trò là đầu vào cho ADC, không phải là chân GPIO bình thường. Sau đó, bạn có thể đặt ADC lấy mẫu và đọc giá trị thanh ghi kết quả của ADC cho các số như 0-1024 nếu độ phân giải 10 bit.
Như ai đó đã đề cập, một chân GPIO có thể được sử dụng trong phần mềm để tạo ra hiệu ứng của tín hiệu Điều chế độ rộng xung (PWM), thường ở tốc độ thấp để chuyển đổi GPIO. Hầu hết các bộ vi điều khiển đều có bộ tạo PWM chuyên dụng có thể được cấu hình để sử dụng chân GPIO làm chân đầu ra, và chúng rất nhanh và ổn định hơn nhiều so với sử dụng phần mềm để điều khiển GPIO để tạo tín hiệu PWM. PWM được sử dụng cho tín hiệu kiểu 'trung bình' hoặc '%' và cho phép bạn thực hiện những việc như đèn mờ và kiểm soát tốc độ của động cơ.
Các chân GPIO thường được sắp xếp theo nhóm, được gọi là Cổng. Trong các bộ điều khiển nhỏ, chúng có thể là kiến trúc 8 bit, do đó các cổng thường được nhóm thành nhiều 8 và các giá trị của chúng có thể được đọc cùng một lúc bằng cách đọc một "thanh ghi dữ liệu" đại diện cho các giá trị logic cao / thấp của chúng ghim. Tương tự, bạn có thể đặt các chân thành đầu ra và sau đó ghi 8 bit vào một thanh ghi dữ liệu và bộ điều khiển GPIO của bộ vi điều khiển sẽ đọc các giá trị thay đổi của thanh ghi và đẩy pin lên cao hoặc kéo pin xuống thấp tùy theo giá trị bạn vừa đặt.
Trong các bộ điều khiển mới hơn như ARM Cortex A8 và A9 như trong Raspberry Pi và BeagleBone, bộ điều khiển GPIO và các tùy chọn khác nhau của chúng rất phức tạp. Chúng sử dụng kiến trúc 32 bit, vì vậy hầu hết các chân GPIO được sắp xếp thành các khối 32 chân, ngay cả khi không thực sự có thể sử dụng được (một số có thể được dành riêng hoặc không được bật). BeagleBone (mà tôi đã làm việc trước đây) có một số tùy chọn thực sự tuyệt vời cho số lượng chân lớn và đôi khi bạn sẽ cần sử dụng công cụ 'pin mux', cho phép bạn thiết lập các chế độ đặc biệt của một số chân nhất định cho mọi thứ như PWM, thu xung, đầu ra hẹn giờ, đầu vào kênh analog (ADC) và thậm chí (trên BeagleBone dù sao) ánh xạ tới các bộ xử lý phụ công nghiệp có sẵn trên lõi ARM, nhưng được coi là bộ xử lý độc lập và cần ánh xạ pin riêng theo thứ tự được kết nối với thế giới bên ngoài.