STM32系列單片機(jī)原理及應(yīng)用-C語言案例教程-第3章-通用輸入輸出的端口(GIPO)_第1頁
STM32系列單片機(jī)原理及應(yīng)用-C語言案例教程-第3章-通用輸入輸出的端口(GIPO)_第2頁
STM32系列單片機(jī)原理及應(yīng)用-C語言案例教程-第3章-通用輸入輸出的端口(GIPO)_第3頁
STM32系列單片機(jī)原理及應(yīng)用-C語言案例教程-第3章-通用輸入輸出的端口(GIPO)_第4頁
STM32系列單片機(jī)原理及應(yīng)用-C語言案例教程-第3章-通用輸入輸出的端口(GIPO)_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第3章

通用輸入輸出的端口第3章通用輸入/輸出的端口3.1GPIO概述

GPIO是微控制器數(shù)字I/O(輸入/輸出)的基本模塊,借助GPIO,STM32可以對外圍設(shè)備進(jìn)行(如按鍵等)最簡單、最直觀的監(jiān)控。還可用于串行和并行通信、存儲器擴(kuò)展等。

STM32的GPIO最多有7組I/O端口:A、B、C、D、E、F、G,每組端口16個外部引腳。每組端口都具有通用I/O、單獨位設(shè)置/位清除、I/O中斷/喚醒、復(fù)用(AF)、軟件重新映射、I/O復(fù)用與GPIO鎖定機(jī)制功能。在運用這些功能時,會涉及寄存器的操作。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理

使用GPIO主要是對相應(yīng)的寄存器進(jìn)行操作,每個GPIO端口具有7組寄存器:2個32位配置寄存器(GPIOx_CRL,GPIOx_CRH);2個32位數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR);1個32位置位/復(fù)位寄存器(GPIOx_BSRR);1個16位復(fù)位寄存器(GPIOx_BRR);1個32位鎖定寄存器(GPIOx_LCKR)

第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理

GPIO端口的每個位可由軟件分別配置成多種模式。每個I/O端口位能自由編程,I/O端口寄存器必須按32位字被訪問。GPIOx_BSRR和GPIOx_BRR寄存器允許對任何GPIO寄存器的讀/寫的訪問。

常用的I/O端口寄存器有4個:CRL、CRH、IDR、ODR。CRL和CRH控制著每個I/O口的模式及輸出速率。

每個GPIO引腳都可由軟件配置成:輸出、輸入。多數(shù)GPIO引腳是復(fù)用的。除了模擬輸入端口,其他GPIO端口有較大帶負(fù)載能力。

GPIO端口的每位可由軟件分別配置成多種模式:輸入浮空、輸入上拉或下拉、模擬輸入、開漏輸出、推挽式輸出等。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理

使用GPIO主要是對相應(yīng)的寄存器進(jìn)行操作,每個GPIO端口具有7組寄存器:2個32位配置寄存器(GPIOx_CRL,GPIOx_CRH);2個32位數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR);1個32位置位/復(fù)位寄存器(GPIOx_BSRR);1個16位復(fù)位寄存器(GPIOx_BRR);1個32位鎖定寄存器(GPIOx_LCKR)

第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理STM32微控制器GPIO端口基本結(jié)構(gòu)如下圖所示。

GPIO內(nèi)部分為輸入和輸出驅(qū)動器兩部分,與GPIO相關(guān)的寄存器分為三組:通用的I/O(GPIO)操作寄存器;中斷(EXTI)控制寄存器;管腳復(fù)用重映射和調(diào)試I/O配置(AFIO)寄存器。3.2.1GPIO端口結(jié)構(gòu)第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理3.2.1GPIO端口結(jié)構(gòu)1.輸出驅(qū)動器(1)GPIO的輸出驅(qū)動器主要由多路選擇器、輸出控制和一對互補(bǔ)的MOS管組成。多路選擇器是根據(jù)設(shè)置決定該引腳是GPIO普通還是復(fù)用輸出。

普通輸出:由輸出數(shù)據(jù)寄存器GPIO控制。

