單片機(jī)STM32的幾種輸入模式以及外部中斷的配置
最近做畢業(yè)設(shè)計(jì),需要用按鍵來(lái)觸發(fā)外部中斷。實(shí)驗(yàn)的時(shí)候是正常的,但是換了個(gè)核心板以及用上自己做的PCB電路板后,出現(xiàn)了一些問(wèn)題。問(wèn)題如下:
要求:將連接按鍵的IO口配置為上拉輸入,按鍵一端接IO口,一端接地,即當(dāng)按鍵按下后,該IO口會(huì)產(chǎn)生一個(gè)下降沿,觸發(fā)下降沿中斷。
問(wèn)題:將相應(yīng)的IO口配置好后,測(cè)了引腳的的電壓,并不是3.3V左右,而是0.1V左右。于是猜想:
1. 外圍電路對(duì)IO口產(chǎn)生了影響。
2. STM32內(nèi)部上拉能力較弱,一次只能上拉一個(gè)IO口。
于是開(kāi)始從這兩個(gè)想法著手解決。首先第一個(gè),很容易就排除了。將外圍電路撤掉,我用的是杜邦線,直接拔掉測(cè)量引腳上的電壓,依然是0.1V左右,于是第1個(gè)猜想排除。
第二個(gè),查看萬(wàn)能的參考手冊(cè),發(fā)現(xiàn)每一個(gè)IO口都是有獨(dú)立的驅(qū)動(dòng)電路,這樣第2個(gè)也排除了。
最后各種糾結(jié),然后發(fā)現(xiàn):在主函數(shù)的開(kāi)頭部分初始化的時(shí)候,我把初始化的那個(gè)函數(shù)給注釋掉了。低級(jí)錯(cuò)誤,見(jiàn)笑了。
現(xiàn)在總結(jié)一下:
STM32的輸入有4種輸入模式:
模擬輸入 GPIO_AIN
用于AD轉(zhuǎn)換
浮空輸入 GPIO_IN_FLOATING
引腳處于浮空模式,電平狀態(tài)是不確定的。外部信號(hào)輸入什么,IO口就是什么狀態(tài)。
上拉輸入 GPIO_IPU
防止IO口出現(xiàn)不確定的狀態(tài),比如,當(dāng)IO口懸空時(shí),就會(huì)通過(guò)內(nèi)部的上拉電阻將該點(diǎn)鉗位在高電平。
下拉輸入 GPIO_IPD
功能與上拉電阻類似,防止IO口出現(xiàn)不確定的狀態(tài),比如,當(dāng)IO口懸空時(shí),就會(huì)通過(guò)內(nèi)部的下拉電阻將該點(diǎn)鉗位在低電平。
STM32中空的I/O管腳是高電平還是低電平取決于具體情況。
1、IO端口復(fù)位后處于浮空狀態(tài),也就是其電平狀態(tài)由外圍電路決定。
2、STM32上電復(fù)位瞬間I/O口的電平狀態(tài)默認(rèn)是浮空輸入,因此是高阻。做到低功耗。
3、STM32的IO管腳配置口默認(rèn)為浮空輸入,把選擇權(quán)留給用戶,這是一個(gè)很大的優(yōu)勢(shì):一方面浮空輸入確保不會(huì)出現(xiàn)用戶不希望的默認(rèn)電平(此時(shí)電平取決于用戶的外圍電路);另一方面降低了功耗,因?yàn)椴还苁巧侠是下拉都會(huì)有電流消耗。從另一個(gè)角度來(lái)看,不管I/O管腳的默認(rèn)配置如何,還是需要在輸出的管腳外加上拉或下拉,這是為了保證芯片上電期間和復(fù)位時(shí)輸出的管腳始終處于已知的電平。
4、在沒(méi)有任何操作的情況下,STM32通用推挽輸出模式的引腳默認(rèn)低電平,也就是有電的狀態(tài)。所以在配置的時(shí)候通常會(huì)先把引腳的電平設(shè)置拉高,讓電路不產(chǎn)生電流。有電到?jīng)]電這一過(guò)程也就是引腳電平從低到高的過(guò)程。
5、STM32的I/O管腳有兩種:TTL和CMOS,所有管腳都兼容TTL和CMOS電平。也就是說(shuō)從輸入識(shí)別電壓上看,所有管腳不管是TTL管腳還是CMOS管腳都可以識(shí)別TTL或CMOS電平。
編輯:admin 最后修改時(shí)間:2018-05-19