協議:UART,TTL電平
其次,懷疑軟件的問題,將軟件重新進行配置,問題依然存在,後將軟件下載到另外一個ARM9的板卡上,與PC機通信正常,排除是軟件的問題。
然後,將IMX6Q的接收端與發送端相連,發現接收正常。排除是接收端根本無法接收信息的情況,同時排除IMX6Q開發板接收端硬件設計和制造上的問題、接線的問題、軟件驅動端口選擇的問題,這些都是正常的。
使用示波器查看波形,發送端波形正常,將IMX6Q與PC相連後,檢查IMX6Q接收端,有正常波形,可以排除PC的問題,IMX6Q串口IO上是有波形的。
更換其他2個UART端口,發現無法發送與接收信息,沒有深究。
現在可以確定,PC端完全沒有問題,硬件接線完全沒有問題,IMX6Q串口軟件完全沒有問題,IMX6Q串口端口完全沒有問題,串口協議完全沒有問題,同時檢查了IMX6Q接收端不受其他硬件的干擾。
最關鍵的問題是,即使不排除這些問題,如何能解釋串口只能接收自己發送出來的信息,收發緩存都在必要的時候進行清零。
我的IMX6Q開發板上,ARM出來UART2_RX和和UART2_TX 引腳除了直接引出到UART2端子,同時還通過0歐姆電阻接到485芯片上,也就是UART2同時復用於外接串口和485通信,因為板子不是我畫的,也沒看那麼多,從而導致上邊的問題。
仔細分析硬件原理圖,是因為我的程序是始終循環發送一個字符,而發送的信息通過TX到達了485芯片上,485通過接收到TX後,控制RE和DE打開隔離芯片,從而使RX和485隔離後邊的保護電路接通,改變了UART2外部的電路阻抗,將串口接收到的信息電平拉高,導致單片機接收不到RX上的信息。
解決辦法,將0歐姆電阻去掉就可以使用串口。如果需要使用485,則串口需要改用其他串口。