GPIO的簡介:
GPIO它的學名叫通用輸入輸出端口,其實它就是單片機的I/O口,他承擔著將芯片與外部設(shè)備連接實現(xiàn)與外部通訊,控制和數(shù)據(jù)采集的功能。
GPIO的結(jié)構(gòu):
STM32的GPIO的硬件結(jié)構(gòu)圖如圖所示
嗯,我們能夠看到的值有最右邊①部分的I/O口引腳,剩下的都在芯片里面,如果想要系統(tǒng)的了解STM32的GPIO,讀懂這個結(jié)構(gòu)圖還是非常有必要的,嘿嘿,一點一點來看吧。
①保護部分:
引腳上的兩個保護二極管是用來保護I/O口引腳的,兩個二極管的作用分兩種情況
情況1當輸入的電壓過高時:上面的保護二極管導通。
情況2當輸入的電壓過低時:下面的保護二極管導通。
都是為了防止不正常的電壓進入芯片然后燒毀芯片。
②輸出驅(qū)動部分:
兩個MOS管一個P-MOS管一個N-MOS管使得這部分可以進行有推挽輸出和開漏輸出,簡單table about一下推挽輸出和開漏輸出,推挽輸出你可以簡單理解為兩個MOS管都工作,輸入高電平(3.3V)時P-MOS管導通I/O口輸出高電平,輸入低電平時N-MOS管導通I/O口輸出低電平(0V),而開漏輸出就只有N-MOS管工作,所以在這個模式下當輸入輸入低電平時N-MOS管導通I/O口輸出低電平(0V),輸入高電平時,I/O口輸出狀態(tài)為高阻態(tài)(就時那種不穩(wěn)定的電平)。
應用場合:
推挽輸出主要用在比如說經(jīng)典之光流水燈,有源蜂鳴器等需要快速切換狀態(tài)的場合。
開漏輸出主要用在一些比如IIC等這些通訊場合。
③輸出數(shù)據(jù)寄存器
我們上面一直說“當輸入XX電平”,大家是不是會有疑問這個電平從哪里來呢,別急這就來說。這個電平就來自前面的這個輸出數(shù)據(jù)寄存器,它是由ODR這個寄存器來進行控制,也就是我們可以通過控制這個寄存器來改變輸出端口的電平。ODR這個寄存器具體控制操作去瞅瞅官方工作手冊,這里就不再展開了。
④復用輸出
我們在學習51單片機的時候,就知道經(jīng)典的STC89C51 P3端口具有第二功能,比如P3.0 P3.1端口既可以作為普通的I/O口又可以進行串口通訊,我們32單片機I/O口同樣具有第二功能,我們把它稍微的美化了一下叫端口復用。
⑤輸入數(shù)據(jù)寄存器
單片機的I/O口通過上面的兩個電阻可以被配置為上拉和下拉輸入,經(jīng)過施密特觸發(fā)器轉(zhuǎn)化為0,1信號存儲在輸入數(shù)據(jù)寄存器中,通過IDR寄存器就可以知道該引腳電平的狀態(tài)。
⑥復用輸入
和復用輸出類似,把輸入的信號傳給其他的寄存器,共其他外設(shè)讀取。
⑦模擬輸入
當I/O口用來采集模擬信號的時候,就必須啊將端口設(shè)置為模擬輸入模式,信號就不再經(jīng)過施密特觸發(fā)器,直接進入響應的片上外設(shè)。
好了到這里STM32的GPIO的結(jié)構(gòu)就說完了,這是我個人在學習后的理解,里面可能有說的不深入的地方(悄悄說一聲我是有硬件基礎(chǔ)),這個得自己去補充硬件基礎(chǔ)了!
下面我列舉一下關(guān)于GPIO的工作模式,這些工作模式最好我們還是去記住他,如果英文好,根本不需要記,就可以直接的翻譯出來
最后附上常用的操作GPIO的函數(shù)(HAL庫)
1 HAL_GPIO_Writepin函數(shù)
HAL_GPIO_Writepin(GPIOX ,GPIO_PIN_X, GPIO_PIN_SET/RESET);
向X引腳寫入高電平/低電平
2 HAL_GPIO_Readpin函數(shù)
HAL_GPIO_Readpin(GPIOX ,GPIO_PIN_X);
讀取X引腳電平狀態(tài)
3 HAL_GPIO_Togglepin(GPIOX ,GPIO_PIN_X);
使X引腳狀態(tài)反轉(zhuǎn)