STM32如何利用串列埠傳送接收資料?
我現在計劃利用STM32F103X的串列埠對迪文屏傳送及接收資料。
手中硬體:正點原子開發板(旗艦版),迪文屏(4.3寸),電腦
軟體:MCU程式下載:FLYMCU;串列埠助手:XCOM;迪文屏設定:DGUS TOOL V7.623
1、我先利用正點原子開發板向串列埠助手傳送資料:
(1)傳送單位元組
利用正點原子開發板自己程式就可以實現了。
點選「傳送」後,單字元「a」會傳送到開發板的MCU中,然後又重新傳送到XCOM中。但是有時候點選傳送後,字元「a」未重新發回來。
只有當主迴圈「while(1){}」中增加延時函數後,這種情況才消失。見下圖
分析原因:在主函數執行過程中,串列埠接收中斷,接收到的資料儲存到USART_RX_BUF[]中。但是由於主迴圈速度過快,中斷在「USART_SendData(USART1, USART_RX_BUF[t]);」之後的資料由於USART_RX_STA=0,導致資料無法從串列埠傳送出去了。
當把USART_RX_STA=0,刪除,則「USART_SendData(USART1, USART_RX_BUF[t]);」一直傳送原來串列埠接收到的資料。
(2)傳送字串
字串在傳送到開發板後,開發板接收,並重新傳送回來,此時XCOM接收到的字串有明顯丟失字元現象。此現象與第(1)步裡面的情況相似。
(3)利用串列埠中斷傳送迪文屏的「讀」「寫」命令。
當前遇到的2個問題:
問題1:在用串列埠助手傳送資料,如:5a a5 06 83 20 00 01 00 00。MCU接收資料時,串列埠助手並不是每次點選「傳送」都能夠返回值。
解決方法:因為掃描開發板傳送到串列埠助手的所有資料時發現,資料最後都會跟「0d」「0a」。所以是否有看不到的資料,第一次沒有采集完,導致第二次、第三次採集時資料位不再是順序採集,導致條件語句無法執行。所以增加if(RX_buf[0]==0x5a),當為資料開始時再採集。
問題2:
想用條件語句判斷, 從而更改status的值,如果是else if的話,執行完else if(status1),整個條件語句就執行完了,不會繼續執行。但是改動後,就可以繼續執行下一個條件語句,通過賦值語句,從而得到status=0;
當這裡面的賦值語句去掉後,最後的status0語句不再執行。這個原因是什麼?