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