復(fù)用功能輸出:一個引腳可對應(yīng)多個復(fù)用功能輸出。但同一時刻,該引腳只用復(fù)用功能中的一個,其他復(fù)用功能都處于禁止?fàn)顟B(tài)。(2)輸出控制邏輯和一對互補(bǔ)的MOS管。輸出控制邏輯根據(jù)要求通過控制和NMOS管的狀態(tài)(通/斷)決定GPIO輸出模式(開漏、推挽還是關(guān)閉)。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理3.2.1GPIO端口結(jié)構(gòu)2.輸入驅(qū)動器GPIO的輸入驅(qū)動器由TTL肖特基觸發(fā)器、帶開關(guān)的上/下拉電阻組成。輸入信號送到GPIO輸入數(shù)據(jù)寄存器的同時,送給片上外設(shè),GPIO的輸入沒有復(fù)用功能選項。GPIO的輸入分為以下四種。模擬輸入:TTL肖特基觸發(fā)器關(guān)閉。上拉輸入:GPIO內(nèi)置上拉電阻,其內(nèi)部上拉電阻端接通,下拉電阻端的斷開。在該模式下引腳默認(rèn)為高電平。下拉輸入:GPIO內(nèi)置下拉電阻,其內(nèi)部下拉電阻端接通,上拉電阻端的斷開。在該模式下引腳默認(rèn)為低電平。浮空輸入:GPIO內(nèi)部無上/下拉電阻,斷開狀態(tài)。在該模式下,為高阻態(tài),其電平高低由外部電路決定。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理3.2.2GPIO口輸入/輸出模式

STM32的I/O有以下八種配置方式,其中1~4為輸入類型,5~6為輸出類型,7~8為復(fù)用輸出。浮空輸入_IN_FLOATING:浮空輸入,由KEY識別帶上拉輸入_IPU:I/O內(nèi)部上拉電阻輸入。帶下拉輸入_JPD:I/O內(nèi)部下拉電阻輸入。模擬輸入_AIN:應(yīng)用ADC模擬輸入,或者低功耗下省電。開漏輸出_OUT_OD:I/O輸出。接GND,I/O輸出“1”;懸空時外接上拉電阻,輸出高電平。當(dāng)輸出為“1”時,VO口的狀態(tài)上拉為高電平,I/O口由外部電路決定。推挽輸出_OUT_PP:I/O輸出0接GND,I/O輸出“1”接VCC,讀輸入值是未知的。復(fù)用功能的推挽輸出_AF_PP:片內(nèi)外設(shè)功能(I2C的SCL、SDA)。復(fù)用功能的開漏輸出_AF_OD:片內(nèi)外設(shè)功能(TX1、MOSI、MISO、SCK、SS)。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理3.2.2GPIO口輸入/輸出模式下面介紹推挽輸出和開漏輸出的工作原理。推挽輸出電路原理圖

推挽輸出可以輸出高或低電平,其結(jié)構(gòu)是兩三極管分別受兩個互補(bǔ)信號的控制,當(dāng)一個三極管導(dǎo)通的時候另一個截止。開漏輸出電路原理圖當(dāng)左端的輸入為“0”時,前面的三極管Q2截止,所以VCC電源通過1kΩ電阻加到右邊的三極管Q1上,右邊的三極管導(dǎo)通;當(dāng)左端的輸入為“1”時,前面的三極管導(dǎo)通,而后面的三極管截止(相當(dāng)于開關(guān)斷開)。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理1.GPIO輸出速度

STM32的I/O口驅(qū)動電路的響應(yīng)速度,取決于軟件程序。

