
Số lượng chân (pins) trên vi điều khiển thường bị giới hạn nhưng chúng có thể được lập trình linh hoạt để thực hiện nhiều chức năng khác nhau được gọi là General-Purpose Input/Output (GPIO). GPIO mang lại sự linh hoạt cao và tiện lợi trong thiết kế hệ thống. GPIO giúp vi điều khiển có thể đáp ứng nhu cầu của nhiều ứng dụng hệ thống nhúng khác nhau. Trong bài viết này, chipstack.vn sẽ tập trung phân tích giữa GPIO input pull up và pull down; GPIO output push-pull và open-drain.
Xem thêm: Hệ thống nhúng là gì?
Các chức năng mà một chân GPIO có thể thực hiện
Chân GPIO có thể được lập trình để thực hiện một trong bốn chức năng sau:
- Digital Input: Kiểm tra xem tín hiệu từ bên ngoài truyền vào chân đang ở mức cao (3.3V hoặc 5V) hay đang ở mức thấp (0V).
- Digital Output: Ngược lại với Digital Input, Digital Output xuất mức điện áp cao (3.3V hoặc 5V) hoặc xuất ra mức điện áp thấp (0V).
- Analog functions: Chuyển đổi giữa mức tín hiệu số và tín hiệu tương tự, như là đọc giá trị cảm biến hay điều chỉnh âm lượng.
- Alternate functions: PWM output, LCD driver, USART, SPI, PC và giao tiếp USB.
GPIO Speed
GPIO Speed mô tả tốc độ chuyển đổi tín hiệu giữa mức điện áp thấp (Logic 0) và mức điện áp cao (Logic 1) trên chân GPIO. Đây là yếu tố quan trọng quyết định tốc độ xử lý tín hiệu của vi điều khiển, ảnh hưởng đến:
- Tần số tín hiệu tối đa mà chân GPIO có thể tạo ra hoặc đáp ứng.
- Thời gian chuyển đổi tín hiệu (Rise Time/ Fall Time): Thời gian cần thiết để tín hiệu thay đổi từ mức thấp lên mức cao (hoặc ngược lại).

Nhiều vi điều khiển, như dòng STM32, cho phép cấu hình tốc độ GPIO với các mức như:
- Low Speed: Phù hợp cho các ứng dụng tiêu thụ năng lượng thấp hoặc các tín hiệu tốc độ thấp, như điều khiển LED.
- Medium Speed: Thường dùng cho giao tiếp với các thiết bị ngoại vi có tốc độ trung bình, như cảm biến hoặc giao tiếp UART ở mức tiêu chuẩn.
- High Speed: Dùng trong các ứng dụng yêu cầu xử lý tín hiệu nhanh hơn, như SPI tốc độ cao hoặc PWM.
- Very High Speed: Được sử dụng cho các tín hiệu tốc độ cực cao, như điều khiển màn hình LCD hoặc giao tiếp Ethernet.
GPIO Input: Pull up và Pull down

Khi chân GPIO được sử dụng ở chế độ Input, chân này thường có 3 trạng thái: High-voltage, Low-voltage, hoặc high impedance (thường được gọi là floating hoặc tri-stated). Chế độ pull up hoặc pull down được sử dụng để đảm bảo chân GPIO có thể đọc được High-voltage (Logic 1) hoặc Low-voltage (Logic 0).
Khi switch đóng, Input pin được kết nối đến đất (GND), khi đó input pin sẽ đọc được đây là mức thấp (Logic 0). Nhưng khi switch mở, do input pin không được kết nối đến đất (GND) hay nguồn (VCC) nên tín hiệu đọc được của Input pin có thể là mức cao (Logic 1) hoặc mức thấp (Logic 0), do đó dữ liệu đọc được sẽ không đáng tin cậy, hiện tượng này được gọi là Floating state.
Để khắc phục hiện tượng trên, ta có thể sử dụng Input pull up: Input pin được kết nối đến một nguồn VCC cùng một điện trở Pull up.
Khi switch đóng, Input pin được nối đến đất (GND), do đó sẽ đọc được mức thấp (Logic 0 – 0V). Khi Switch mở, Input pin sẽ luôn đọc được mức cao (Logic 1 – 5V). Điều này sẽ khắc phục được hiện tượng Floating state.
Trái ngược với Input pull up, Input pull down sẽ đọc được mức logic ngược lại với Input pull up.
Khi switch đóng, mức logic sẽ đọc được là 1 (5V). Khi switch mở mức logic 0 (0V) sẽ được input pin đọc được do kết nối trực tiếp đến đất (GND).
Xem thêm: Tổng quan kiến trúc ARM Cortex-M3
GPIO Output: Push-Pull và Open-Drain
Để xuất tín hiệu ra từ chân output: Ta có thể lựa chọn push-pull hoặc open-drain.
Chế độ push-pull: Chân GPIO có thể vừa cung cấp dòng điện (output), vừa hút dòng điện (input). Nói cách khác, khi chân ở chế độ này, nó có thể tạo ra mức điện áp cao (logic 1) hoặc thấp (logic 0).
Chế độ open-drain: Chân GPIO chỉ có thể hút dòng điện. Điều này có nghĩa là nó có thể tạo ra mức điện áp thấp (logic 0), nhưng khi cần tạo mức điện áp cao (logic 1), chân này sẽ không làm được mà phải nhờ một nguồn điện ngoài (thường là một điện trở pull up).
1. GPIO Output Push-pull
Chế độ push-pull sử dụng cặp P-Mos và N-mos, chỉ có một trong hai transistor được bật để xuất dòng điện (Logic 1) hoặc hút dòng điện (Logic 0).
Khi mức logic output là 1, transistor P-Mos được nối đến nguồn VCC nên sẽ bật, do đó sẽ xuất dòng điện ra qua Output pin.

