You are on page 1of 5

Hướng dẫn sử dụng thư viện UARTSTDIO

Author: Tùng NGÔ

HƯỚNG DẪN SỬ DỤNG THƯ VIỆN UARTSTDIO


1. Extern void UARTStidioConfig(uint32_t ui32Port, uint32_t ui32Baud, uint32_t ui32SrcClock)
a. Inputs:
 uint32_t ui32Port: Dùng UART port bao nhiêu, lưu ý giới hạn 0-2
 uint32_t ui32Baud: Tốc độ Baud
 uint32_t ui32SrcClock: Lấy xung clock cho UART, thường thì ta sẽ lấy xung clock hệ
thống đang hiện hành bằng lệnh SysCtlClockGet()
b. Output:
 Không có Output
c. Function:
 Cấu hình nhanh UART ban đầu
 Với chuẩn truyền 8 bit, no parity, 1 stop bit
 Hỗ trợ 2 chế độ Buffered và Unbuffered (bằng việc có khai báo predefined symbols
UART_BUFFERED hay không).
 Ở chế độ Buffered thì nó sẽ cấu hình ngắt khi truyền hết hoặc khi nhận được ký tự,
đồng thời cũng set Trigger Point là 1/8 cho cả TX và RX FIFO tức là khi sẽ nhảy vào ngắt
khi truyền hoặc nhận được 2 ký tự (FIFO tối đa là 16, lấy 16*1/8=2). Nó sẽ làm rỗng bộ
đệm FIFO, và kích hoạt chức năng ngắt
 Kích hoạt UART
d. Example:

void Config_UART(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
UARTStdioConfig(0,115200,SysCtlClockGet());
UARTClockSourceSet(UART0_BASE, UART_CLOCK_SYSTEM);
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
UARTEchoSet(false);
}

2. Extern void UARTprintf(const char *pcString,…)


a. Inputs:
 Chuỗi ký tự, nó hỗ trợ cho việc giá trị của các biến với các kiểu do mình quy định.
 Ví dụ: UARTprintf(“giá trị của x là: %d”,x)
 Các kiểu biến mà hàm hỗ trợ gồm:
o %c: ký tự
o %d hoặc %i số thập phân decimal
o %s chuỗi string
o %u số thấp phân không âm unsigned decimal
o %x hoặc %X số thập lục phân hexadecimal

1 Version 0.2
Hướng dẫn sử dụng thư viện UARTSTDIO
Author: Tùng NGÔ

o %p kiểu con trỏ pointer


 Ngoài ra còn hỗ trợ việc lấy bao nhiêu chữ số thập phân sau dấu phẩy, ví dụ
UARTprintf(“%3.2d”,x), giả sử x=10.54322 thì giá trị bên nhận nhận được là 010.54
b. Output:
 Không có output
c. Function:
 Có công dụng như hàm fprintf() thường gặp khi học C
 Có nhiệm vụ xuất chuỗi ký tự trong dấu “” và thay biến ở vị trí tương ứng.
 Ví dụ: gửi lệnh UARTprintf(“giá trị của x là: %d”,x), với x = 5 thì giá trị bên nhận nhận
được là giá trị của x là: 5

3. Extern void UARTvprintf(const char *pcString, va_list vaArgP)


a. Inputs:
 const char *pcString: Chuỗi ký tự
 va_list vaArgP: tập các kiểu dữ liệu
b. Output:
 Không có output
c. Function:
 Chức năng tương tự như hàm vpritnf() thường gặp trong C
 Là hàm truyền chính, nhưng được hàm UARTprintf() đóng gói sẵn rồi nên thường ít khi
sử dụng trực tiếp mà sử dụng thông qua hàm UARTpritnf() thôi. Vì khi gọi hàm
UARTprintf() nó sẽ lọc ra 2 tham số *pcString và vaArgP để truyền vào hàm
UARTvprintf()

4. Extern int UARTgets(char *pcBuff, uint32_t ui32Len)


a. Inputs:
 char *pcBuff: vị trí địa chỉ bắt đầu của buffer để lưu giá trị nhận được từ việc truyền
UART
 uint32_t ui32Len: độ dài buffer để lưu chuỗi kí tự (không bao gồm kí tự NULL 0)
b. Output:
 Kiểu trả về Int: trả về giá trị count – số lượng kí tự nhận được (không bao gồm kí tự
NULL 0)
c. Function:
 Chế độ Unbufferd: Lấy ký tự từ RX FIFO và gửi về pcBuff cho đến khi nhận được ký tự
kết thúc(CR, LF hoặc ESC). Lưu ý: Ở chế độ Unbuffered này thì nó sẽ giống như Echo,
tức là nó sẽ gửi lại những gì nó nhận được (đồng thời lưu vào trong Buffer). Để tắt chế
độ gửi lại thì vô dòng 749 tắt việc gửi lại //MAP_UARTCharPut(g_ui32Base, cChar);
 Chế độ Buffered: Lấy ký tự từ RX Buffer của thư viện và gửi về pcBuff. Lời khuyên là
nên gọi hàm UARTPeek() để tìm kiếm ký tự kết thúc, đảm bảo việc gửi hết những dữ
liệu vào pcBuff (giả sử Len > số lượng ký tự trong RX Buffer của thư viện)

