Tìm Hiểu Nguyên Lý UART – Giao Tiếp Nối Tiếp Trong Vi Điều Khiển

1. UART là gì?

UART (Universal Asynchronous Receiver – Transmitter) là chuẩn giao tiếp nối tiếp không đồng bộ, được sử dụng phổ biến trong các vi điều khiển như Arduino, ESP32, STM32, Raspberry Pi,…

Khác với giao tiếp song song, UART chỉ cần 2 dây tín hiệu chính:

  • TX (Transmit): truyền dữ liệu.
  • RX (Receive): nhận dữ liệu.

👉 Nhờ sự đơn giản này, UART được dùng rộng rãi trong truyền thông giữa các module như: ESP32 ↔ PC, ESP32 ↔ Module SIM, Arduino ↔ GPS, v.v.

2. Nguyên lý hoạt động của UART

UART hoạt động dựa trên nguyên tắc truyền từng bit dữ liệu nối tiếp theo thời gian, không cần tín hiệu đồng hồ (clock).

🔹 Cấu trúc khung dữ liệu UART:

Một gói dữ liệu UART tiêu chuẩn gồm các phần:

| Start bit | 8 Data bits | Parity bit (tùy chọn) | Stop bit |

  • Start bit (1 bit): luôn ở mức thấp (0), báo hiệu bắt đầu truyền.
  • Data bits (5–8 bit): dữ liệu thực tế (thường là 8 bit).
  • Parity bit (1 bit): kiểm tra lỗi (chẵn/lẻ).
  • Stop bit (1 hoặc 2 bit): mức cao (1), báo hiệu kết thúc truyền.

🔹 Truyền dữ liệu

  • Thiết bị A gửi dữ liệu qua chân TX.
  • Thiết bị B nhận dữ liệu qua chân RX.
  • Hai thiết bị phải thiết lập cùng tốc độ truyền (baud rate).

Ví dụ baud rate phổ biến:

9600, 115200, 57600, 38400 bps (bit per second).

3. Sơ đồ kết nối UART giữa hai thiết bị

Thiết bị A (ESP32)      Thiết bị B (Module SIM A7680C)

       TX  —————->  RX

       RX  <—————-  TX

       GND —————— GND

⚠️ Lưu ý: TX của thiết bị này phải nối với RX của thiết bị kia.

4. Ưu điểm và hạn chế của UART

Ưu điểmHạn chế
Giao tiếp đơn giản, dễ triển khaiKhoảng cách truyền ngắn (dưới 5m)
Không cần tín hiệu clock đồng bộChỉ truyền được giữa 2 thiết bị
Dễ debug qua Serial MonitorTốc độ thấp hơn SPI hoặc USB

5. Ứng dụng thực tế của UART

  • Kết nối ESP32 ↔ PC qua cổng USB để lập trình hoặc debug.
  • Giao tiếp ESP32 ↔ DFPlayer Mini để phát nhạc MP3.
  • Truyền lệnh Arduino ↔ SIM 4G (AT Command).
  • Kết nối MCU ↔ GPS, cảm biến siêu âm, module WiFi.

6. Ví dụ minh họa UART với Arduino

// Gửi dữ liệu qua UART

void setup() {

  Serial.begin(9600); // Khởi tạo UART tốc độ 9600 bps

}

void loop() {

  Serial.println(“Hello UART!”); // Gửi dữ liệu ra cổng TX

  delay(1000);

}

Khi mở Serial Monitor, bạn sẽ thấy dữ liệu “Hello UART!” được in ra mỗi giây.

7. Các cổng UART trên ESP32

ESP32 có 3 UART độc lập:

  • UART0: dùng để lập trình (Serial, TX0/RX0)
  • UART1: dùng giao tiếp ngoại vi (TX1/RX1)
  • UART2: dùng cho module SIM, DFPlayer, v.v.

Bạn có thể dùng thư viện HardwareSerial để khai báo thêm UART:

HardwareSerial sim(1);

sim.begin(115200, SERIAL_8N1, RX1, TX1);

8. Kết luận

Giao tiếp UART là nền tảng trong các dự án IoT và nhúng, giúp các thiết bị truyền dữ liệu hiệu quả mà không cần phần cứng phức tạp.

Việc hiểu nguyên lý UART giúp bạn kết nối thành công ESP32, Arduino và các module ngoại vi khác một cách an toàn và chính xác.

Comments

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *