GPIO pin เป็น 'อินพุต / เอาต์พุตสำหรับวัตถุประสงค์ทั่วไป' นี่คือโดยค่าเริ่มต้นเท่านั้นสูงหรือต่ำ (ระดับแรงดัน, กำลังสูงของแรงดันไฟฟ้าของไมโครคอนโทรลเลอร์, ต่ำมักจะเป็นดินหรือ 0V) แต่ระดับของ 'สูง' และ 'ต่ำ' มักจะได้รับเป็นแรงดันไฟฟ้าตามสัดส่วนของแรงดันไฟฟ้า ดังนั้นอะไรก็ตามที่มักจะสูงกว่า 66% ของแรงดันไฟฟ้าถือว่าเป็นระดับตรรกะ 'สูง' ซึ่งหมายความว่าอุปกรณ์แรงดันไฟฟ้าต่ำบางอย่างสามารถพูดคุยกับอุปกรณ์ไฟฟ้าแรงสูงได้ตราบใดที่ระดับนั้นอยู่ในระดับ 'สูง' ตัวอย่างเช่นคอนโทรลเลอร์ไมโครคอนโทรลเลอร์ 1.8-2.7V หรือตัวรับพลังงาน GPS จะมีปัญหาในการสื่อสารโดยตรงไปยังไมโครคอนโทรลเลอร์ 5V เนื่องจากอุปกรณ์แรงดันต่ำมองว่า 'สูง' อุปกรณ์ไฟฟ้าแรงสูงจะไม่คิดว่ามันจะสูง นี่คือการใช้ GPIO เป็นพินอินพุต
บางครั้งคุณสามารถใช้พิน SINGLE สำหรับค่า 'อะนาล็อก' โดยการกำหนดค่า GPIO พินที่จะใช้โดยอุปกรณ์ออนบอร์ดอื่นเช่นตัวแปลง 'อนาล็อกเป็นดิจิตอล' (ADC) หมุดถูกตั้งค่าเป็นช่องบน ADC และทำหน้าที่เป็นอินพุตไปยัง ADC ตอนนี้ไม่ใช่พิน GPIO ปกติ จากนั้นคุณสามารถตั้งค่า ADC เป็นตัวอย่างและอ่านค่าการลงทะเบียนผลลัพธ์ของ ADC สำหรับตัวเลขเช่น 0-1024 หากความละเอียด 10 บิต
ตามที่มีคนพูดถึงแล้ว GPIO pin สามารถใช้ในซอฟต์แวร์เพื่อให้ผลของสัญญาณการปรับความกว้างพัลส์ (PWM) โดยทั่วไปที่ความเร็วต่ำสำหรับการสลับ GPIO ไมโครคอนโทรลเลอร์ส่วนใหญ่มีเครื่องกำเนิดสัญญาณ PWM โดยเฉพาะซึ่งสามารถกำหนดค่าให้ใช้ GPIO pin เป็นเอาต์พุตพินได้และรวดเร็วและเสถียรกว่าการใช้ซอฟต์แวร์เพื่อควบคุม GPIO ในการสร้างสัญญาณ PWM PWM ใช้สำหรับสัญญาณลักษณะ 'เฉลี่ย' หรือ '%' และช่วยให้คุณทำสิ่งต่าง ๆ เช่นไฟสลัวและควบคุมความเร็วของมอเตอร์
โดยทั่วไปแล้วขา GPIO จะจัดเรียงเป็นกลุ่มเรียกว่าพอร์ต ในคอนโทรลเลอร์ขนาดเล็กอาจเป็นสถาปัตยกรรม 8 บิตดังนั้นพอร์ตต่างๆมักจะถูกจัดกลุ่มเป็น 8 และสามารถอ่านค่าทั้งหมดได้พร้อมกันโดยการอ่าน 'data register' ที่แทนค่าตรรกะสูง / ต่ำของพอร์ตเหล่านั้น หมุด คุณสามารถตั้งค่าพินเป็นเอาท์พุทแล้วเขียน 8 บิตลงใน data register และคอนโทรลเลอร์ไมโครคอนโทรลเลอร์ GPIO จะอ่านค่าที่เปลี่ยนแปลงของรีจิสเตอร์แล้วขับพินสูงหรือดึงพินต่ำตามค่าที่คุณตั้งไว้
ในคอนโทรลเลอร์รุ่นใหม่เช่น ARM Cortex A8 และ A9 เหมือนกับใน Raspberry Pi และ BeagleBone คอนโทรลเลอร์ GPIO และตัวเลือกต่าง ๆ นั้นซับซ้อนมาก พวกเขาใช้สถาปัตยกรรมแบบ 32 บิตดังนั้นพิน GPIO ส่วนใหญ่จึงถูกจัดเรียงไว้ในบล็อคแบบ 32 พินแม้ว่าจะไม่สามารถใช้งานได้จริงทั้งหมด BeagleBone (ที่ฉันเคยทำงานมาก่อน) มีตัวเลือกที่ยอดเยี่ยมมากสำหรับพินจำนวนมากและบางครั้งคุณจะต้องใช้เครื่องมือ 'pin mux' ซึ่งช่วยให้คุณตั้งโหมดพิเศษของพินบางอย่างสำหรับสิ่งต่าง ๆ เช่น PWM, การจับชีพจร, เอาต์พุตไทม์มิ่ง, อินพุตสัญญาณอนาล็อก (ADC), และแม้กระทั่ง (ใน BeagleBone ต่อไป) การแมปกับตัวประมวลผลย่อยทางอุตสาหกรรมที่มีอยู่บนแกน ARM แต่ถือว่าเป็นโปรเซสเซอร์อิสระและต้องการการทำแผนที่พินของตัวเอง ที่จะเชื่อมต่อกับโลกภายนอก