本文經授權轉載自公眾號嵌入式Linux(id:Linux-c-world)

TTL電平:

TTL是Transistor-Transistor Logic,即晶體管-晶體管邏輯的簡稱,它是計算機處理器控制的設備內部各部分之間通信的標準技術。TTL電平信號應用廣泛,是因為其數據表示採用二進位規定,+5V等價於邏輯"1",0V等價於邏輯"0"。

數字電路中,由TTL電子元器件組成電路的電平是個電壓範圍,規定:

輸出高電平>=2.4V,輸出低電平<=0.4V;

輸入高電平>=2.0V,輸入低電平<=0.8V。

雜訊容限是0.4V。

RS232電平:

RS232是串口的一個標準,它有自己的電平定義:它採用負邏輯,-15V~-3V代表邏輯"1",+3V~+15V代表邏輯"0"。

串口,COM口就是電腦上的物理介面形式,COM口簡稱串口。而TTL,RS-232,是電平標準,就是多少電壓範圍代表邏輯「 1 」,多少電壓範圍代表邏輯「 0 」。大家都知道在電子的世界裡面就是 0 和 1 而已嘛。

下圖是 USB 轉 RS232 的轉換線,我們看到很多線,只要是 9 pin 的,就可以猜測這個鬼東西是 RS232 的串口線,如果是 排針引出的,可以認為是 TTL 電平的。

PL2303、CP2102 晶元是 USB 轉成 TTL 串口的晶元,我們以前在學習 51 單片機、 STM32時經常這樣用,也要注意埠的電平是多少 V 。而 MAX232 晶元是 TTL 電平 和 RS232 電平的雙向轉換晶元。

為什麼有了 TTL 電平還需要 RS232 和 RS485 兩種電平呢?

是因為TTL 電平傳輸距離比較近,主要用於晶元之間的傳輸,RS232 和 RS485 數據傳輸距離比較遠。

一般從晶元裏引出的UART口就是TTL電平,其引腳如下:

學習 STC 單片機的同學應該記得,以前開發的時候,都是用串口線給單片機下載程序,用的串口就是 RS232 ,類似下圖,工作以後公司配的電腦都沒有了RS232,筆記本也沒有RS232了,用的最多的都是 USB 轉串口線。

最後分享最近遇到串口調試中比較奇葩的問題,最近做一個 Android 設備上的串口透傳實驗,前兩周做好了 demo ,收發數據都沒問題,發送 0123456789ABCDEF 在接收端也能正常接收,今天調試時發現有問題,接收到的數據變成了 7F6E5D4C3B2A1908 (而且每次都是這樣的穩定數據),當時看到這個數據,簡直要瘋了,又用命令行 echo cat 調試,結果還是一樣的悲劇,實在沒辦法,約了小 C 去樓下喝了一杯水,回來把設備上的串口線重新插拔了下,結果,你們知道的,就那麼好了。這裡想說的是,調試之前一定要保證硬體設備是 OK 的,而且要記錄好之前的調試記錄和軟體硬體環境,這樣能減少排查問題的時間。

這樣的解決辦法不是正向的,多年前,面試時,有個面試官問我一個很刁鑽的問題,說遇到難題的時候如何正向解決,也就是說發現問題後,不能倒推驗證,相反,我是比較喜歡倒推驗證的,「不管白貓黑貓,抓到老鼠的就是好貓」。


關注公眾號百問科技(id:baiwenkeji)第一時間閱讀嵌入式乾貨。

技術交流加個人威信13266630429,驗證:知乎


推薦閱讀:
相關文章