STM32在I/O口有不同速度的輸出驅(qū)動電路,當(dāng)不需要輸出高頻率時,應(yīng)選用低速驅(qū)動電路,有利于提高系統(tǒng)的EMI性能。其I/O口進(jìn)行輸出速度選擇時,應(yīng)根據(jù)需求配置輸出速度。推薦I/O口的輸出速度是其輸出信號速度的5~10倍。STM32的I/O口的輸出速度有三種選擇:2MHz、10MHz和50MHz。連接LED、Buzzer等外設(shè)的普通輸出,設(shè)置為2MHz用作USART復(fù)用功能輸出:假設(shè)USART工作時最大比特率為115.2Kbps選用2MHz的響應(yīng)速度,既降低功耗,噪聲又小。用作I2C復(fù)用功能的輸出,假設(shè)I2C工作時最大比特率為400Kbps,那么2MHz的速度可能不夠,選用10MHz或50MHz的I/O速度。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理3.2.3輸出速度及主要特征2.GPIO的主要特征STM32的GPIO主要具有以下特征:提供最多112個多功能雙向I/O端口,80%的端口利用率。每個I/O口(除ADC外)都兼容5V,具有20mA驅(qū)動能力。每個I/O口最高18MHz的翻轉(zhuǎn)速度和50MHz的輸出速度。每個I/O口有8種工作模式,在復(fù)位和剛復(fù)位后,復(fù)位功能未開啟,I/O口被設(shè)置成浮空輸入模式。I/O口都具備復(fù)用功能,包括JTAG/SWD、Timer、USART、I2C、SPI等。某些復(fù)用功能口可通過復(fù)用功能重映射用作另一復(fù)用功能,便于PCB的設(shè)計。I/O口可以作為外部中斷輸入,同時有16個中斷輸入。多數(shù)每個I/O口(除端口F和端口G)都可用作事件輸出。PA0可作為從待機(jī)模式喚醒的引腳,PC13可作為入侵檢測的引腳。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理3.2.4GPIO復(fù)用功能

使用默認(rèn)復(fù)用功能前應(yīng)對端口位配置寄存器編程。

復(fù)用的輸入功能:端口應(yīng)置成輸入模式(浮空、上拉或下拉),且輸入口由外部驅(qū)動;

復(fù)用輸出功能:端口配置成復(fù)用功能輸出模式(推挽或開漏);

雙向復(fù)用功能:端口位配置功能為輸出模式(推挽或開漏)。這時,輸入驅(qū)動器被配置成浮空輸入模式。如端口配置成復(fù)用輸出功能,則引腳和輸出寄存器斷開,和片上外設(shè)的輸出連接。為了使不同器件封裝的外設(shè)I/O功能的數(shù)量達(dá)到最優(yōu),可以把復(fù)用功能映射其他引腳上,通過軟件配置相應(yīng)的寄存器來完成。第3章通用輸入/輸出(GIPO)3.2

STM32的GPIO工作原理3.2.5GPIO鎖定機(jī)制

I/O端口的鎖定機(jī)制允許凍結(jié)I/O配置。當(dāng)在一個端口位上執(zhí)行了鎖定(LOC引腳在下一次復(fù)位之前,將不能再更改端口位的配置),該功能主要用在一些關(guān)鍵點引腳配置上,防止程序跑飛引起災(zāi)難性后果。例如,在驅(qū)動功率模塊的配置上,應(yīng)該使用鎖定機(jī)制,以凍結(jié)I/O口配置,即使程序跑飛,也不影響這些引腳的配置。第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)在進(jìn)行STM32系列單片機(jī)系統(tǒng)開發(fā)時,采用官方提供的庫函數(shù),由于相關(guān)的模塊寄存器特別多,每個寄存器都是32位。STM32F10x系列單片機(jī)的庫函數(shù)V3.50版本如圖所示。GPIO涉及的庫函數(shù)如下表所示。函數(shù)名描

述GPIO_DeInit將外設(shè)GPIOx寄存器值設(shè)為缺省值GPIO_AFIODeInit將復(fù)用功能(取映射審件校制和exit設(shè)置)重設(shè)為默認(rèn)值GPIO_Init根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器GPIO_StructInit把GPIO_InitStruct中的每一個參數(shù)按默認(rèn)值填入GPIO_ReadInputDataBit讀取指定端口管腳的輸入GPIO_ReadInputData讀取指定GPIO端口的輸入GPIO_ReadOutputDataBit讀取指定端口管腳的輸出GPIO_ReadOutputData讀取指定GPIO端口的輸入GPIO_SetBits設(shè)置指定的數(shù)據(jù)端口位GPIO_ResetBits清除指定的數(shù)據(jù)端口位GPIO_WriteBit設(shè)置或清除指定的數(shù)據(jù)端口位GPIO_Write向指定GPIO數(shù)據(jù)端口寫入數(shù)據(jù)GPIO_PinLockConfig鎖定GPIO管腳設(shè)置寄存器GPIO_EventOutputConfig選擇GPIO管腳用作事件輸出GPIO_EventOutputCmd使能或失能事件輸出GPIO_PinRemapConfig改變指定管腳的映射GPIO_EXTILineConfig選擇GPIO管腳用作外部中斷線路第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)在上述庫函數(shù)中,經(jīng)常會用到9個庫函數(shù)進(jìn)行軟件開發(fā):?GPIO_Init()?GPIO_ReadInputDataBit()?GPIO_ReadInputData()?GPIO_ReadOutputDataBit()?GPIO_ReadOutputData()?GPIO_SetBits()?GPIO_ResetBits()?GPIO_WriteBit()?GPIO_Write()第3章通用輸入/輸出的端口(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)1.GPIO_Init()函數(shù)名GPIO_Init()函數(shù)原型voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)功能描述根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器輸入?yún)?shù)1GPIOx:x可以是A、B、C、D或E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_InitStruct:指向結(jié)構(gòu)GPIO_InitTypeDef的指針,包含了外設(shè)GH0的配置信息,參閱Section:GPIO_InitTypeDef查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值無GPIO_Init()函數(shù)參數(shù)第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)1.GPIO_Init()GPIO_InitTypeDef定義于文stm32f10x_gpio.h:typedefstruct{uintl6_tGPIO_Pin;GPIOSpeed_TypeDefGPIO_Speed;GPIOMode_TypeDefGPIO_Mode;}GPIO_InitTypeDef;

(1)GPIO_Pin該參數(shù)選擇待設(shè)置的GPIO管腳,使用操作符“|”可以一次選中多個管腳。使用以下取值任意組合:?GPIO_Pin_None:無引腳被選中;?GPIO_Pin_0:選中引腳0。?GPIO_Pin_l:選中引腳1。?GPIO_Pin_2:選中引腳2?!??GPIO_Pin_15:選中引腳15。第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)1.GPIO_Init()(2)PIO_Mode用于設(shè)置選中管腳的速率。該參數(shù)可取值如下:GPIO_Pin_10MHz:最高輸出速率10MHz。GPIO_Pin_2MHz:最高輸出速率2MHz。GPIO_Pin_50MHz:最高輸出速率50MHz。(3)GPIO_Mode用于設(shè)置選中管腳的工作狀態(tài),該參數(shù)可取如下:GPIO_Mode_AIN:模擬輸入。GPIO_Mode_IN_FLOATING:浮空輸入。GPIO_Mode_IPD:下拉輸入。GPIO_Mode_IPU:上拉輸入。GPIO_Mode_Out_OD:開漏輸出。GPIO_Mode_Out_PP:推挽輸出。GPIO_Mode_AF_OD:復(fù)用開漏輸出。第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)1.GPIO_Init()所有GPIO_Mode的索引和編碼如下表所示。GPIO方向索引模式設(shè)置模式代碼GPIOInput0x00GPIO_Mode_AIN0x000x00GPIO_Mode_IN_FLOATING0x040x04GPIO_Mode_IPD0x080x28GPIO_Mode_IPU0x080x48GPIOoutput0x01GPIO_Mode_Out_OD0x040x14GPIO_Mode_Out_PP0x000x10GPIO_Mode_AF_OD0x0C0x1CGPIO_Mode_AF_PP0x080x18

