Tài liệu được viết cho MSP430G2553 module USCI,các chip khác có module khác mã như MSP430G2452 sẽ không sử dụng được thư viện đi kèm.
Trước hết trước khi bắt đầu các bạn nếu chưa có datasheet của dùng MSP430 thì có thể download tại đây : http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slaa559&fileType=pdf.
Lưu ý Datasheet vẫn luôn là tài liệu quan trọng nhất khi bạn tiếp cận bất cứ dòng vi điều khiển nào , nên việc thành thạo tiếng Anh và khả năng đọc Datasheet vẫn là quan trọng nhất. 1.Chuẩn giao tiếp UART
Có thể nói đây là một trong những giao tiếp phổ biến và dễ sử dụng nhất,dùng để truyền nhận dữ liệu giữa 2 hay nhiều thiết bị khác nhau không nhất thiết là vi điểu khiển.UART là chuẩn truyền thông không đồng bộ (nghĩa là 2 thiết bị giao tiếp với nhau cần phải biết được các thông số của khung truyền như tốc độ,độ dài khung,số bit stop,bit parity....).Khi muốn dùng giao tiếp UART thì chúng ta phải khai báo hàm khởi tạo giá trị cho các thanh ghi UART,cụ thể:
- Chọn các chân dùng UART(VĐK MSP430G2553 là P1.1 và P1.2) để ở chức năng giao tiếp ngoại vi,tùy vào thứ tự ưu tiên chúng ta chọn thanh ghi PxSEL và PxSEL2 cho phù hợp.
- Định dạng khung truyền dữ liệu,số bit stop,bit parity,số bit dữ liệu bằng thanh ghi UCA0CTL0
- Cài đặt nguồn cấp xung clk
- Định tần số giao tiếp(Chú ý là module trên kit Lauchpad chỉ hỗ trợ duy nhất tần số 9600,muốn dùng tần số khác các bạn buộc phải nối với module UART to Com bên ngoài.
- Set cờ cho phép ngắt nhận tín hiệu.
Một số chip MSP430 không có module UART,thường là các chip cũ dùng module truyền thông loại USI,để biết chi tiết các bạn nên đọc trực tiếp trong datasheet
2.Thiết lập giao thức UART
Như đã nói ở trên,trong bài này các bạn chưa cần hiểu rõ về chuẩn UART,chi tiết sẽ được trình bày cụ thể trong bài khác,mục đích là để tạo ra một công cụ hiển thị có sẵn giúp học các bài sau dễ dàng hơn.Vì vậy dưới đây mình đưa ra thư viện UART do mình viết,về cơ bản có sẵn hầu hết các kiểu truyền dữ liệu cần thiết.Ở đây mình giới thiệu giao tiêp giữa máy tình và Kit lauchpad
2.1.Thiết lập đường truyền
Việc thiết lập đường truyền gồm 2 bước:
B1.Kết nối Kit launchpad và Máy tính,các bạn nối jump cắm như hình.
Các bạn để ý chân RXD và TXD nối với cổng UART của máy tính,nên jump cắm phải cắm ngang,nối TXD-P1.2 , RXD-P1.1.
2.2.Thiết lập giao diện máy tính
Đầu tiên các bạn cần biết là cổng USB của máy tính thực chất là quá trình đánh địa chỉ và tạo cổng COM ảo cho các thiết bị giao tiếp USB,tất cả các thiết bị sẽ sử dụng chung giao tiếp USB nhưng sau đó sẽ được giải mã ra đúng giao tiếp thực của thiết bị.Do vậy các thiết bị cắm vảo cổng USB sẽ được cấp phát 1 địa chỉ cổng COM ảo nhất định.Kit Launchpad cũng vậy,tuy nhiêu mỗi Kit launchpad được đánh 1 địa chỉ,nên khi sử dụng UART lần đầu chúng ta cần tìm địa chỉ của nó,các lầnsau địa chỉ sẽ không thay đổi.
Trước tiên bạn Kích chuột phải vào biểu tượng My computer ->Manager ->Device Manager.
Tại đây bạn kich vào mục Port và xem cổng Com ảo được quy định cho Kit,như hình sau là COM3
2.3.Phần mềm truyền nhận UART qua máy tính
Mình sử dụng phần mềm Hercules,và thấy khá tiện và dễ sử dụng.Các bạn có thể Download tại đây,hoàn toàn miễn phí : Hercules
Bật phần mềm lên vào mục Serial.
Ví dụ các bạn có thể cài đặt cấu hình như trên,Cổng COM của KIT của mình là cổng COM3
3.Làm quen các hàm UART
Thư viện UART các bạn có thể download ở đây : UART.h
Thư viện math.h kèm theo dùng khi tính số thực trong UART, các phép toán nhanh chuyên dùng cho VĐK : Mymath.h
Việc sử dụng không có gì khó khăn cả.
- Đầu tiên khi muốn sử dụng chức năng UART ,các bạn phải khai báo hàm khởi tạo UART_Init(); ,để cài đặt chức năng cho module UART,chỉnh lại biến SMCLK_F cho đúng với tần số đang sử dụng,BAUDRATE đúng với tần số đồng bộ giữa 2 thiết bị.
- Khi muốn truyền dữ liệu từ máy tính các bạn dùng các hàm UART_Write...: truyền ký tự 8bit(Char),chuỗi(String),Số Integer không dấu(Int),Mã nhị phân(Reg),Số thực(Float) ;Đọc ký tự từ máy tính truyền xuống bằng UART_Read hoặc dùng ngắt UART_RX.
Dưới đây là đoạn code mẫu:
Kết quả chương trình:#include "msp430g2553.h"
#include "Library/UART.h"
/* Khai báo loại chip đang dùng
* Thư viện này chứa các khai báo tên #define cho địa
* chỉ các thanh ghi
*/
int abc=134;
float float1=14454.3486;
char temp;
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; //Stop Watchdog
BCSCTL1 = CALBC1_1MHZ; //2 thanh ghi cài đặt tần số hoạt động
DCOCTL = CALDCO_1MHZ; //Ở đây là 1 Mhz
P1DIR|=BIT0;
UART_Init();
UART_Write_Char(10); //Ký tự xuống dòng
UART_Write_Char('A'); //A
UART_Write_Char(10);
UART_Write_String("Chuong trinh test UART");
UART_Write_Char(10);
UART_Write_Reg("P1IN",P1IN); //0b00000010
UART_Write_Char(10);
UART_Write_Int(abc);
UART_Write_Char(10);
UART_Write_Float(float1,5);
UART_Write_Char(10);
abc=UART_Read_Char();
UART_Write_Char(abc);
__bis_SR_register(LPM0);
}
Download tất cả project tại đây: Project UART
Bài tiếp theo : Bài 4.(MSP430_Basic) Ngắt
bạn cho minh hỏi chút xíu là khi mà jumper thì cái náo cùng màu thì mình nối chung lại đúng không? Cám ơn bạn rất nhiều
ReplyDeleteKhông phải đâu bạn,các jump VCC Test Reset nối dọc,còn 2 jump kia nối ngang
Deletecám ơn bạn nhiều, mình làm được rồi
ReplyDeletecho mình hỏi cái hàm UART_Read_Char(); có luôn nhận dữ liệu từ máy tính không
ReplyDeletesao mình truyền được có 1 lần. lần sau truyền cái khác thì nó không nhận nữa
Không bạn ạ,bao h muốn nhận thì bạn phải gọi nó ra,nó chỉ nhận 1 ký tự rồi thoát khỏi hàm đấy về chương trình chính thôi
Deletemình đang test chương trình này của bạn trên kit msp430g2553 nhưng nó.chỉ nhận và truyền lại một số ký tự vd như 3,5,6,9...
Deletecác ký tự khác như 1,2,4,7,8 ...thì không nhận, và truyền lên lại máy tính được. cho mình hỏi lỗi này là gì? cám ơn
bạn đâu rồi ??
DeleteCái này mình quên không báo,mình làm cũng bị như vậy.Trước mình có đọc qua về vấn đề này,mình nhớ là nó gặp vấn đề ở bit parity,cài đặt của máy tính xuống khác msp430,nhưng mà quên chưa sửa lại.
Deleteok sửa lại parity thành "odd" là gửi được hết
DeleteHi anh! Em muốn giao tiếp với 2 uart thì sao ạ anh. Có cách nào làm được k. Vi ở chỗ em k có điều kiện chơi con dán 80 pin 2 uart
ReplyDeleteNếu thế thì em chỉ còn cách là dùng các IC chuyển kênh thôi,như kiểu 4052 chẳng hạn
ReplyDeleteAnh ơi cho em hỏi, có thư viện UART rồi, giờ mình muốn hiển thị lên LCD thì làm như thế nào
ReplyDeleteEm đọc thêm bài này nhé http://thuanbk55.blogspot.com/2014/05/giao-tiep-msp430-va-lcd16x2.html
ReplyDeleteEm muốn hiển thị lên lcd qua giao tiếp UART anh ạ
ReplyDelete