硬件:深圳標(biāo)航科技有限公司 暴風(fēng) 開發(fā)板
處理器:GD32F103VET6
開發(fā)環(huán)境:MDK(keil 5) + STM32CubeMX
1.1 GD32F103VET6的IO引腳圖
由于GD32和STM32是PIN對PIN的,他們的引腳排列、封裝、大小都完全相同,所以GD32F103VET6的引腳結(jié)構(gòu)與STM32F103VET6完全一樣,由于大家都對STM32比較熟悉,所以這里直接采用STM32F103VET6的引腳圖當(dāng)做GD32F103VET6的引腳圖,該引腳圖如圖1所示。
圖1 GD32F103VET6的引腳分布圖
由圖可見,GD32F103VET6 (在后續(xù)介紹中,簡寫為GD32)一共有100個引腳,其中既可以做輸入,也可以做輸出的引腳(成為IO引腳)一共有80個,這80個引腳分為PA、PB、PC、PD和PE一共5組,每組包含16個引腳。在圖1中,這些IO引腳的顏色為灰色。
我們在STM32CubeMX的引腳搜索框中輸入某組引腳名,可以看到該組引腳會閃爍,閃爍時顏色為灰色和黑色交替變化。例如,我們在引腳搜索框中輸入PE,可以看到變?yōu)楹谏珪r的效果如圖2所示。
圖2 在引腳搜索框輸入PE時芯片PE組引腳變黑色示意圖
如果輸入的是具體的某一個引腳,比如PE12,可以看到PE12閃爍,顏色也是灰色和黑色交替變化。將鼠標(biāo)移到PE12的上方用左鍵點擊,會彈起PE12引腳的功能列表如圖3所示。
圖3 PE12引腳功能列表示意圖
可以看到,PE12除了作為輸入(GPIO_Input)和輸出(GPIO_Output)外,還有其他7種功能。處理器的IO引腳除了可以作為輸入輸出引腳外,還能夠作為其他模塊,比如定時器的輸出、SPI模塊的引腳、串口的功能引腳等功能,具有“通用性”,所以這類引腳我們用通用IO引腳來描述,叫GPIO引腳,以區(qū)別于功能比較單一的如51單片機之類的IO引腳。
1.2 GD32的引腳輸出功能應(yīng)用配置
將GD32的GPIO引腳配置為輸出后,可以讓該引腳輸出高電平或者低電平以控制外部電路。
比如,如圖4所示的LED燈電路,LED的陽極接3.3V,陰極接PE12,由二極管的單向?qū)щ娦钥芍胱孡ED0亮,我們應(yīng)該讓PE12輸出低電平。
圖4 LED0電路示意圖
又如,如圖5所示的有源蜂鳴器(有源蜂鳴器是有電流流過蜂鳴器時,蜂鳴器會發(fā)聲)電路,要想有源蜂鳴器響,則應(yīng)該讓電流流過蜂鳴器,而要想讓蜂鳴器有電流流過,三極管S8050的CE端必須導(dǎo)通,而要想S8050的CE端導(dǎo)通,則必須讓PB2輸出高電平。所以,此時要配置PB2輸出高電平,蜂鳴器才會發(fā)聲。
圖5 有源蜂鳴器電路圖
了解了GPIO口的輸出功能后,下面我們通過一個例子來進(jìn)一步學(xué)習(xí)GPIO引腳輸出功能的使用。
【例1】已知LED0與GD32的連接圖如圖4所示,編寫程序,實現(xiàn)LED0的閃爍效果。
【實現(xiàn)過程】
1.配置芯片時鐘,分為2步。
①.配置芯片高速時鐘使用外部晶體/陶瓷晶振和GD32的內(nèi)部時鐘調(diào)整模組配合產(chǎn)生的時鐘作為芯片主要時鐘源,其配置過程如圖6所示。
圖6 配置芯片高速時鐘選項示意圖
②.配置芯片系統(tǒng)時鐘頻率,其配置過程如圖7所示。
圖7 系統(tǒng)時鐘配置過程圖
配置好后,HCLK以及定時器模塊的內(nèi)部時鐘頻率都為72MHz,而APB1總線和APB2總線掛接的模塊的頻率則為36Mhz。
2.配置調(diào)試選項。在本教程中,我們使用的調(diào)試工具都為如圖8所示的10PIN的ST-link。
圖8 10PIN的ST-LINK示意圖
這需要在STM32CubeMX的調(diào)試選擇項中選擇調(diào)試方式為Serial wire(串口線),其選擇過程如圖9所示。
圖9 調(diào)試選擇示意圖
注意:如果不選擇該選項,則使用ST-LINK下載程序時,就需要按復(fù)位鍵,然后再在MDK中點擊下載按鈕下載程序。
在圖9中將調(diào)試模式設(shè)置為Serail Wire后,可以看到PA13和PA14這兩個默認(rèn)的串口下載數(shù)據(jù)和時鐘引腳會變?yōu)榫G色,如圖10所示。
圖10 調(diào)試設(shè)備配置完成后PA13和PA14引腳圖
3.配置IO引腳。整個配置過程步驟為:
(1)找到PE12,將其功能設(shè)置為GPIO_Output(輸出),如圖11所示,設(shè)置好后可以看到PE12變?yōu)榫G色。
圖11 PE12設(shè)置為輸出的過程示意圖
(2)配置PE12的輸出功能的其他選項,這些選項的配置過程和含義如圖12所示。
圖12 PE12作為輸出時的配置選項示意圖
下面我們對這些選項進(jìn)行逐一介紹。
①GPIO output level。該選項用于初始化IO引腳的電平,有高電平High和低電平Low兩個選項,如果選擇High,則初始化后,LED0將不會亮;如果選擇Low,則初始化完成后LED0將會亮。這里我們采用默認(rèn)的Low,當(dāng)STM32CubeMX生成代碼后,編譯并將生成的hex文件下載到開發(fā)板中,可以看到LED亮。
②GPIO mode。該選項為IO引腳做輸出時其內(nèi)部電路的驅(qū)動選項,有兩個選擇,分別為:
●Output Push Pull。該選項為推挽輸出選項。
●Output Drain Open。該選項為開漏輸出選項。
配置為推挽輸出,則IO引腳內(nèi)部的電路為推挽電路,這種電路可以輸出0也可以輸出1。配置為開漏輸出,則IO引腳內(nèi)部的電路為開漏電路,這種電路只能輸出0不能輸出1,要想輸出1則必須在引腳的外面引出一個上拉電阻或者使能IO引腳內(nèi)部的上拉電阻。開漏輸出一般用于大電流場合,在本教程的例子中,這些IO引腳控制電路都是小電流場合,所以這里我們采用默認(rèn),配置為推挽輸出。
●GPIO Pull-up Pull-down。該選項為上下拉電阻使能選項。GD32/STM32的每個IO引腳的內(nèi)部都有一對受控的上拉電阻和下拉電阻,該選項就用于配置是否使能里面的上拉或者下拉電阻,它里面有3個選擇:
·No Pull-up and No Pull-down。既不使能上拉電阻也不使能下拉電阻。
·Pull-up使能上拉電阻。
·Pull-down使能下拉電阻。
由于內(nèi)部電路的驅(qū)動方式使用了推挽方式,所以這里不需要使能上拉電阻也不需要使能下拉電阻,所以我們采用默認(rèn)的選項--GPIO Pull-up Pull-down既不使能上拉也不使能下拉。
●Maximum output speed。該選項用于配置IO引腳的響應(yīng)速度,對于本教程的低頻場合對這個響應(yīng)速度不做要求,所以里面的3個選項任意選擇一個即可,這里我們采用默認(rèn)。
●USER Label。該選項為程序員為方便記憶,為引腳取一個別名的選項。比如本例子中,可以為PE12取名為LED0,以方便記憶。不過,這里我們不打算這樣做,而是仍然采用默認(rèn)。
4.配置工程管理
配置工程管理有三個選項,分別是工程Project、代碼生成Code Generator和高級設(shè)置Advanced Settings三個選項。下面分別介紹這三個選項的配置。
①Project。工程選項主要是填寫工程的名字、工程的存放路徑、使用的IDE工具和版本、堆棧設(shè)置等,他們的設(shè)置如圖13所示。
圖13 工程管理中的Project選項的設(shè)置
②Code generator。代碼生成選項的配置如圖14所示。
圖14 代碼生成選項示意圖
③Advanced Setting。高級設(shè)置這里使用默認(rèn)設(shè)置即可。
5.點擊Stm32CubeMX右上角的Generate code按鈕,生成代碼,該按鈕如圖15所示。
圖15 Generate code
6.代碼生成后,會彈出如圖16所示的對話框。
圖16 代碼輸出結(jié)果示意圖
其中,
①打開文件夾選項。如果點擊該按鈕,將會打開生成的MDK工程所在的文件夾;
②打開工程選項。如果點擊該選項,將會打開工程。
③關(guān)閉選項。點擊它,將會關(guān)閉該對話框。
我們點擊打開工程選項,打開工程,然后編譯工程,并將編譯結(jié)果下載到開發(fā)板上,可以看到LED0處于點亮的狀態(tài)。
7.在工程中添加代碼。經(jīng)過步驟6后,LED0是點亮了,但是例子的目標(biāo)還沒有實現(xiàn)。要想實現(xiàn)例1的目標(biāo),可以在主函數(shù)中采用如下的結(jié)構(gòu):
int main(void)
{
系統(tǒng)初始化;
while(1)
{
LED0亮;
延時以便能觀察到燈亮;
LED0滅;
延時以便能觀察到燈滅;
}
}
注意,如果燈亮或滅的持續(xù)時間太短,則人眼可能捕捉不到,大家可以試一下。
對于系統(tǒng)初始化,在使用STM32CubeMX輸出工程時CubeMX已經(jīng)調(diào)用HAL庫的函數(shù)/組件進(jìn)行了初始化,我們不用管。那目前的問題就是如何使得LED0亮/暗和延時,下面分別介紹。
(1)LED0的亮/暗
①亮。使用如下語句來實現(xiàn)
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, GPIO_PIN_RESET);
②滅。使用如何語句實現(xiàn)。
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, GPIO_PIN_SET);
可以看到,設(shè)置IO引腳輸出高低電平可以通過調(diào)用HAL庫中的GPIO寫函數(shù)HAL_GPIO_WritePin來實現(xiàn),該函數(shù)的最后一個參數(shù)為IO引腳的狀態(tài),設(shè)置為GPIO_PIN_RESET,則引腳輸出低電平,設(shè)置為GPIO_PIN_SET,則引腳輸出高電平。
(2)延時。
HAL庫提供了一個基于Systick的延時函數(shù)—HAL_Delay()。該函數(shù)只有一個整型參數(shù),它延時時以ms為單位,比如如果我們想延時1S,則參數(shù)應(yīng)該設(shè)置為1000,也即延時語句應(yīng)該為
HAL_Delay(1000);
最終,main函數(shù)的內(nèi)容如圖17所示
圖17 主函數(shù)內(nèi)容示意圖
8.對工程進(jìn)行編譯,并將結(jié)果下載到開發(fā)板上,可以看到開發(fā)板上的LED0閃爍,每次亮暗持續(xù)時間各位1S,例1目標(biāo)完成。
1.3 結(jié)論及注意事項
1.對于GD32的GPIO引腳,每一個引腳都可以配置為多個功能,作為輸出時要配置為GPIO_Output功能。
2.配置為輸出功能時,要配置以下兩個關(guān)聯(lián)項
①引腳內(nèi)部電路的驅(qū)動方式。IO引腳內(nèi)部的驅(qū)動方式有兩種,一種是推挽,一種是開漏。非大電流、灌電流的情況下,使用推挽方式,這種方式下引腳可以輸出1也可以輸出0,所以不需要配置上拉電阻/下拉電阻的使能。
②輸出響應(yīng)速度,通常使用默認(rèn)即可。
3.一定要注意在STM32CubeMX中設(shè)置調(diào)試方式,否則使用ST-LINK下載的時候,你只能按下復(fù)位鍵并同時按下載,才能下載程序。
4.對于GD32/stm32的每一個模塊電路,使用的時候都要先使能該模塊的時鐘,不過,在配置STM32CubeMX輸出工程時沒有體會到這一點,但是大家一定要警惕。
5.STM32CubeMX在生成代碼時,默認(rèn)調(diào)用的是HAL庫的函數(shù),HAL庫的函數(shù)的取名方式為
HAL+模塊名稱+模塊動作(函數(shù)參數(shù))
比如本項目中學(xué)到的GPIO引腳輸出高低電平的函數(shù)HAL_GPIO_WritePin。
6.HAL庫的延時函數(shù)HAL_Delay()的延時以ms為單位。
評論
查看更多