GPIO_Mode的索引和編碼第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)2.GPIO_ReadInputDataBit()GPIO_ReadInputDataBit()函數(shù)參數(shù)函數(shù)名GPIO_ReadInputDataBit()函數(shù)原型uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uintl6_tGPIO_Pin)功能描述讀取指定管腳的輸入輸入?yún)?shù)1GPIOx:可以是A、B、C、D或E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待讀取的端口位參閱Section:GPIO查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值輸入端口管腳值例[3.1]:讀取GPIOB端口12引腳的輸入U8ReadValue;ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12);第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)3.GPIO_ReadInputData()GPIO_ReadInputData()函數(shù)參數(shù)函數(shù)名GPIO_ReadInputData()函數(shù)原型uintl6_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx)功能描述讀取指定的GPIO端口輸入輸入?yún)?shù)GPIOx:x可以是A、B、C、D或E,來選擇GPIO外設(shè)輸出參數(shù)無返回值GPIO輸入數(shù)據(jù)端口值例[3.2]:讀取指定GPIOB端口的輸入U16ReadValue;ReadValue=GPIO_ReadInputData(GPIOB);第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)4.GPIO_ReadOutputDataBit()GPIO_ReadOutputDataBit()函數(shù)參數(shù)例[3.3]:讀取GPIOB端口12引腳的輸出U8ReadValue;ReadValue=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12);函數(shù)名GPIO_ReadOutputDataBIt()功能原型uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)功能描述讀取指定管腳的輸出入輸入?yún)?shù)1GPIOx:x可以是A、B、C、D或E,來選擇GPIO外設(shè)輸入?yún)?shù)2GPIO_Pin:待讀取的端口位參閱Section:GPIO查閱更多該參數(shù)允許取值范圍輸出參數(shù)無返回值輸出端口管腳值第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)5.GPIO_ReadOutputData()GPIO_ReadOutputDataBit()函數(shù)參數(shù)例[3.4]:讀取GPIOC端口的輸出U16ReadValue;ReadValue=GPIO_ReadOutputData(GPIOC);函數(shù)名GPIO_ReadOutputData()函數(shù)原型uintl6_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx)功能描述讀取指定的GPIO端口輸入輸入?yún)?shù)GPIOx:x可以是A、B、C、D或E,來選擇GPIO外設(shè)輸出參數(shù)無返回值GPIO輸出數(shù)據(jù)端口值第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)6.GPIO_SetBits()例[3.5]:設(shè)置GPIOB的12、13引腳為高電平GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13);函數(shù)名GPIO_SetBits()功能原型voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)功能描述設(shè)置指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:x可以是A、B、C、D或E,來選擇GPIO外設(shè)輸入?yún)?shù)2輸出參數(shù)無返回值無GPIO_SetBIts()參數(shù)函數(shù)第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)7.GPIO_ResetBits()例[3.6]:設(shè)置GPIOA的9、10引腳為低電平GPIO_ResetBits(GPIOA,GPIO_Pin_10|GPIO_Pin_9);函數(shù)名GPIO_ResetBit()函數(shù)原型VoidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)功能描述清除指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:可以是A、B、C、D或E,來選擇GPIO外設(shè)輸入?yún)?shù)2輸出參數(shù)無返回值無GPIO_ResetBits()函數(shù)參數(shù)第3章通用輸入/輸出的端口(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)8.GPIO_WriteBit()例[3.7]:設(shè)置或清除GPIOA的引腳10的端口位GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_GPIO_RESET);函數(shù)名GPIO_WriteBit()函數(shù)原型Void_GPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal)功能描述設(shè)置或清除指定的數(shù)據(jù)端口位輸入?yún)?shù)1GPIOx:可以是A、B、C、D或E,來選擇GPIO外設(shè)輸入?yún)?shù)2輸入?yún)?shù)3BitVal:該參數(shù)指定了待寫入的值該參數(shù)必須取枚舉BitAction的其中一個值Bit_RESET:清除數(shù)據(jù)端口位Bit_SET:設(shè)置數(shù)據(jù)端口位輸出參數(shù)無返回值無

GPIO_WriteBit()函數(shù)參數(shù)第3章通用輸入/輸出(GIPO)3.3

STM32F103系的GPIO的相關(guān)庫函數(shù)9.GPIO_Write()例[3.8]:向指定GPIOA數(shù)據(jù)端口寫入數(shù)據(jù)1101GPIO_Write(GPIOA,0x1101);函數(shù)名GPIO_Write()函數(shù)原型Void_GPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal)功能描述指定GPIO數(shù)據(jù)端口寫入數(shù)據(jù)輸入?yún)?shù)1GPIOx:可以是A、B、C、D或E,來選擇GPIO外設(shè)輸入?yún)?shù)2PortVal:待寫入端口數(shù)據(jù)寄存器值輸出參數(shù)無返回值無GPIO_Write()函數(shù)參數(shù)第3章通用輸入/輸出(GIPO)3.4

STM32的GPIO應(yīng)用案例3.4.1硬件電路設(shè)計

硬件有LED(DS0和DS1),其電路在STM32上連接好了。

DS0接PB5,DS1接PE5。連接原理圖如左圖所示。第3章通用輸入/輸出(GIPO)3.4

