1. 程式人生 > >關於STM32的幾種輸入模式以及外部中斷的配置

關於STM32的幾種輸入模式以及外部中斷的配置

最近做畢業設計,需要用按鍵來觸發外部中斷。實驗的時候是正常的,但是換了個核心板以及用上自己做的PCB電路板後,出現了一些問題。問題如下:

要求:將連線按鍵的IO口配置為上拉輸入,按鍵一端接IO口,一端接地,即當按鍵按下後,該IO口會產生一個下降沿,觸發下降沿中斷。

問題:將相應的IO口配置好後,測了引腳的的電壓,並不是3.3V左右,而是0.1V左右。於是猜想

1. 外圍電路對IO口產生了影響。

2. STM32內部上拉能力較弱,一次只能上拉一個IO口。

於是開始從這兩個想法著手解決。首先第一個,很容易就排除了。將外圍電路撤掉,我用的是杜邦線,直接拔掉測量引腳上的電壓,依然是0.1V左右,於是第1個猜想排除。

第二個,檢視萬能的參考手冊,發現每一個IO口都是有獨立的驅動電路,這樣第2個也排除了。

最後各種糾結,然後發現:在主函式的開頭部分初始化的時候,我把初始化的那個函式給註釋掉了。低階錯誤,見笑了。

現在總結一下:

STM32的輸入有4種輸入模式:

模擬輸入    GPIO_AIN    

用於AD轉換

浮空輸入   GPIO_IN_FLOATING

引腳處於浮空模式,電平狀態是不確定的。外部訊號輸入什麼,IO口就是什麼狀態。

上拉輸入   GPIO_IPU

防止IO口出現不確定的狀態,比如,當IO口懸空時,就會通過內部的上拉電阻將該點鉗位在高電平。

下拉輸入   GPIO_IPD

功能與上拉電阻類似,防止IO口出現不確定的狀態,比如,當IO口懸空時,就會通過內部的

拉電阻將該點鉗位在電平。 

STM32中空的I/O管腳是高電平還是低電平取決於具體情況。
1、IO埠復位後處於浮空狀態,也就是其電平狀態由外圍電路決定。
2、STM32上電覆位瞬間I/O口的電平狀態預設是浮空輸入,因此是高阻。做到低功耗。
3、STM32的IO管腳配置口預設為浮空輸入,把選擇權留給使用者,這是一個很大的優勢:一方面浮空輸入確保不會出現使用者不希望的預設電平(此時電平取決於使用者的外圍電路);另一方面降低了功耗,因為不管是上拉還是下拉都會有電流消耗。從另一個角度來看,不管I/O管腳的預設配置如何,還是需要在輸出的管腳外加上拉或下拉,這是為了保證晶片上電期間和復位時輸出的管腳始終處於已知的電平。
4、在沒有任何操作的情況下,STM32通用推輓輸出模式的引腳預設低電平,也就是有電的狀態。所以在配置的時候通常會先把引腳的電平設定拉高,讓電路不產生電流。有電到沒電這一過程也就是引腳電平從低到高的過程。
5、STM32的I/O管腳有兩種:TTL和CMOS,所有管腳都相容TTL和CMOS電平。也就是說從輸入識別電壓上看,所有管腳不管是TTL管腳還是CMOS管腳都可以識別TTL或CMOS電平。