欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 奮斗stm32開(kāi)發(fā)板學(xué)習(xí)日記3—GPIO點(diǎn)燈深究 [打印本頁(yè)]

作者: qunqun    時(shí)間: 2015-7-9 01:05
標(biāo)題: 奮斗stm32開(kāi)發(fā)板學(xué)習(xí)日記3—GPIO點(diǎn)燈深究
GPIO操作之點(diǎn)亮LED:
準(zhǔn)備工具:
上一篇例程中的結(jié)尾,我只是把點(diǎn)亮了led燈, 但是具體的如何是它點(diǎn)亮,并沒(méi)有說(shuō)到,那么這一期教程就來(lái)探究探究其中的原理。
其實(shí)讓led亮滅的原理無(wú)非就是使控制該led燈pin口輸出高低電壓,51是這樣, stm32亦是這樣,但是因?yàn)楹笳邇?nèi)核架構(gòu)比前者復(fù)雜許多, 所以就不能像51那樣單單用一句話就能搞定,但是萬(wàn)變不離其宗,stm32點(diǎn)亮led的步驟一般如下:
首先咱們先來(lái)分析他的電路原理圖,

打開(kāi)后找到控制led部分 ,清注意紅框圈出來(lái)的部分,這就是對(duì)應(yīng)的pin腳。
了解完后他的硬件鏈接后,接下來(lái)我們就可以對(duì)這個(gè)pin口進(jìn)行編程了,打開(kāi)利器keil5 ,新建led工程,如何搭建開(kāi)發(fā)環(huán)境,請(qǐng)參考我上一篇教程。
關(guān)鍵代碼如下:
查看原代碼

程序分析: 眾所周知, c程序是從main函數(shù)開(kāi)始執(zhí)行的, main函數(shù)里面首先的執(zhí)行的是RCC_Configuration這個(gè)函數(shù),
該函數(shù)的里面是systemInit這個(gè)函數(shù),這個(gè)函數(shù)的作用是設(shè)置系統(tǒng)時(shí)鐘頻率為最大72mHz,();
接著繼續(xù)看, 程序執(zhí)行LED_Confi()函數(shù),程序首先執(zhí)行這句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 使能GPIO外部時(shí)鐘的, 為什么要使能呢 , 因?yàn)?stm32外設(shè)時(shí)鐘默認(rèn)是處于關(guān)閉的, 所以我們要在初始化階段設(shè)置為開(kāi)啟。
繼續(xù)看這三句;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5
PIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruture這是什么結(jié)構(gòu)? 此時(shí)我們可以查詢 st官方庫(kù)說(shuō)明文檔。 如圖所示:

該結(jié)構(gòu)體里面含有Pin, Speed ,Mode這三個(gè)參數(shù)。 LED對(duì)應(yīng)的pin腳上面的電路原理圖已經(jīng)給出, 由于一端接地, 所以我們選用推挽輸出的方式。  這里補(bǔ)充一點(diǎn),  選用什么輸出輸入方式, 輸出速率,ST官方都已經(jīng)在代碼中給出定義,都可以查詢到。
GPIO_init()函數(shù)主要功能就是將剛才輸入的結(jié)構(gòu)體參數(shù)寫入到GPIO相關(guān)的寄存器中, 這里主要用到了GPIOx_CRL, GPIOx_CRL,, 簡(jiǎn)單的解釋下GPIOx_CRL,GPIOx_CRL是什么, 查詢stm32參考手冊(cè),如圖:

CRL寄存器就是配置pin口的輸出或者輸入速度, 什么模式。從圖上可以發(fā)現(xiàn) 一個(gè)引腳口由2bit的mode(模式)和2bit的cnf(頻率)控制。 又因?yàn)槊總(gè)GPIO結(jié)構(gòu)組分有16個(gè)pin腳, 這就解釋了為什么會(huì)有CRL與CRH這兩個(gè)寄存器了。 到這里的話, 點(diǎn)亮led就已經(jīng)全部待續(xù)了。
接著我們看SetBits函數(shù)的實(shí)現(xiàn)部分, 由圖可知:

GPIOx用了BSRR這個(gè)寄存器,如圖:

這個(gè)寄存器設(shè)置相關(guān)端口為1 或者 0。 相當(dāng)于設(shè)置端口輸出高低電平。 這樣的話, 就點(diǎn)亮了。








歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1