2 Version 0.2
Hướng dẫn sử dụng thư viện UARTSTDIO
Author: Tùng NGÔ

 Lưu ý: các bạn nên sửa lại code thư viện 1 chút để tránh rơi vào vòng lặp vô hạn, ở chỗ
dòng 604 (Buffered) và 711 (Unbuffered), vì trong 1 số trường hợp, ký tự kết thúc của
chúng ta không phải là các dấu mà thư viện quy định (\r, \n, 0x1b) nên khi kiểm tra đến
đây nó không tìm thấy và cứ bị chạy vòng lặp. Ví dụ GUI của mình ký tự kết thúc mà nó
truyền đi là 0x0A thì mình sẽ thêm như thế này
if((cChar == '\r') || (cChar == '\n') || (cChar == 0x1b) || (cChar==0x0A))

5. Extern unsigned char UARTgetc(void)


a. Inputs:
 Không có input
b. Output:
 Kiểu trả về unsigned char: 1 ký tự trả về qua việc nhận UART
c. Function:
 Chế độ Unbufferd: Nhận 1 ký tự từ UART truyền về và trả về ký tự đó trong output
 Chế độ Buffered: Trả ký tự lấy từ RX Buffer của thư viện. Lời khuyên là nên gọi hàm
UARTRxAvail() để kiểm tra xem đã lấy hết các ký tự trong RX Buffer chưa.

6. Extern int UARTwrite(const char *pcBuf, uint32_t ui32Len)


a. Inputs:
 const char *pcBuf: chuỗi ký tự nhập vào hoặc địa chỉ của buffer chứa giá trị chuỗi ký tự
 uint32_t ui32Len: độ dài chuỗi ký tự cần truyền
b. Output:
 Kiểu trả về int: Trả về số lượng ký tự truyền đi
c. Function:
 Truyền chuỗi ký tự với độ dài Len
 Chế độ Unbuffered: Gửi UART từng ký tự từ pcBuff
 Chế độ Buffered: Lưu các ký tự trong pcBuff vào bộ TX Buffer của thư viện, sau đó mới
tiến hành gửi.
 Lưu ý rằng trong quá trình truyền, nếu gặp phải ký tự kết thúc thì việc truyền sẽ ngừng
lại

LƯU Ý: Các hàm phía sau chỉ dùng ở chế độ Buffered bằng cách khai báo predefined symbols là
UART_BUFFERED

7. Extern int UARTPeek(unsigned char ucChar)


a. Inputs:
 unsigned char ucChar: ký tự cần tìm kiếm
b. Output:
 Vị trí ký tự
 Nếu không tìm thấy thì trả về giá trị -1
c. Function:

3 Version 0.2
Hướng dẫn sử dụng thư viện UARTSTDIO
Author: Tùng NGÔ

 Tìm kiếm ký tự trong RX Buffer và trả về vị trí của nó, nếu ký tự không có thì sẽ trả về
giá trị -1

8. Extern void UARTFlushTx(bool bDiscard)


a. Inputs:
 bool bDiscard: true thì xóa, false thì không xóa, giữ lại để chờ truyền
b. Output:
 Không có
c. Function:
 Xóa nội dung trong TX Buffer nếu bDiscard là true

9. Extern void UARTFlushRx(void)


a. Inputs:
 Không có
b. Output:
 Không có
c. Function:
 Xóa nội dung đang có trong RX Buffer (hiện tại có nghĩa là không tính những ký tự mà
UARTgetc() chưa nhận được)

10. Extern int UARTRxBytesAvail(void)


a. Inputs:
 Không có
b. Output:
 Kiểu giá trị int: trả về số lượng ký tự
c. Function:
 Trả về số lượng ký tự đang có trong RX Buffer

11. Extern int UARTTxBytesFree(void)


a. Inputs:
 Không có
b. Output:
 Kiểu giá trị int: trả về số lượng ký tự
c. Function:
 Trả về số lượng vùng nhớ còn trống trong TX Buffer

12. Extern void UARTEchoSet(bool bEnable)


a. Inputs:
 bool bEnable: true kích hoạt chế độ Echo, false không kích hoạt
b. Outputs:
 Không có

4 Version 0.2
Hướng dẫn sử dụng thư viện UARTSTDIO
Author: Tùng NGÔ

c. Function:
 Kích hoạt chế độ Echo
 Chế độ Echo là chế độ gửi lại những ký tự vừa mới nhận về
 Điều kiện đi kèm để sử dụng chế độ Echo này là khai báo việc sử dụng hàm ngắt void
UARTStdioIntHandler(void)

13. Static void UARTStdioIntHandler(void)


a. Inputs:
 Không có
b. Output:
 Không có
c. Function:
 Cấu hình hàm ngắt để thực hiện chức năng đẩy dữ liệu từ TX Buffer và truyền vào trong
TX FIFO (nếu TX FIFO hiện còn trống), và nó sẽ đẩy dữ liệu từ RX FIFO cho RX Buffer.
 Đồng thời nếu chế độ Echo được kích hoạt thì nó sẽ tiến hành Echo (gửi lại những dữ
liệu mà nó vừa nhận được)
 Để sử dụng hàm tác vụ ngắt này, ta vào file tm4c123gh6pm_startup_ccs.c và chỉnh sửa
theo hướng dẫn sau:

5 Version 0.2

You might also like