STM32的GPIO開發(fā)實例3.4.2軟件設(shè)計新建的TEST工程和一個HARDWARE的文件夾,存放與硬件相關(guān)的代碼。然后在HARDWARE文件夾下新建一個LED文件夾,存放與LED相關(guān)的代碼。在USER文件夾下的TEST.Uv2工程,單擊新建按鈕新建一個文件,在HARDWARE-LED文件夾下面保存為led.c。在該文件中輸入如下代碼:#include”led.h”//初始化PB5和PE5為輸出口,并使能這兩個口的時鐘//LEDIO初始化VoidLED_Init(void){RCC->APB2ENR|

=

1<<

2

;

//使能PORTB時鐘RCC->APE2ENR

=

1<<

5

;

//使能PORTE時鐘GPIOB->CRH&

=

0xFFFFFFF0;GPIOB->CRH&

=

0x00000020//PB5推挽輸出GPIOB->ODR|=1<<5;//PB5輸出高GPIOE->CRL&

=

0xFFFFF0FF

;GPIOE->CRL|

=

0x00000300;//PE5推挽輸出GPIOE->ODR|=1<<5;//PE5輸出高}第3章通用輸入/輸出(GIPO)3.4

STM32的GPIO開發(fā)實例3.4.2軟件設(shè)計該代碼就包含了一個函數(shù)voidLED_Init(void),用來實現(xiàn)配置PB5和PE5為推挽輸出。注意,在配置STM32外設(shè)的時候,先使能該外設(shè)的時鐘。APB2ENR是APB2總線上的外設(shè)時鐘使能寄存器,各位功能描述如下圖所示。要使能PORTB和PORTE的時鐘使能位,將這兩位置1即可。在配置完時鐘,LED_Init配置了PB5和PE5的模式為推挽輸出,默認(rèn)輸出為1,即完成了這兩個I/O口的初始化。第3章通用輸入/輸出的端口(GIPO)3.4

STM32的GPIO開發(fā)實例3.4.2軟件設(shè)計要使能PORTB和PORTE的時鐘使能位,只要將這兩位置1即可。在配置完時鐘,LED_Init配置了PB5和PE5的模式為推挽輸出,默認(rèn)輸出為1,即完成了這兩個I/O口的初始化。保存led.c代碼,按同樣的方法新建一個led.h文件,保存在LED文件夾里。在led.h中輸入如下代碼:#ifndef_LED_H#define_LED_H#include"sys.h"http://LED端口定義#defineLED0PBout(5)//PB5#defineLED1PEout(5)//PE5voidLED_Init(void);//初始化#endif這段代碼里中關(guān)鍵是2個宏定義(方法1):#defineLED0PBout(5)//DS0#defineLED1PEout(5)//DS1

第3章通用輸入/輸出(GIPO)3.4

STM32的GPIO應(yīng)用案例3.4.2軟件設(shè)計將led.h保存,接著在ManageComponents管理中,新建一個HARDWARE的組,把led.c加入到這個組里,如下圖所示。單擊OK回到工程,發(fā)現(xiàn)在ProjectWorkspace中多了一個HARDWARE的組,該組下面有一個led.c的文件,用同樣的方法將led.h頭文件的路徑加入到工程里面。第3章通用輸入/輸出(GIPO)3.4

STM32的GPIO應(yīng)用案例3.4.2軟件設(shè)計回到主界面在main函數(shù)里面編寫如下代碼:#include"sys.h"http://加入sys.h的頭文件#include"usart.h"#include"delay.h"#include"led.h"intmain(void){Stm32_ClockInit(9);

//系統(tǒng)時鐘設(shè)置delay_init(72);

//延時初始化LEDInit();

//初始化與LED連接的//硬件接口while(1){LED0=0;LED1=1;delay_ms(300);//延時300msLED0=1;LED1=0;

//延時300msDelay_ms(300);}}代碼包含了#include"led.h"這句,使得LED0、LED1、LED_Init等能在main函數(shù)里被調(diào)用。然后,main函數(shù)配置系統(tǒng)時鐘為72MHz,把延時函數(shù)初始化。接著調(diào)用LED_Init初始化PB5和PE5為輸出。最后用死循環(huán)實現(xiàn)LED0和LED1交替閃爍,間隔為300ms。再單擊編譯工程,得到結(jié)果如圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論