
(資料圖片)
技巧一:
筆者在調試某Cortex-M3內核單片機時遇到一個問題,此單片機不具備在線仿真功能,因此調試代碼時只能使用UART輸出Log的方式調試。調試過程中發現串口模塊會影響單片機啟動,進入死機狀態,沒有任何響應。
取下串口模塊,然后給單片機加電可以正常啟動,看來是串口模塊引入了某種干擾。使用排除法,依次拔掉TX、RX,發現RX不會導致死機,拔下TX時可以正常啟動,插上TX啟動失敗(TX和RX指的串口模塊)。如果先給單片機供電,然后插入串口TX則正常運行。思來想去,應該是串口模塊的TX驅動能力較強,當單片機沒有供電時,串口模塊的TX給單片機提供了部分電力,這部分電力不能使單片機正常工作,但是使他進入某異常狀態,此時即使給單片機加電也不能正常工作。UART的TX在沒有數據傳輸的時候輸出高電平,有一定的驅動能力,有時候不可小覷。
為了解決此問題增加一個二極管,預留一個上拉電阻,如下圖所示:
當串口模塊的TX輸出0時,二極管導通,二極管正極被拉低,也就是單片機的RX拉低,單片機收到0。當串口模塊的TX輸出1時,二極管截止,單片機的RX被內部上拉電阻拉高,二極管正極最好預留一個上拉電阻。二極管最好選擇正向壓降小,開關速度快的肖特基二極管。
技巧二:
我司某款產品使用串口進行芯片間通訊,通訊協議采用一問一答的方式,即雙方不會同時發出數據。我們在調試某項功能時需要監聽記錄串口數據包,然后通過數據包分析問題,通常情況使用兩個串口模塊分別監聽TX和RX,可是這次數據量有點大,使用兩個串口模塊截取數據,組合到一起很困難,于是乎設計了以下小電路,使兩條串口線的數據轉移到一條線上去,然后使用串口模塊接收。兩個二極管相當于一個“與門”,預留一個上拉電阻。
這種方式只適合一問一答的通訊方式,即雙方不會同時發出數據,如果雙方同時發出數據,接收就會混亂。
標簽: