4. THIẾT KẾ VÀ THỰC HIỆN PHẦN MỀM
4.3 Phần mềm cho vi điều khiển
4.3.2 Giải thuật truyền và nhận UART
Khởi tạo UART2 của vi điều khiển STM32F4 với tốc độ baud là 9600bps, chiều dài 8- bit và một stop bit và cho phép ngắt nhận. Ngắt nhận UART được tạo ra khi bit RXNE trong thanh ghi USART_SR được bật lên 1.
Để thuận tiện cho việc truyền dữ liệu đến cho SIM900A, ta thực hiện một hàm để truyền một chuỗi các ký tự. Chuỗi ký tự được nhập vào dưới dạng mảng một chiều. Sử dụng một con trỏ để chỉ đến các ký tự. Con trỏ chuyển đến ký tự tiếp theo khi bit TC trong thanh ghi USART_SR bật lên 1, báo hiệu quá trình truyền ký tự đã hoàn thành. Hàm này như sau:
void puts(USART_TypeDef* USARTx, volatile char *s)
{
while(*s){
/* wait until data register is empty */ while( !(USARTx->SR & 0x00000040) ); USART_SendData(USARTx, *s);
*s++; }
}
Như đã trình bày ở phần lý thuyết, các hồi đáp của SIM900A có dạng
"<CR><LF><response><CR><LF>", nên để nhận được phần phản hồi ta sử dụng giải
thuật sau ở chương trình ngắt nhận UART.
Hình 4-8 Giải thuật ngắt UART
Y Y N
Luận văn tốt nghiệp GVHD: Th.S Trần Hoàng Quân
Khi thực hiện đọc trang Web có chứa các yêu cầu, SIM900A sẽ gởi về phản hồi về nội dung của trang đó dưới dạng mã HTML. Khi thiết kế trang này, ta đã sử dụng ký tự <#> để đánh dấu bắt đầu yêu cầu của một thiết bị và dấu <.> để đánh dấu kết thúc của yêu cầu. Để dễ dàng cho việc nhận biết yêu cầu của từng thiết bị, yêu cầu sẽ được lưu vào một mảng hai chiều. Từng dòng của mảng này sẽ tương ứng với các yêu cầu của các thiết bị khác nhau.
Để thực hiện việc này cần một chương trình ngắt nhận UART khác. Giải thuật như sau:
Hình 4-9 Giải thuật ngắt UART để đọc yêu cầu trạng thái thiết bị
Sử dụng một biến để vi điều khiển nhận biết lúc sử dụng chương trình ngắt bình thường và chương trình ngắt khi đọc yêu cầu.
54