![[STM32HAL庫]GPIO的8種工作模式及工程建立](http://pic.xiahunao.cn/yaotu/[STM32HAL庫]GPIO的8種工作模式及工程建立)
目錄GPIO概念GPIO的復(fù)用GPIO的八種工作模式4種輸入模式GPIO_Mode_IN_FLOATING 浮空輸入GPIO_Mode_IPU 上拉輸入GPIO_Mode_IPD 下拉輸入GPIO_Mode_AIN 模擬輸入4種輸出模式GPIO_Mode_Out_OD 通用開漏輸出帶上拉或者下拉GPIO_Mode_AF_OD 復(fù)用開漏輸出帶上拉或者下拉GPIO_Mode_Out_PP 通用推挽輸出帶上拉或者下拉GPIO_Mode_AF_PP 復(fù)用推挽輸出帶上拉或者下拉正式點(diǎn)燈配置CUBEMXKEIL5代碼HAL_GPIO_WritePin 函數(shù)講解本章結(jié)束!GPIO概念GPIOGeneral-purpose input/output,中文名叫通用型輸入輸出是STM32可控制的引腳最基本的功能就是控制輸出高低電平以及檢測輸入電平高低是非常重要的一個(gè)外設(shè)。STM32芯片的GPIO引腳與外部設(shè)備連接起來可實(shí)現(xiàn)與外部通訊、控制外部硬件或者采集外部硬件數(shù)據(jù)的功能。保護(hù)二極管IO引腳上下兩邊兩個(gè)二極管用于防止引腳外部過高、過低的電壓輸入。當(dāng)引腳電壓高于VDD時(shí)上方的二極管導(dǎo)通當(dāng)引腳電壓低于VSS時(shí)下方的二極管導(dǎo)通防止不正常電壓引入芯片導(dǎo)致芯片燒毀。但是盡管如此還是不能直接外接大功率器件須加大功率及隔離電路驅(qū)動(dòng)防止燒壞芯片或者外接器件無法正常工作。P-MOS管和N-MOS管由P-MOS管和N-MOS管組成的單元電路使得GPIO具有“推挽輸出”和“開漏輸出”的模式。這里的電路會(huì)在下面很詳細(xì)地分析到。TTL肖特基觸發(fā)器信號經(jīng)過觸發(fā)器后模擬信號轉(zhuǎn)化為0和1的數(shù)字信號。但是當(dāng)GPIO引腳作為ADC采集電壓的輸入通道時(shí)用其“模擬輸入”功能此時(shí)信號不再經(jīng)過觸發(fā)器進(jìn)行TTL電平轉(zhuǎn)換。ADC外設(shè)要采集到的原始的模擬信號。這里需要注意的是在查看《STM32中文參考手冊V10》中的GPIO的表格時(shí)會(huì)看到有“FT”一列這代表著這個(gè)GPIO口時(shí)兼容3.3V和5V的如果沒有標(biāo)注“FT”就代表著不兼容5V。GPIO的復(fù)用STM32F4 有很多的內(nèi)置外設(shè)這些外設(shè)的外部引腳都是與 GPIO 共用的。也就是說一個(gè)引腳可以有很多作用但是默認(rèn)為IO口如果想使用一個(gè) GPIO內(nèi)置外設(shè)的功能引腳就需要GPIO的復(fù)用那么當(dāng)這個(gè) GPIO 作為內(nèi)置外設(shè)使用的時(shí)候就叫做復(fù)用。GPIO的八種工作模式4種輸入模式GPIO_Mode_IN_FLOATING 浮空輸入GPIO作為輸入功能的浮空輸入時(shí)電信號使由外部流向內(nèi)部的從結(jié)構(gòu)圖的右側(cè)往左側(cè)看信號流經(jīng)順序是①端口——②施密特觸發(fā)器——③輸入數(shù)據(jù)寄存器——④讀取GPIO_Mode_IPU 上拉輸入上拉輸入和浮空輸入的區(qū)別就是在第①和第②之間多了一個(gè)上拉電阻這樣GPIO在沒有連接外部部件時(shí)的默認(rèn)電平是高電平其它流程和原來一樣。GPIO_Mode_IPD 下拉輸入下拉輸入和浮空輸入的區(qū)別就是在第①和第②之間多了一個(gè)下拉電阻這樣GPIO在沒有連接外部部件時(shí)的默認(rèn)電平是低電平其它流程和原來一樣。GPIO_Mode_AIN 模擬輸入模擬輸入模式和其它三種輸入模式不同它的外部電平信號沒有流入輸入數(shù)據(jù)寄存器而是直接流入模擬輸入部分。模擬輸入一般是用來ADC讀取和轉(zhuǎn)換的。4種輸出模式GPIO_Mode_Out_OD 通用開漏輸出帶上拉或者下拉開漏輸出模式下通過設(shè)置位設(shè)置/清除寄存器或者輸出數(shù)據(jù)寄存器的值途經(jīng)N-MOS管最終輸出到I/O端口。這里要注意N-MOS管當(dāng)設(shè)置輸出的值為高電平的時(shí)候N-MOS管處于關(guān)閉狀態(tài)此時(shí)I/O端口的電平就不會(huì)由輸出的高低電平?jīng)Q定而是由I/O端口外部的上拉或者下拉決定當(dāng)設(shè)置輸出的值為低電平的時(shí)候N-MOS管處于開啟狀態(tài)此時(shí)I/O端口的電平就是低電平。同時(shí)I/O端口的電平也可以通過輸入電路進(jìn)行讀取注意I/O端口的電平不一定是輸出的電平。GPIO_Mode_AF_OD 復(fù)用開漏輸出帶上拉或者下拉開漏復(fù)用輸出模式與開漏輸出模式很是類似。只是輸出的高低電平的來源不是讓CPU直接寫輸出數(shù)據(jù)寄存器取而代之利用片上外設(shè)模塊的復(fù)用功能輸出來決定的。GPIO_Mode_Out_PP 通用推挽輸出帶上拉或者下拉推挽輸出模式下通過設(shè)置位設(shè)置/清除寄存器或者輸出數(shù)據(jù)寄存器的值途經(jīng)P-MOS 管和N-MOS管最終輸出到I/O端口。這里要注意P-MOS管和N-MOS管當(dāng)設(shè)置輸出的值為高電平的時(shí)候P-MOS管處于開啟狀態(tài)N-MOS管處于關(guān)閉狀態(tài)此時(shí)I/O端口的電平就由P-MOS管決定高電平當(dāng)設(shè)置輸出的值為低電平的時(shí)候P-MOS管處于關(guān)閉狀態(tài)N-MOS管處于開啟狀態(tài)此時(shí)I/O端口的電平就由N-MOS管決定低電平。同時(shí)I/O端口的電平也可以通過輸入電路進(jìn)行讀取注意此時(shí)I/O端口的電平一定是輸出的電平。GPIO_Mode_AF_PP 復(fù)用推挽輸出帶上拉或者下拉推挽復(fù)用輸出模式與推挽輸出模式很是類似。只是輸出的高低電平的來源不是讓CPU直接寫輸出數(shù)據(jù)寄存器取而代之利用片上外設(shè)模塊的復(fù)用功能輸出來決定的。正式點(diǎn)燈配置CUBEMX1、先選擇好芯片STM32F103RCT6點(diǎn)開SYS打開Debug模式選擇Serial Wire。如不打開這個(gè)Debug模式下載一次程序后想再燒錄程序?qū)洸贿M(jìn)需要更改BOOT引腳電平才能再次燒錄。STM32三種BOOT啟動(dòng)模式詳解(全網(wǎng)最全)https://blog.csdn.net/qq_39400113/article/details/1160514012、進(jìn)入外部時(shí)鐘源設(shè)置選擇打開高速時(shí)鐘源。3、進(jìn)行時(shí)鐘樹配置由原理圖可知外部高速時(shí)鐘源為8MHz配置運(yùn)行頻率為72MHz4、點(diǎn)擊PC13引腳配置為GPIO_Output。5、進(jìn)入GPIO設(shè)置點(diǎn)擊PC13可以看到它的默認(rèn)設(shè)置。6、配置好文件名存儲位置用的什么IDE。7、按圖配置。點(diǎn)擊右上角生成代碼。CUBEMX配置完成。KEIL5代碼1、進(jìn)入MDK-ARM文件夾2、進(jìn)入工程文件3、進(jìn)入主程序只有在begin和end中間才可以寫自己的代碼不然cubemx在生成標(biāo)準(zhǔn)程序時(shí)會(huì)刪掉不在這些區(qū)域內(nèi)的代碼。4、這兩幅圖可以看到主函數(shù)里面的基本結(jié)構(gòu)。自己寫的函數(shù)的初始化和一些參數(shù)的賦值應(yīng)在硬件初始化后如GPIO初始化后HAL_GPIO_WritePin 函數(shù)講解HAL 庫中提供一個(gè)操作 GPIO 電平的函數(shù)HAL_GPIO_WritePin 函數(shù)void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)這里的高低電平可以理解為高低電壓高電平為3.3V低電平為0V這兩個(gè)是外在表現(xiàn)。那么由初中物理可以知道當(dāng)led兩端存在電壓差且正向?qū)ǖ脑抣ed便會(huì)發(fā)光。LED 即發(fā)光二極管單向?qū)ó?dāng) LED 內(nèi)有電流通過時(shí)會(huì)發(fā)光在安全電流范圍內(nèi)電流越大亮度越亮。根據(jù)封裝方式不同最大電流也不同常用的0603封裝最大電流為二十多毫安但是一般使LED工作在五毫安就夠亮了。程序經(jīng)過 HAL_Init 初始化 GPIO 初始化進(jìn)入主循環(huán)在主循環(huán)中將 LED 引腳輸出高電平從而點(diǎn)亮 LED 燈。主循環(huán)代碼如下HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);寫好代碼進(jìn)行編譯后看代碼沒有編譯錯(cuò)誤開發(fā)板連接好stlink連接沒問題就可以點(diǎn)擊下載程序了,下載完程序后不要忘記摁開發(fā)板上的RESET鍵。代碼實(shí)現(xiàn)后的現(xiàn)象就是PC13驅(qū)動(dòng)的燈常亮。本章結(jié)束!還有不懂可以看視頻講解科創(chuàng)電控培訓(xùn)GPIO八種工作模式CubeMX配置代碼講解點(diǎn)燈實(shí)驗(yàn)_嗶哩嗶哩_bilibili