我們在用stm32這顆mcu的時候,用的最多的也是最基礎的應該就是gpio外設了,而在stm32的hal庫中gpio有8種工作模式
4種輸入狀態,4種輸出狀態(2種復用輸出2種普通輸出),分別對應如下:
如圖1所示,浮空輸入模式
#define gpio_mode_input 0x00000000u / *!《輸入浮動模式* /
當gpio採用浮空輸入模式時,stm32的引腳狀態是不確定的,此時stm32得到的電平狀態完全取決於gpio外部的電平狀態,所以說在gpio外部的引腳懸空時,讀取該埠的電平狀態是個不確定的值。
2,模擬輸入模式
#define gpio_mode_analog 0x00000003u / *!《模擬模式* /
這個很好理解,最常用的場合是adc模擬輸入,不像其他輸入模式只有0和1,模擬輸入模式可以讀取到很細微變化的值。
3,帶上拉,下拉輸入模式
#define gpio_mode_it_rising 0x10110000u / *!《具有上公升沿觸發檢測的外部中斷模式* /
#define gpio_mode_it_falling 0x10210000u / *!《具有下降沿觸發檢測的外部中斷模式* /
#define gpio_mode_it_rising_falling 0x10310000u / *!《具有上公升沿/下降沿觸發檢測的外部中斷模式* /
我查到stm32的資料手冊中關於上下拉的電阻的介紹是電阻阻值都在30-50k之間。
為什麼要用帶上拉或者下拉輸入的模式呢?因為浮空模式時,在gpio外部連線的電路未工作時,stm32讀取的gpio狀態是不確定的,所以可以採用帶上拉或者下拉輸入的模式先給mcu乙個確定的狀態,當外部電路電平狀態發生變化時,易於mcu的判斷。這樣可以增強mcu的抗干擾能力
下面開始介紹輸出模式:
4,推挽輸出模式
#define gpio_mode_output_pp 0x00000001u / *!《輸出推拉模式* /
推挽結構一般是指兩個三極體分別受兩個互補訊號的控制,總是在乙個三極體導通的時候另乙個截止。這種結構既可以輸出高電平,,也可以輸出低電平,可以用於連線數字器件。
推挽電路是兩個引數相同的三極體或mosfet,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次只有乙個導通,所以導通損耗小,效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。
5,開漏輸出模式
#define gpio_mode_output_od 0x00000011u / *!《輸出開漏模式* /
我們重點講開漏輸出,一般開漏輸出模式時,如果外部不接上拉電阻時,只能輸出低電平,所以要想輸出高電平必須要外接上拉電阻。這樣做的有乙個好處,可以用來匹配不同的電平訊號,也就是用於不同電壓的系統之間的通訊;另外,因為要輸出高電平需要有外部的上拉電阻,所以在進行通訊時,通訊的速度也受到上拉電阻阻值的影響,阻值小時,通訊速度可以很快,阻值大時,通訊速度變慢,但也不能為了通訊速度把上拉電阻用的很小,也要注意在電阻很小時,功耗會變大,所以要平衡好這個度。
如圖6所示,復用推挽,開漏輸出模式
#define gpio_mode_af_pp 0x00000002u / *!《備用功能推拉模式* /
#define gpio_mode_af_od 0x00000012u / *!這兩種模式,可以理解為把gpio配置為第二功能使用的時候的配置,並非單純的用作io輸入或輸出。
比如使用外設iic時,我們需要把gpio配置為復用推挽輸出,用於資料通訊功能。
再比如串列埠通訊的tx,以及spi外設的gpio使用就要把引腳設定為復用開漏輸出。
GPIO 的 8 種工作模式
gpio 的 8 種工作模式 在初始化 gpio 的時候,根據我們的使用要求,必須把 gpio 設定為相應的模式。如 led 例程中的 gpio 引腳如果配置為模擬輸入模式是必然會導致錯誤的。我們配合 gpio 結構圖,來看看 gpio 的 8 種模式及其應用場合 圖的最右端為 i o 引腳,左端的...
STM32中GPIO的8種工作模式介紹
一 推挽輸出 可以輸出高 低電平,連線數字器件 推挽結構一般是指兩個三極體分別受兩個互補訊號的控制,總是在乙個三極體導通的時候另乙個截止。高低電平由ic的電源決定。推挽電路是兩個引數相同的三極體或mosfet,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次...
STM32 GPIO的8種工作模式
一 推挽輸出 可以輸出高 低電平,連線數字器件 推挽結構一般是指兩個三極體分別受兩個互補訊號的控制,總是在乙個三極體導通的時候另乙個截止。高低電平由ic的電源決定。推挽電路是兩個引數相同的三極體或mosfet,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩隻對稱的功率開關管每次...