轉載:http://m.newsmth.net/article/Circuit/298517?p=1
原問題:
做了塊電路板,結果發現,要先對開發板上電, 再打開串口超級終端, 串口通信才可成功。
但是另外一塊開發板卻沒有這個問題。
這一般是什么原因造成的?
自己遇到問題:
剛焊接好的板子,發現串口有問題,結果串口每次只有在斷電上電后需要在上電后重新連接串口線
才能正常通信
原因簡述:
缺少保護電阻,
解決辦法:每次斷電時拔掉串口線
下面所提到的問題,和上面鏈接中的問題(熱插拔才可通信),其實是同一個問題,
可能的原因是
1. 232收發器芯片產生電壓的那些小電容的數值是和數據手冊上不太一致
2. 232收發器芯片和232插座之間缺少串聯保護電阻,或保護電阻數值太小。
3. 原來的232收發器芯片可能部分失效了
如果1和2都已經做到了,將232收發器芯片的RXD輸入管腳和插座RXD之間的串聯保護
電阻加大,比如換成1K或10K的,應該就可以了。如果還不成,就換個232芯片吧。
多說幾句原因吧(以前碰到過該問題所以就研究過):
在不通信的時候,PC串口的TXD管腳會輸出-5V左右的電壓,於是在開發板上的232收
發器芯片的RXD對應的輸入管腳(R1IN或R2IN)上維持着-5V左右的電壓。當開發板斷電
時,232收發器芯片的電源管腳沒有電壓,V+/V-管腳也沒有電壓,唯獨RXD輸入管腳
(R1IN或R2IN)上維持這一個-5V左右的電平,不用多說就能明白這意味着什么。假如
習慣上每次給開發板斷電后卻讓串口依舊和 PC保持連接,這意味這232收發器芯片
長期承受着RXD輸入管腳-5V但同時又讓電源管腳和V+/V-為零電平,特別當PC的TXD
輸出維持這超過-5V甚至超過-6V的時候,久而久之,這顆芯片就會漸漸部分失效或
全部失效,於是通信就失敗了。所以換一個芯片往往就可以解決這個問題。
每次先打開串口程序而沒有通信的時候,-5V或以下的電壓就加在TXD管腳上了,如果
此時開發板斷電但是卻接着串口,就相當於初始狀態是先讓232收發器芯片處於上述
異常的工作條件,然后再給開發板上電的時候,就可能出現通信不成功的狀況。
這個時候當帶電拔插一下串口,相當於讓232收發器芯片的RXD輸入管腳去掉-5V電壓,
而保持其電源管腳、V+、V-管腳的電壓,這是232芯片回復到正常的工作條件。如果
232收發器芯片的失效程度還不深(不會深度“抱死”),這個時候通信就可能恢復正常。
而如果重新啟動一下串口程序,初始化過程會改變PC串口TXD的輸出電壓,讓232收發
器芯片的RXD管腳有一個恢復0電平的過程,這和上面拔插串口以便在RXD管腳上臨時
去掉一下-5V的電平,是一個效果。
另外,將那個RXD的串聯電阻改大,起的作用就是在232收發器芯片的電源管腳掉電
的時候,從RXD輸入管腳(R1IN和R2IN)的輸入電壓被限流了,於是對芯片的損壞就不
那么大,或者說進入故障異常的程度不會那么深,當開發板上電(也就是232收發器
芯片上電)的時候,就比較容易恢復正常狀態。
通過實驗的方法也可以驗證上述分析。當開發板斷電但是串口依然接着PC的時候,測
量232收發器芯片對應於RXD輸出到MCU的那個管腳,會發現該管腳的電壓為顯著的-0.x
伏(被MCU的管腳給限制了所以不會很低,但是往往會有個-0.3或-0.5V)。當給開發板
上電后出現了上述故障時,測量一下232收發器芯片對應RXD輸出到MCU的那個管腳的
電平,你會發現該管腳一直維持為0電平,而不是期望的+3.3V/5V(取決於232收發器
芯片的電源大小),這就是RXD輸出管腳好像被“抱死”了。而一旦熱插拔或重新初始
化PC的串口后,會看到那個管腳的電平就回復到+3.3/5V,可以正常通信了。
所以,兩個建議:
1. 當開發板斷電后,應該也拔掉串口線,否則232收發器芯片就可能長期處於異常的
電平條件。
2. 從串口插座輸入進來的信號,到232收發器芯片管腳之間應該串聯較大的電阻,而
不是類似於TXD信號那樣接個5.1或22歐的小電阻。我比較習慣於用1K或470歐。
當然,這個串聯電阻也不能太大,也要兼顧考慮串口線上的壓降(比如線比較細或長)。