① 單片機串列通信程序調試原因
串口UART作為嵌入式應用和通訊領域中最常用的介面之一,介面協議雖然簡單,但在實際應用中不同設備之間的通訊也會存在各種小問題,下面對使用中各種常見的問題做下總結和梳理,可作為調試參考。串口可分為非同步串口(UART)和同步串口(USART),後者多出時鍾信號線用作通訊時信號同步。本偏僅介紹非同步串口。
一、串口通信常見問題
串口通信亂碼
串口通訊亂碼通常是指接收方接收到的數據不符合預期,出現此情況時需要考慮的因素通常包含以下幾個方面:
雙方設定的串口參數是否匹配,需檢查設置的:串口波特率、串口數據格式等參數。
串口通訊電壓不匹配,不同的串口設備接收可正常進行解碼的高低電平門限不同,如同樣是3.3V串口通訊,A設備低電平門限1.5V,B設備低電平門限1V。當實際串口電壓低電平只有1.5V時,B設備無法正常接收數據。又如:A設備為5V串口,B設備為3.3V串口,同樣有電壓不匹配的問題。
串口通訊實際工作波特率誤差較大,即:串口工作實際波特率和理論值偏差較大,因一些MCU和串口設備所用時鍾為了兼顧其他資源和應用需要,實際工作的串口速率和設定會有偏差。比如:標稱為9600bps時,實際工作在了10000bps(誤差超過4%),此時可能已經超出接收方的設計標准。
串口通訊信號質量差,如通訊時信號上升下降抖動嚴重,信號有過沖或者變化比較遲緩,此時檢查硬體上共地是否良好,以及線路上有無串接/並聯其他器件導致。
數據格式顯示問題,通常使用十六進制或ASCII碼格式居多,使用時需要區分。
串口無法發送
串口無法發送通常是指與此串口的TXD連接的對端設備RXD通道接收不到任何數據,總結如下:
使用儀器對TXD通道進行實際測量,觀察硬體波形,確定信號是否有輸出以及是否正常。(串口電壓、串口信號上升下降時間)
短接設備的TXD和RXD通道回環測試,看自收發是否可以成功。排除是自身設備異常還是對端異常。
確定應用軟體是否打開串口硬體流控,如當啟用RTS/CTS硬體流控後但實際該引腳並沒有連接或連接但不生效時,按照協議規定,CTS輸入無效則發送方暫停發送數據。
MCU軟體編碼問題或計算機端軟體工作異常。
串口無法接收
當串口接收不到任何數據的原因通常如下:
對端串口實際未能成功發送數據。
串口發送有效電壓不滿足晶元接收解碼要求。
MCU軟體編碼問題或計算機端軟體工作異常。
二、常用的排查小技巧
對於以上的常見串口調試問題,有以下幾個方法和技巧可供參考使用。
使用硬體儀器
善於使用示波器等硬體採集或分析工具查找問題,用此方法可以確定線路上信號的串口電壓、串口數據格式、串口通信波特率等參數。
串口Loopback檢測
當手頭沒有硬體儀器時,將設備自身的TXD和RXD短接起來進行自收發測試也是一個不錯的選擇,此方式可以簡單確認硬體通路和整個邏輯是否是打通的。但缺點是定位問題不夠精準。
更換串口調試軟體
計算機端串口軟體種類較多,不排除一些設備或驅動軟體沒法成功適配所有的串口調試軟體,此時可嘗試多使用幾款不同的軟體對比測試。
三、串口通信基礎
當兩個設備使用UART進行通信時,它們至少通過三根導線連接:TXD串口發送、RXD串口接收、GND。串口設備通過改變TXD信號線上的電壓來發送數據,接收端通過檢測RXD線上的電壓來讀取數據。
什麼是串口通信
計算機一次傳輸信息(數據)一位或多個比特位。串列是指傳輸數據一次只傳輸一位。當進行串口通信時發送或者接收的每個字(即位元組或字元)一次發送一位。每一位都是邏輯『1』或者『0』。也用Mark表示邏輯1,Space表示邏輯0。
串口數據速率使用 bits-per-second ("bps") 或者 baud rate ("baud")。這表示一秒內可以傳輸多少邏輯1和0。當波特率超過 1000,你會經常看到用Kbps表示的速率。對於超過 1000000 的速率一般用Mbps 來表示。
② 無論單片機輸出什麼,我的串口調試助手只會顯示00,請問這是怎麼回事
有可能是單片機發送的波特率太低。遠低於9600.
如果是使用的STC的單片機,記得在下載時選擇使用外部晶振。
③ 怎麼對單片機進行調試
1、首先需要在protues軟體中,連接好線,如下圖所示。
④ 單片機發送一個數據,串口調試助手接收到兩個,這是為什麼呢看代碼
由於沒寫中斷處理程序當發送完成後,觸發串口中斷進入0x0023地址處運行,就相當於復位了一次一樣。所以會出現2次的情況。(第二次由於TI已經為1了所以不會觸發中斷)
解決方法
1、關閉串口中斷
EA=0;
ES=0;
2、寫一個串口中斷處理函數
void UARTInterrupt(void) interrupt 4
{
if(RI)//RI標志位為1代表接收到數據
{
RI = 0 ;//清零接收標志位
//在這里添加中斷處理函數
}
else
TI = 0;//如果RI不為1一般是發送完成中斷 把TI(發送完成標志位)清零
}
發送完成後清零TI
SBUF = 'i';
while(!TI);//等待發送完成
TI = 0;//發送完成後清零TI
這樣就可以實現多個位元組發送不會造成沖突
⑤ 在調試rs232串口通信時,單片機往PC機上發數據,串口調試助手可以接收,但是PC往單片機發數據,接收不到。
先解釋一下現象:
(1)MAX232的12腳即R1OUT連接到了單片機的RX腳,因此使用探頭碰MAX232的12引腳時導入了干擾信號,所以接收到了亂的數據。同時,也證明了單片機的接收電路和程序都沒有問題。
(2)板子上的地接到示波器上的地,PC才能收到數據,說明單片機與PC沒有共地。同時,也證明了單片機的發送電路、程序和PC的接收電路都沒有問題。
原理:
(1)PC的串口即RS232有9個引腳,與單片機通信時用到三個引腳,依次是2腳RX、3腳TX、5腳信號GND。
(2)而單片機串口與此相反,2腳TX、3腳RX、5腳信號GND。
(3)只要把這三根線依次連接,2-2、3-3、5-5即可完成通信。
(4)同時,根據實際通信設備介面不同,串口線也分多種,如直連線、交叉線、公母頭區別等。
故障排除流程:
(1)用萬用表等測量MAX232的14腳T1OUT與開發板串列介面的2腳TX、MAX232的13腳R1IN與開發板串列介面的3腳RX、開發板串列介面的5腳與電源地是不是分別連接。如果連接沒問題,則進行下一步。
(2)用萬用表等測量串口線,PC端的2腳與單片機端的2腳、PC端的3腳與單片機端的3腳、PC端的5腳與單片機端的5腳是不是分別對應,如果對應連接沒問題,則進行下一步。
(3)將PC上串列介面的2、3引腳短接。
(4)打開串口工具如「超級串口」等,下載地址http://www.powerserial.com/download/,打開串口,在輸入框中隨便輸入幾個字元,看是不是能在接收窗口中收到。
(5)如果收不到,則說明PC的串口問題(排除串口工具沒有開錯串口或短接沒問題的情況下),換台電腦試下。能收到,則說明電腦端收發都沒問題,進行下一步。
(6)將串口線插到電腦上,開發板端的插頭不插而直接將2、3腳短接。再次用串口工具發送,看是否能接收到,如果能接收到,則證明串口線沒問題,進行下一步。
(7)將串口線插到開發板得串列介面上,再使用串口工具收發。
(8)如果以上都不行,則自己做3根線,也可以使用杜邦線,將PC的TX與開發板的RX、PC的RX與開發板的TX、PC的信號地與開發板的地分別相連。再用串口工具收發測試。
通過以上步驟,則可以逐步排查到問題的具體原因。不過,根據問題及之後的描述,最大的可能性是串口線用的不對,導致PC串口與開發板串口的3根線沒有分別對應上。
⑥ 電腦連接單片機的時候,COM埠應該怎麼調試
是串口么?如果是串口有很多問題需要注意的:第一,連線RXD,TXD要與單片機的TXD RXD對應(而且是RS232通信方式,),GND-GND,第二:軟體設置:1、波特率;2、數據位數;3、停止位;4、校驗位等設置是否與單片機相符,以上如果正確,通信就沒有問題了。當然,如果要從PC機發信息給單片機,那就必須要知道單片機的通信協議才可以。