
時間:2019-06-18| 作者:Admin
觸摸單片機的IO應該會使單片機死機,這種情況還是會發(fā)生的,畢竟萬事萬物都是相對的,出錯一些小錯誤,也是難免的,為了減少錯誤的發(fā)生,我們得時常注意,把該避免的避免了,也就少有發(fā)生了;近期在調(diào)試STM32F103單片機的過程中,發(fā)現(xiàn)一個奇怪的現(xiàn)象。只要用手,或者金屬物品觸碰到單片機的PA10管腳,就會使正常運行的單片機立刻死機。起初懷疑是靜電造成的,但是通過多次試驗,排除這種可能性。同時發(fā)現(xiàn),只有碰觸PA10這個管腳才會發(fā)生這種現(xiàn)象,其他的管腳不會。這不由地會讓我聯(lián)想到這可能與USART1有關,因為PA10是USART1的RX腳。
經(jīng)過仔細檢查代碼,發(fā)現(xiàn)出現(xiàn)的死機的原因是,使能了USART1,但卻沒有定義“void USART1_IRQHandler(void)”這個中斷服務函數(shù)而導致的。由于我將PA10設置成了浮空輸入,所以當手觸摸到該管腳時,會引起該管腳的電平發(fā)生跳動。這會導致單片機誤以為串口收到了數(shù)據(jù),產(chǎn)生串口中斷。但是我又沒有定義串口中斷服務函數(shù),所以芯片會陷入嚴重錯誤而使代碼跑飛。
與此類似的,還有使能了外部中斷,但是沒有定義中斷服務函數(shù),也會導致這個問題。通過實驗發(fā)現(xiàn),將串口接收或者外部中斷的管腳設置成上拉輸入,比設置成浮空輸入的抗干擾能力好得多。這應該是嵌入式開發(fā)人員常遇到的問題,這種情況是觸摸單片機供應商常遇到的,開發(fā)人員應細心應對,防止發(fā)生。