Học MSP430 với Kit MSP430 LaunchPad -Bài 5: UART

UART (Universal Asynchronous Receive/Transmit) – Truyền nhận dữ liệu không đồng bộ . Đây là một trong những giao thức truyền thong phổ biến trong các dòng vi điều khiển .

Kết nối phần cứng cơ bản :

Cấu trúc khung truyền/nhận

-           Start bit : báo hiệu quá trình truyền dữ liệu

-           Data Bits : dữ liệu cần giao tiếp , có thể gồm 5,6,7,8,9 bit, nhưng thông thường hay để định dạng dữ liệu 8 bits (1 byte).

-          Parity bit : Bit kiểm tra chẵn lẻ , dùng khi muốn kiểm tra lỗi

-          Stop bit : gồm 1 hoặc 2 bit

-          IDLE : trạng thái nghỉ , phải ở mức cao

Chú ý :

-          UART : giao tiếp không đồng bộ , vì thế hai bên muốn giao tiếp với nhau cần quy định các đặc điểm tốc độ truyền , cấu trúc khung truyền .. giống nhau

-          Tốc độ truyền nhận dữ liệu của UART gọi là Baud Rate (tốc độ Baud) : Số bit truyền được trong 1s .Ví dụ Baud rate là 9600 : tức là truyền 9600 bit/1s

-          UART  có 2 đường truyền và nhận dữ liệu riêng biệt do đó nó có thể đồng thời vừa truyền, vừa nhận dữ liệu một lúc (truyền song công)

Bài thực hành : Truyền nhận dữ liệu giữa MSP430G2553  và  PC .

Kit LaunchPad chính là một cổng Com ảo , khi cắm vào thì máy tính nhận Kit LaunchPad là cổng Com.

Lưu ý : Kit MSP430 LaunchPad  chạy Baudrate  9600 , các bạn muốn giao tiếp giữa MSP và Máy tính với tốc độ cao hơn cần mạch chuyển đổi bên ngoài : PL2303 , FT232 …

P1.1 : Rx -  chân nhận dữ liệu

P1.2 : Tx -  chân truyền dữ liệu

Hai chân này đã được nối với hàng Jumper : TxD và RxD (màu vàng) như hình dưới

Để thực hiện giao tiếp được với máy tính cần có sự thay đổi về phần cứng của hàng Jumper

Với Kit Version 1.4 thực hiện cắm chéo ở hàng RxD , TxD

 

Với Kit Version 1.5 thực hiện cắm ngang hàng RxD , TxD

Kết nối Kit với máy tính , vào” Manage” của Computer ,

Lúc này máy tính nhận Kit LaunchPad là COM32

Tiếp theo phải có phần mền trên máy tính để thực hiện việc trao đổi dữ liệu với MSP430G2553 : Các bạn có thể tự viết dùng C# , C++ …Trong bài này mình dùng phần mền có sẵn “Hercules”  , các bạn có thể down tại đây  http://www.hw-group.com/products/hercules/index_en.html  . Sau khi cài đặt có giao diện như sau .

Bây giờ chúng ta đi vào phần lập trình.

Để tìm hiểu chi tiết các thanh ghi : Chương 15 “Universal Serial Communication Interface, UART Mode” tài liệu “MSP430x2xx Family User’s Guide” phần thanh ghi .

Đầu tiên chúng ta đi cấu hình Clock cho DCO 8Mhz và chọn nguồn Clock CPU (MCLK) chính là DCO 8Mhz

Cấu hình chân cho 2 Led trên Kit

Cấu hình UART :

Thanh ghi UCA0CTL0 : thanh ghi điều khiển truyền thong , cấu hình khung truyền cho UART (phần màu đỏ)

Các thanh ghi màu vàng dùng cấu hình tốc độ UART (Baudrate) . Bài này hướng dẫn cấu hình Baudrate thông qua bảng (không cần tính toán) . Chi tiết về bảng cấu hình phần 15.3.13 “ Typical Baud Rates and Errors” tài liệu “MSP430x2xx Family User’s Guide

 

Trong bài toán này chúng ta đã chọn Clock UART là 8Mhz (như cấu hình ở trên)  nếu muốn cấu hình  Baudrate là 9600 thì  UCBRx    : 52 (thập phân)  hay  0x34(Hexa)

                                   UCBRSx : 0  (UCBRS_0)

                                 UCBRFx : 1  (UCBRF_1 )

UCBRx (16 bit) được chia thành 2 thanh ghi 8 bit : UCA0BR0 (byte thấp)  và UCA0BR1(Byte cao)

UCBRx  = 52 = 0x0034   => UCA0BR1 = 0x00 = 0 ;       UCA0BR0 = 0x34  = 52

UCA0MCTL  = UCBRS_0 |  UCBRF_1 | UCOS16 ;

Thêm một ví dụ cho các bạn dễ hiểu :Clock UART vẫn là 8Mhz , nếu muốn cấu hình  Baudrate là 115200 thì  UCBRx    : 4  (thập phân)  hay  0x04(Hexa)

      UCBRSx : 5  (UCBRS_5)

      UCBRFx : 3  (UCBRF_3 )

UCBRx (16 bit) được chia thành 2 thanh ghi 8 bit : UCA0BR0 (byte thấp)  và UCA0BR1(Byte cao)

UCBRx  = 4 = 0x0004   => UCA0BR1 = 0x00 = 0 ;       UCA0BR0 = 0x04  = 4

UCA0MCTL  = UCBRS_5 |  UCBRF_3 | UCOS16 ;

UART có 2 thanh ghi UCA0TXBUF : bộ đệm truyền dữ liệu (8 bit)

                                    UAC0RXBUF : bộ đệm nhận dữ liệu  ( 8 bit)

Muốn truyền dữ liệu đi ta chỉ cần gán nó vào thanh ghi UCA0TXBUF

Ví dụ UCA0TXBUF = ‘a’;    // truyền ký tự a

          UCA0TXBUF =  5;      // truyền số 5

Hàm truyền dữ liệu (1 byte)

Chương trình chính truyền liên tục ký tự ‘a’ lên máy tính

Để nhận dữ liệu từ máy tính xuống ta dùng ngắt và lấy giá trị trong thanh ghi UCA0RXBUF

Sau khi lập trình xong download code xuống MSP430G2553 , mở phần mền Hercules và cài đặt thông số

Các thông số giữa MSP và Hercules phải giống nhau

Bài tập thực hành :

1.       Thay đổi  Baud rate của UART

2.       Viết hàm gửi một mảng ký lên máy tính

3.       Điều khiển bật tắt 2 Led từ trên máy tính

Good luck!

Dưới đây là  chuỗi các bài học MSP430:

Bài 1: Project đầu tiên

Bài 2: GPIO và Clock (Phần 1)

Bài 2: GPIO và Clock (Phần 2)

Bài 3: Ngắt ( Interrupt )

Bài 4: Timer/Counter

Bài 5: UART

Bài 6: ADC

http://mlab.vn/ (Phạm Xuân Lập - MLab)

Viết đánh giá

Họ và tên:


Đánh giá của bạn: Lưu ý: Không hỗ trợ HTML!

Bình chọn: Dở            Hay

Nhập mã bảo vệ: