最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【速成1】【GD32F103VET6】模塊一GPIO口的輸出功能-LED燈的閃爍

2022-06-22 10:43 作者:O老師講32  | 我要投稿

項(xiàng)目一 GD32的GPIO口的輸出功能-LED0閃爍實(shí)驗(yàn)

硬件: 深圳標(biāo)航科技有限公司 暴風(fēng) 開發(fā)板

處理器:GD32F103VET6

開發(fā)環(huán)境:MDK(keil 5) + STM32CubeMX


1.1 GD32F103VET6的IO引腳圖

??? 由于GD32和STM32是PIN對(duì)PIN的,他們的引腳排列、封裝、大小都完全相同,所以GD32F103VET6的引腳結(jié)構(gòu)與STM32F103VET6完全一樣,由于大家都對(duì)STM32比較熟悉,所以這里直接采用STM32F103VET6的引腳圖當(dāng)做GD32F103VET6的引腳圖,該引腳圖如圖1所示。

圖1 GD32F103VET6的引腳分布圖


??? 由圖可見,GD32F103VET6 (在后續(xù)介紹中,簡(jiǎn)寫為GD32)一共有100個(gè)引腳,其中既可以做輸入,也可以做輸出的引腳(成為IO引腳)一共有80個(gè),這80個(gè)引腳分為PA、PB、PC、PD和PE一共5組,每組包含16個(gè)引腳。在圖1中,這些IO引腳的顏色為灰色。

??? 我們?cè)赟TM32CubeMX的引腳搜索框中輸入某組引腳名,可以看到該組引腳會(huì)閃爍,閃爍時(shí)顏色為灰色和黑色交替變化。例如,我們?cè)谝_搜索框中輸入PE,可以看到變?yōu)楹谏珪r(shí)的效果如圖2所示。

圖2 在引腳搜索框輸入PE時(shí)芯片PE組引腳變黑色示意圖


??? 如果輸入的是具體的某一個(gè)引腳,比如PE12,可以看到PE12閃爍,顏色也是灰色和黑色交替變化。將鼠標(biāo)移到PE12的上方用左鍵點(diǎn)擊,會(huì)彈起PE12引腳的功能列表如圖3所示。

??? 可以看到,PE12除了作為輸入(GPIO_Input)和輸出(GPIO_Output)外,還有其他7種功能。處理器的IO引腳除了可以作為輸入輸出引腳外,還能夠作為其他模塊,比如定時(shí)器的輸出、SPI模塊的引腳、串口的功能引腳等功能,具有“通用性”,所以這類引腳我們用通用IO引腳來(lái)描述,叫GPIO引腳,以區(qū)別于功能比較單一的如51單片機(jī)之類的IO引腳。

1.2 GD32的引腳輸出功能應(yīng)用配置

??? 將GD32的GPIO引腳配置為輸出后,可以讓該引腳輸出高電平或者低電平以控制外部電路。

比如,如圖4所示的LED燈電路,LED的陽(yáng)極接3.3V,陰極接PE12,由二極管的單向?qū)щ娦钥芍?,要想讓LED0亮,我們應(yīng)該讓PE12輸出低電平。

圖4 LED0電路示意圖


??? 又如,如圖5所示的有源蜂鳴器(有源蜂鳴器是有電流流過(guò)蜂鳴器時(shí),蜂鳴器會(huì)發(fā)聲)電路,要想有源蜂鳴器響,則應(yīng)該讓電流流過(guò)蜂鳴器,而要想讓蜂鳴器有電流流過(guò),三極管S8050的CE端必須導(dǎo)通,而要想S8050的CE端導(dǎo)通,則必須讓PB2輸出高電平。所以,此時(shí)要配置PB2輸出高電平,蜂鳴器才會(huì)發(fā)聲。

圖5 有源蜂鳴器電路圖


??? 了解了GPIO口的輸出功能后,下面我們通過(guò)一個(gè)例子來(lái)進(jìn)一步學(xué)習(xí)GPIO引腳輸出功能的使用。

【例1】已知LED0與GD32的連接圖如圖4所示,編寫程序,實(shí)現(xiàn)LED0的閃爍效果。

【實(shí)現(xiàn)過(guò)程】

1.配置芯片時(shí)鐘,分為2步。

①.配置芯片高速時(shí)鐘使用外部晶體/陶瓷晶振和GD32的內(nèi)部時(shí)鐘調(diào)整模組配合產(chǎn)生的時(shí)鐘作為芯片主要時(shí)鐘源,其配置過(guò)程如圖6所示。

圖6 配置芯片高速時(shí)鐘選項(xiàng)示意圖


②.配置芯片系統(tǒng)時(shí)鐘頻率,其配置過(guò)程如圖7所示。

圖7 系統(tǒng)時(shí)鐘配置過(guò)程圖


??? 配置好后,HCLK以及定時(shí)器模塊的內(nèi)部時(shí)鐘頻率都為72MHz,而APB1總線和APB2總線掛接的模塊的頻率則為36Mhz。

2.配置調(diào)試選項(xiàng)。在本教程中,我們使用的調(diào)試工具都為如圖8所示的10PIN的ST-link。

圖8 10PIN的ST-LINK示意圖


??? 這需要在STM32CubeMX的調(diào)試選擇項(xiàng)中選擇調(diào)試方式為Serial wire(串口線),其選擇過(guò)程如圖9所示。

圖9 調(diào)試選擇示意圖


?? 注意:如果不選擇該選項(xiàng),則使用ST-LINK下載程序時(shí),就需要按復(fù)位鍵,然后再在MDK中點(diǎn)擊下載按鈕下載程序。

??? 在圖9中將調(diào)試模式設(shè)置為Serail Wire后,可以看到PA13和PA14這兩個(gè)默認(rèn)的串口下載數(shù)據(jù)和時(shí)鐘引腳會(huì)變?yōu)榫G色,如圖10所示。

圖10 調(diào)試設(shè)備配置完成后PA13和PA14引腳圖


3.配置IO引腳。整個(gè)配置過(guò)程步驟為:

(1)找到PE12,將其功能設(shè)置為GPIO_Output(輸出),如圖11所示,設(shè)置好后可以看到PE12變?yōu)榫G色。

圖11 PE12設(shè)置為輸出的過(guò)程示意圖


(2)配置PE12的輸出功能的其他選項(xiàng),這些選項(xiàng)的配置過(guò)程和含義如圖12所示。

圖12 PE12作為輸出時(shí)的配置選項(xiàng)示意圖


??? 下面我們對(duì)這些選項(xiàng)進(jìn)行逐一介紹。

??? ①GPIO output level。該選項(xiàng)用于初始化IO引腳的電平,有高電平High和低電平Low兩個(gè)選項(xiàng),如果選擇High,則初始化后,LED0將不會(huì)亮;如果選擇Low,則初始化完成后LED0將會(huì)亮。這里我們采用默認(rèn)的Low,當(dāng)STM32CubeMX生成代碼后,編譯并將生成的hex文件下載到開發(fā)板中,可以看到LED亮。

??? ②GPIO mode。該選項(xiàng)為IO引腳做輸出時(shí)其內(nèi)部電路的驅(qū)動(dòng)選項(xiàng),有兩個(gè)選擇,分別為:

??? ●Output Push Pull。該選項(xiàng)為推挽輸出選項(xiàng)。

??? ●Output Drain Open。該選項(xiàng)為開漏輸出選項(xiàng)。

??? 配置為推挽輸出,則IO引腳內(nèi)部的電路為推挽電路,這種電路可以輸出0也可以輸出1。配置為開漏輸出,則IO引腳內(nèi)部的電路為開漏電路,這種電路只能輸出0不能輸出1,要想輸出1則必須在引腳的外面引出一個(gè)上拉電阻或者使能IO引腳內(nèi)部的上拉電阻。開漏輸出一般用于大電流場(chǎng)合,在本教程的例子中,這些IO引腳控制電路都是小電流場(chǎng)合,所以這里我們采用默認(rèn),配置為推挽輸出。

??? ●GPIO Pull-up Pull-down。該選項(xiàng)為上下拉電阻使能選項(xiàng)。GD32/STM32的每個(gè)IO引腳的內(nèi)部都有一對(duì)受控的上拉電阻和下拉電阻,該選項(xiàng)就用于配置是否使能里面的上拉或者下拉電阻,它里面有3個(gè)選擇:

??? ·No Pull-up and No Pull-down。既不使能上拉電阻也不使能下拉電阻。

??? ·Pull-up使能上拉電阻。

??? ·Pull-down使能下拉電阻。

??? 由于內(nèi)部電路的驅(qū)動(dòng)方式使用了推挽方式,所以這里不需要使能上拉電阻也不需要使能下拉電阻,所以我們采用默認(rèn)的選項(xiàng)--GPIO Pull-up Pull-down既不使能上拉也不使能下拉。

??? ●Maximum output speed。該選項(xiàng)用于配置IO引腳的響應(yīng)速度,對(duì)于本教程的低頻場(chǎng)合對(duì)這個(gè)響應(yīng)速度不做要求,所以里面的3個(gè)選項(xiàng)任意選擇一個(gè)即可,這里我們采用默認(rèn)。

??? ●USER Label。該選項(xiàng)為程序員為方便記憶,為引腳取一個(gè)別名的選項(xiàng)。比如本例子中,可以為PE12取名為L(zhǎng)ED0,以方便記憶。不過(guò),這里我們不打算這樣做,而是仍然采用默認(rèn)。

4.配置工程管理

??? 配置工程管理有三個(gè)選項(xiàng),分別是工程Project、代碼生成Code Generator和高級(jí)設(shè)置Advanced Settings三個(gè)選項(xiàng)。下面分別介紹這三個(gè)選項(xiàng)的配置。

??? ①Project。工程選項(xiàng)主要是填寫工程的名字、工程的存放路徑、使用的IDE工具和版本、堆棧設(shè)置等,他們的設(shè)置如圖13所示。

圖13 工程管理中的Project選項(xiàng)的設(shè)置


??? ②Code generator。代碼生成選項(xiàng)的配置如圖14所示。

圖14 代碼生成選項(xiàng)示意圖


??? ③Advanced Setting。高級(jí)設(shè)置這里使用默認(rèn)設(shè)置即可。

5.點(diǎn)擊Stm32CubeMX右上角的Generate code按鈕,生成代碼,該按鈕如圖15所示。

圖15 Generate code


6.代碼生成后,會(huì)彈出如圖16所示的對(duì)話框。

圖16 代碼輸出結(jié)果示意圖


??? 其中,

??? ①打開文件夾選項(xiàng)。如果點(diǎn)擊該按鈕,將會(huì)打開生成的MDK工程所在的文件夾;

??? ②打開工程選項(xiàng)。如果點(diǎn)擊該選項(xiàng),將會(huì)打開工程。

??? ③關(guān)閉選項(xiàng)。點(diǎn)擊它,將會(huì)關(guān)閉該對(duì)話框。

??? 我們點(diǎn)擊打開工程選項(xiàng),打開工程,然后編譯工程,并將編譯結(jié)果下載到開發(fā)板上,可以看到LED0處于點(diǎn)亮的狀態(tài)。

7.在工程中添加代碼。經(jīng)過(guò)步驟6后,LED0是點(diǎn)亮了,但是例子的目標(biāo)還沒(méi)有實(shí)現(xiàn)。要想實(shí)現(xiàn)例1的目標(biāo),可以在主函數(shù)中采用如下的結(jié)構(gòu):

int main(void)

{

?????????? 系統(tǒng)初始化;

?????????? while(1)

?????????? {

????????????? LED0亮;

????????????? 延時(shí)以便能觀察到燈亮;

????????????? LED0滅;

????????????? 延時(shí)以便能觀察到燈滅;

}

}

??? 注意,如果燈亮或滅的持續(xù)時(shí)間太短,則人眼可能捕捉不到,大家可以試一下。

對(duì)于系統(tǒng)初始化,在使用STM32CubeMX輸出工程時(shí)CubeMX已經(jīng)調(diào)用HAL庫(kù)的函數(shù)/組件進(jìn)行了初始化,我們不用管。那目前的問(wèn)題就是如何使得LED0亮/暗和延時(shí),下面分別介紹。

??? (1)LED0的亮/暗

