Site icon TAPIT

Sơ lược lý thuyết về chức năng UART và một số thanh ghi trong chip STM32F103C8T6

UART – Universal asynchronous receiver transmitter là bộ truyền nhận nối tiếp bất đồng bộ. UART là một ngoại vi cơ bản trong chip STM32F103C8T6 thường được dùng trong các quá trình giao tiếp với các loại module như: Zigbee, Bluetooth, Wifi…

[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]

Dưới đây là khung truyền dữ liệu:

Khung truyền tín hiệu UART

Các khái niệm quan trọng trong chuẩn truyền thông UART:

Baudrate: Số bit truyền được trong 1s, ở truyền nhận không đồng bộ thì ở các bên truyền và nhận phải thống nhất Baudrate. Các thông số tốc độ Baudrate thường hay sử dụng dể giao tiếp với máy tính là 600,1200,2400,4800,9600,14400,19200,38400,56000,57600,115200.

Frame: Ngoài việc giống nhau của tốc độ baud 2 thiết bị truyền nhận thì khung truyền của bên cũng được cấu hình giống nhau. Khung truyền quy định số bit trong mỗi lần truyền, bit bắt đầu “Start bit”, các bit kết thúc (Stop bit), bit kiểm tra tính chẵn lẻ (Parity), ngoài ra số bit quy định trong một gói dữ liệu cũng được quy định bởi khung truyền. Có thể thấy, khung truyền đóng một vai trò rất quan trọng trong việc truyền thành công dữ liệu.

Start bit: Bit đầu tiên được truyền trong một frame, bit này có chức năng báo cho bên nhận rằng sắp có một gói dữ liệu truyền đến. Đường truyền UART luôn ở trạng thái cao mức “1” cho đến khi chip muốn truyền dữ liệu đi thì nó gởi bit start bằng cách kéo xuống mức “0”. Như vậy start bit giá trị điện áp 0V và phải bắt buộc có bit start trong khung truyền

Data: Data hay dữ liệu là thông tin mà chúng ta nhận được trong quá trình truyền và nhận. Data trong STM32 có quy định khung truyền là 8bit hoặc 9bit. Trong quá trình truyền UART, bit có trọng số thấp nhất (LSB – least significant bit – bên phải) sẽ được truyền trước và cuối cùng là bit có ảnh hưởng cao nhất (MSB – most significant bit – bên trái)

Parity bit: Parity dùng để kiểm tra dữ liệu truyền có đúng hay không. Có 2 loại Parity đó là Parity chẵn (even parity) và parity lẽ (odd parity). Parity chẵn nghĩa là số bit 1 trong trong data truyền cùng với bit Parity luôn là số chẵn, ngược lại nếu Parity lẽ nghĩa là số bit 1  trong data truyền cùng với bit Parity luôn là số lẽ. Bit Parity không phải là bit bắt buộc và vì thế chúng ta có thể loại bỏ bit này ra khỏi khung truyền.

Stop bits: Stop bits là một bit báo cáo để cho bộ truyền/nhận biết được gói dữ liệu đã được gởi xong. Stop bits là bit bắt buộc phải có trong khung truyền. Stop bits có thể là 1bit, 1.5bit, 2bit, 0.5bit tùy thuộc vào ứng dụng UART của người sử dụng.

** Một số thanh ghi quan trọng trong UART

  1. USART_SR – Status register:

     2. USART_DR – Data register: 

Thanh ghi này chứa Data nhận và Data truyền gồm 9bit. Và nó phụ thuộc vào trạng thái truyền hoặc nhận sẽ quyết định đó là data truyền hoặc data nhận.

      3. USART_BRR – Baud rate register:

Thanh ghi này chứa giá trị tốc độ baudrate được cài đặt. DIV_Mantissa[11:0] là thành phần trước dấu “,” và DIV_Freaction[3:0] là thành phần sau dấu phẩy của tốc độ baud được quy đổi theo bảng sau:

     4. USART_CRx – Control register:

    5. USART_GTPR – Guard time and prescaler register:

Thanh ghi này chúng ta chỉ quan tâm đến PSC[7:0] là những bit cho phép bộ chia clock trong UART từ clock hệ thống để từ đó chia tốc độ baud cho hợp lý.

Xem thêm: Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây.

Tapit R&D