<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32學(xué)習筆記(1):GPIO口的使用

STM32學(xué)習筆記(1):GPIO口的使用

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏

RCC_APB2PeriphClockCmd()函數是設置外設時(shí)鐘。ARM與C51單片機不同的是,不用外設的時(shí)候,如IO口、ADC、定時(shí)器等等,都是禁止時(shí)鐘的,以達到節能的目的,只有要用到的外設,才開(kāi)啟它的時(shí)鐘。因此在需要用到GPIOB和GPIOD的時(shí)候,我們需要先開(kāi)啟它的時(shí)鐘,具體用到的是函數庫里面的函數:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

其中,第一個(gè)參數需要指示要開(kāi)啟什么端口的時(shí)鐘,RCC_APB2Periph_GPIOx就是開(kāi)啟GPIOx的時(shí)鐘,第二個(gè)參數需要指示是開(kāi)啟還是關(guān)閉,ENABLE/DISABLE。

開(kāi)啟外設時(shí)鐘之后,然后就開(kāi)始對GPIO的配置寄存器進(jìn)行設置了,具體設置方式參考《基于MDK的STM32處理器開(kāi)發(fā)應用》一書(shū)中,“7.1通用IO端口”。While循環(huán)里面就是給GPIO的端口輸出寄存器賦值,由于我手上這款奮斗開(kāi)發(fā)板的三個(gè)LED燈分別接的是D3、D6和B5,所以只要將D端口和B端口相應的位上置1就可以了。

編譯之后我們發(fā)現編譯器報錯,Undefined symbol RCC_APB2PeriphClockCmd,是因為我們使用了的RCC_APB2PeriphClockCmd()函數在頭文件中聲明了,卻沒(méi)有在C文件中定義,這個(gè)函數在.. KeilARMRV31LIBSTSTM32F10xstm32f10x_rcc.c中,將這個(gè)文件復制到工程的根目錄下,然后在屏幕左邊的Workspace中添加進(jìn)來(lái),就可以了。

至于如何下載到ARM開(kāi)發(fā)板中,不同的開(kāi)發(fā)板有不同的方法,而開(kāi)發(fā)板生產(chǎn)廠(chǎng)商一般都會(huì )將有關(guān)的文檔連同開(kāi)發(fā)板一起附送,在此就不詳細贅述了。

其實(shí),在MDK的庫中,還定義了很多宏,可以避免讓我們自己去查找相關(guān)資料來(lái)設置寄存器的各個(gè)位。比如,在本次實(shí)驗中,對于LED等的亮滅也可以通過(guò)以下代碼來(lái)實(shí)現。

#include "stm32f10x_lib.h"

int main()

{

int i;

GPIO_InitTypeDef GPIO_InitStructure;//定義GPIO宏操作結構體

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOB,ENABLE);//外設時(shí)鐘配置,開(kāi)啟GPIOB和GPIOD的時(shí)鐘

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//將B5口配置為通用推挽輸出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//口線(xiàn)翻轉速度為50MHz

GPIO_Init(GPIOB, &GPIO_InitStructure);//配置GPIOB口

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_3;//將D3和D6口配置為推挽輸出

GPIO_Init(GPIOD, &GPIO_InitStructure);//配置GPIOD口

while(1)

{

GPIO_SetBits(GPIOB, GPIO_Pin_5);//B5口輸出高電平

GPIO_ResetBits(GPIOD, GPIO_Pin_6);//D6口輸出低電平

GPIO_ResetBits(GPIOD, GPIO_Pin_3);//D3口輸出低電平

for(i=0;i<1000000;i++);

GPIO_ResetBits(GPIOB, GPIO_Pin_5);

GPIO_ResetBits(GPIOD, GPIO_Pin_6);

GPIO_SetBits(GPIOD, GPIO_Pin_3);

for(i=0;i<1000000;i++);

GPIO_ResetBits(GPIOB, GPIO_Pin_5);

GPIO_ResetBits(GPIOD, GPIO_Pin_3);

GPIO_SetBits(GPIOD, GPIO_Pin_6);

for(i=0;i<1000000;i++);

}

}

由于我們使用了GPIO_InitTypeDef類(lèi)型,所以我們需要找到它的定義,這個(gè)定義包含在“…KeilARMRV31LIBSTSTM32F10xstm32f10x_gpio.c”中,將文件復制到工程根目錄下,然后再添加進(jìn)入工程中,編譯才不會(huì )報錯。

在絕大多數C編譯器中,要求所有的變量聲明都在執行語(yǔ)句塊之前,也就是說(shuō)如果需要定義的變量需要先在進(jìn)入main函數一開(kāi)始就全部定義好,如果執行了某一條語(yǔ)句之后再定義變量的話(huà),就會(huì )報錯。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: STM32學(xué)習筆記GPIO

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>