??? ①亮。使用如下語(yǔ)句來(lái)實(shí)現(xiàn)

??? HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, GPIO_PIN_RESET);

??? ②滅。使用如何語(yǔ)句實(shí)現(xiàn)。

??? HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, GPIO_PIN_SET);

??? 可以看到,設(shè)置IO引腳輸出高低電平可以通過(guò)調(diào)用HAL庫(kù)中的GPIO寫函數(shù)HAL_GPIO_WritePin來(lái)實(shí)現(xiàn),該函數(shù)的最后一個(gè)參數(shù)為IO引腳的狀態(tài),設(shè)置為GPIO_PIN_RESET,則引腳輸出低電平,設(shè)置為GPIO_PIN_SET,則引腳輸出高電平。

??? (2)延時(shí)。

??? HAL庫(kù)提供了一個(gè)基于Systick的延時(shí)函數(shù)—HAL_Delay()。該函數(shù)只有一個(gè)整型參數(shù),它延時(shí)時(shí)以ms為單位,比如如果我們想延時(shí)1S,則參數(shù)應(yīng)該設(shè)置為1000,也即延時(shí)語(yǔ)句應(yīng)該為

?????? HAL_Delay(1000);

??? 最終,main函數(shù)的內(nèi)容如圖17所示。

圖17 主函數(shù)內(nèi)容示意圖


8.對(duì)工程進(jìn)行編譯,并將結(jié)果下載到開發(fā)板上,可以看到開發(fā)板上的LED0閃爍,每次亮暗持續(xù)時(shí)間各位1S,例1目標(biāo)完成。

1.3 結(jié)論及注意事項(xiàng)

?? 1.對(duì)于GD32的GPIO引腳,每一個(gè)引腳都可以配置為多個(gè)功能,作為輸出時(shí)要配置為GPIO_Output功能。

?? 2.配置為輸出功能時(shí),要配置以下兩個(gè)關(guān)聯(lián)項(xiàng)

?? ①引腳內(nèi)部電路的驅(qū)動(dòng)方式。IO引腳內(nèi)部的驅(qū)動(dòng)方式有兩種,一種是推挽,一種是開漏。非大電流、灌電流的情況下,使用推挽方式,這種方式下引腳可以輸出1也可以輸出0,所以不需要配置上拉電阻/下拉電阻的使能。

?? ②輸出響應(yīng)速度,通常使用默認(rèn)即可。

?? 3.一定要注意在STM32CubeMX中設(shè)置調(diào)試方式,否則使用ST-LINK下載的時(shí)候,你只能按下復(fù)位鍵并同時(shí)按下載,才能下載程序。

?? 4.對(duì)于GD32/stm32的每一個(gè)模塊電路,使用的時(shí)候都要先使能該模塊的時(shí)鐘,不過(guò),在配置STM32CubeMX輸出工程時(shí)沒(méi)有體會(huì)到這一點(diǎn),但是大家一定要警惕。

?? 5.STM32CubeMX在生成代碼時(shí),默認(rèn)調(diào)用的是HAL庫(kù)的函數(shù),HAL庫(kù)的函數(shù)的取名方式為

?? HAL+模塊名稱+模塊動(dòng)作(函數(shù)參數(shù))

?? 比如本項(xiàng)目中學(xué)到的GPIO引腳輸出高低電平的函數(shù)HAL_GPIO_WritePin。

?? 6.HAL庫(kù)的延時(shí)函數(shù)HAL_Delay()的延時(shí)以ms為單位。





【速成1】【GD32F103VET6】模塊一GPIO口的輸出功能-LED燈的閃爍的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
阳城县| 彭山县| 滨海县| 五大连池市| 襄汾县| 南靖县| 平果县| 湄潭县| 栖霞市| 锡林浩特市| 勃利县| 宿州市| 门源| 乐昌市| 棋牌| 天峨县| 塔城市| 图们市| 衡东县| 洛宁县| 章丘市| 昌邑市| 阳春市| 郑州市| 南昌县| 广饶县| 射阳县| 广元市| 建始县| 石城县| 洮南市| 阜康市| 江津市| 平度市| 荣昌县| 温州市| 车险| 九台市| 垫江县| 德化县| 龙川县|