Khi chân GPIO xuất ra logic 0, transistor nối với đất (ground) sẽ được bật lên. Khi đó, transistor này sẽ “hút” dòng điện từ mạch ngoài vào chân GPIO. Nói cách khác, khi chân ở mức logic 0, do đó mức logic ở Output pin sẽ là 0.
2. GPIO Output Open-drain
Cấu trúc của Open-drain: Chế độ này sử dụng một cặp transistor (CMOS hoặc NMOS) giống nhau, như hình 9.
Open-drain thường có 2 trạng thái: Mức thấp (logic 0) và Floating state (Logic 1).
Khi xuất mức 0, N-Mos được nối với GND nên sẽ hút dòng điện, do đó Output pin sẽ có mức logic là 0.
Khi xuất mức 1, chân GPIO sẽ không cung cấp dòng điện vì chân này không kết nối với nguồn điện hay đất, mà ở trạng thái “nổi” (floating). Do đó để có thể xuất ra mức 1, ta cần nối với một trở pull up và nguồn VCC.

GPIO open-drain được cấu hình để sử dụng trong I2C. GPIO open-drain trong I2C cho phép các chân SDA và SCL chỉ kéo tín hiệu xuống mức thấp (logic 0), còn mức cao (logic 1) được kéo lên nhờ các điện trở pull up. Điều này giúp nhiều thiết bị có thể chia sẻ tín hiệu mà không gây xung đột.
Một ứng dụng quan trọng của GPIO open-drain là ta có thể tạo ra mạch Wired-and hoặc Wired-or.


Giao thức I2C sử dụng Wired-and (ưu tiên mức thấp) hoặc Wired-or (ưu tiên mức cao) để cho phép nhiều Master hoạt động trên cùng một bus. Do đó tránh được hai thiết bị cùng ghi dữ liệu lên bus nhưng phát tín hiệu trái ngược nhau (một thiết bị ghi mức cao, một thiết bị ghi mức thấp), có thể dẫn đến xung đột hoặc hỏng thiết bị.
Analog functions

GPIO cũng có thể đảm nhận các chức năng liên quan đến tín hiệu tương tự (analog) trong các ứng dụng hệ thống nhúng. Các chức năng này bao gồm:
Analog Input (ADC – Analog to Digital Converter)
GPIO được cấu hình để đọc tín hiệu analog từ các cảm biến như nhiệt độ, ánh sáng, hay áp suất. Tín hiệu analog sau đó sẽ được chuyển đổi thành tín hiệu số để vi điều khiển xử lý.
Analog Output (DAC – Digital to Analog Converter):
GPIO có thể được cấu hình để xuất tín hiệu analog, như tạo tín hiệu âm thanh hoặc điều chỉnh độ sáng đèn LED. Quá trình này thường sử dụng DAC để chuyển đổi từ tín hiệu số sang tín hiệu tương tự.
Alternate Functions
Ngoài chức năng cơ bản là Input/Output, chân GPIO còn có thể thực hiện các chức năng thay thế, được gọi là Alternate Functions. Điều này cho phép vi điều khiển giao tiếp với các thiết bị ngoại vi và thực hiện các tác vụ phức tạp hơn. Một số ví dụ:
- PWM (Pulse Width Modulation):
GPIO được sử dụng để tạo tín hiệu PWM nhằm điều khiển động cơ, quạt, hoặc LED. - UART/USART:
Dùng để truyền và nhận dữ liệu qua giao tiếp nối tiếp. - SPI/I2C:
Cung cấp giao tiếp tốc độ cao với các thiết bị ngoại vi như cảm biến, màn hình, hoặc module nhớ. - USB:
GPIO có thể được cấu hình để giao tiếp với các thiết bị USB trong một số ứng dụng. - LCD Driver:
Trong các hệ thống hiển thị, GPIO hỗ trợ điều khiển màn hình LCD hoặc OLED.
Các chức năng thay thế này được chọn thông qua các thanh ghi cấu hình trong vi điều khiển. Việc chọn đúng chức năng rất quan trọng để đảm bảo hệ thống hoạt động hiệu quả.
Kết luận
GPIO là một ngoại vi linh hoạt trong vi điều khiển, cho phép thực hiện nhiều chức năng như đọc, xuất tín hiệu số, xử lý tín hiệu tương tự (analog functions), và thực hiện các chức năng thay thế (alternate functions) như PWM, UART, SPI, hay điều khiển giao tiếp USB. Hiểu rõ các đặc điểm pull-up/pull-down để ổn định tín hiệu đầu vào, push-pull/open-drain để kiểm soát đầu ra, cùng khả năng tận dụng các chức năng analog và alternate function sẽ giúp bạn thiết kế hệ thống nhúng hiệu quả và tối ưu hơn. Đặc biệt, chế độ open-drain hỗ trợ giao thức I2C, đảm bảo giao tiếp an toàn và tránh xung đột trên cùng một bus.
Xem thêm: Xung Clock: Nhịp tim của Hệ thống nhúng