第5章通用和復(fù)用功能IO應(yīng)用_第1頁(yè)
第5章通用和復(fù)用功能IO應(yīng)用_第2頁(yè)
第5章通用和復(fù)用功能IO應(yīng)用_第3頁(yè)
第5章通用和復(fù)用功能IO應(yīng)用_第4頁(yè)
第5章通用和復(fù)用功能IO應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第5章通用和復(fù)用功能IO應(yīng)用第一頁(yè),共59頁(yè)。

1、GPIO基本概念STM32F10xxx的I/O端口可以分為兩類工作方式:(1)用作GeneralPurposeInputOutput(通用輸入/輸出端口)使用,即簡(jiǎn)稱GPIO;(2)用作復(fù)用功能使用,如中斷、ADC、定時(shí)器等使用。

STM32的I/O口是需要軟件配置模式、速度、時(shí)鐘并使能的。第二頁(yè),共59頁(yè)。2、STM32的I/O端口工作模式

2.1STM32

I/O功能主要功能:輸入浮空輸入上拉輸入下拉模擬輸入開漏輸出推挽式輸出推挽式復(fù)用功能開漏復(fù)用功能輸入輸出第三頁(yè),共59頁(yè)。

STM32的I/O端口框圖圖5.1STM32的GPIO原理圖書P44漏極第四頁(yè),共59頁(yè)。

STM32的I/O輸入配置輸入配置有四種:浮空輸入(In_Floating)輸入上拉(IPU:InPush_Up)輸入下拉(IPD:InPush_Down)模擬輸入(AIN:AnologIn)輸出緩沖器被禁止施密特觸發(fā)輸入被激活根據(jù)輸入配置(上拉,下拉或浮動(dòng))的不同,弱上拉和下拉電阻被連接出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器對(duì)輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)第五頁(yè),共59頁(yè)。

STM32的I/O輸出配置輸出配置有四種:推挽輸出(OUT_PP,PP:Push_Pull)開漏輸出(OUT_OD,OD:OpenDrain)推挽式復(fù)用功能(AF_PP,AF:Alternate-Fuction)開漏復(fù)用功能(AF_OD)輸出緩沖器被激活:開漏模式,推挽模式施密特觸發(fā)輸入被激活弱上拉和下拉電阻被禁止出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器在開漏模式時(shí),對(duì)輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)在推挽式模式時(shí),對(duì)輸出數(shù)據(jù)寄存器的讀訪問得到最后一次寫的值。第六頁(yè),共59頁(yè)。

I/O端口若做GPIO使用時(shí)的配置輸入配置有四種:浮空輸入(In_Floating)輸入上拉(IPU:InPush_Up)輸入下拉(IPD:InPush_Down)模擬輸入(AIN:AnologIn)輸出配置有兩種:推挽輸出(OUT_PP,PP:Push_Pull)開漏輸出(OUT_OD,OD:OpenDrain)第七頁(yè),共59頁(yè)。

I/O端口若復(fù)用功能使用時(shí)的配置推挽式復(fù)用功能(AF_PP,AF:Alternate-Fuction)輸入時(shí)配置有三種:浮空輸入、輸入上拉、輸入下拉輸出時(shí)配置:推挽式輸入/輸出雙向:輸入出模式為浮空輸入、輸出模式為推挽式開漏復(fù)用功能(AF_OD)輸入時(shí)配置有三種:浮空輸入、輸入上拉、輸入下拉輸出時(shí)配置:開漏模式輸入/輸出雙向:輸入出模式為浮空輸入、輸出模式為開漏模式第八頁(yè),共59頁(yè)。STM32

GPIO引腳書P47~P53表5.3P50:引腳的描述表5.4TIM2引腳配置表5.5復(fù)用功能映像

第九頁(yè),共59頁(yè)。

2.2復(fù)用I/O工作模式

GPIO重映射第十頁(yè),共59頁(yè)。

復(fù)用

復(fù)用,可以重影射引腳和輸出寄存器斷開,并和片上外設(shè)的輸出信號(hào)連接設(shè)置為復(fù)用功能后,如果外設(shè)不被激活,輸出不確定第十一頁(yè),共59頁(yè)。

STM32

GPIO復(fù)用功能配置復(fù)用配置有三種:復(fù)用輸出:端口配置為開漏模式,輸出控制器與輸出寄存器斷開,與片上外設(shè)的輸出信號(hào)連接,送復(fù)用功能輸出信號(hào)到I/O引腳。復(fù)用輸入:端口必須配置成輸入模式(浮空、上拉或下拉),且輸入引腳必須由外部驅(qū)動(dòng),I/O引腳信號(hào)經(jīng)施密特觸發(fā)器到達(dá)復(fù)用功能輸入端,送至片上外設(shè)。雙向復(fù)用:端口配置復(fù)用功能輸出模式為開漏模式,輸入驅(qū)動(dòng)器被配置成浮空輸入模式。第十二頁(yè),共59頁(yè)。

3、I/O端口做GPIO使用時(shí)涉及的寄存器GPIO配置寄存器(GPIOx_CRL,GPIOx_CRH)GPIO數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR)復(fù)位寄存器(GPIOx_BRR)置位/復(fù)位寄存器(GPIOx_BSRR)鎖定寄存器(GPIOx_LCKR)I/O端口做復(fù)用功能使用時(shí)涉及的寄存器(后面再講)第十三頁(yè),共59頁(yè)。

GPIO配置寄存器(GPIOx_CRL,GPIOx_CRH)每個(gè)I/O口需要4位設(shè)置,每組端口(如PA)有16個(gè)I/O,因此,每組端口一共需要16*4位用于設(shè)置,也就是2個(gè)32位的字每個(gè)I/O口需要4位設(shè)置包括:引腳輸入輸出工作模式、速度第十四頁(yè),共59頁(yè)。端口位配置表第十五頁(yè),共59頁(yè)。

速度2M、10M、50M為IO端口驅(qū)動(dòng)電路的相應(yīng)速度,并非輸出信號(hào)的速度芯片內(nèi)部在IO端口的輸出部分設(shè)計(jì)了多個(gè)相應(yīng)速度不同的驅(qū)動(dòng)電路,用過根據(jù)設(shè)計(jì)的需要選擇驅(qū)動(dòng)電路

輸出信號(hào)的速度與程序有關(guān)高頻的驅(qū)動(dòng)電路噪聲較高,選用低頻驅(qū)動(dòng)電路可以降低噪聲輸出較高的頻率,選用較低頻率的驅(qū)動(dòng)模塊,可能得到失真的輸出信號(hào)速度與應(yīng)用匹配:串口,bps115.2k---2M即可,節(jié)能、噪聲小;I2C,400K,留一點(diǎn)容量,10M;

SPI18M或9M,選用50M

第十六頁(yè),共59頁(yè)。GPIO端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)(x=A..E)第十七頁(yè),共59頁(yè)。端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)(x=A..E)第十八頁(yè),共59頁(yè)。端口位設(shè)置/清除寄存器(GPIOx_BSRR)(x=A..E)第十九頁(yè),共59頁(yè)。端口位清除寄存器(GPIOx_BRR)(x=A..E)第二十頁(yè),共59頁(yè)。端口配置鎖定寄存器(GPIOx_LCKR)(x=A..E)第二十一頁(yè),共59頁(yè)。結(jié)構(gòu)GPIO_InitTypeDef定義于文件“stm32f10x.h”中:typedefstruct{__IOuint32_tCRL;__IOuint32_tCRH;__IOuint32_tIDR;__IOuint32_tODR;__IOuint32_tBSRR;__IOuint32_tBRR;__IOuint32_tLCKR;}GPIO_TypeDef;GPIO初始化結(jié)構(gòu)體——相關(guān)配置寄存器第二十二頁(yè),共59頁(yè)。#definePERIPH_BASE((uint32_t)0x40000000)#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)#defineGPIOA_BASE(APB2PERIPH_BASE+0x0800)#defineGPIOB_BASE(APB2PERIPH_BASE+0x0C00)#defineGPIOC_BASE(APB2PERIPH_BASE+0x1000)#defineGPIOD_BASE(APB2PERIPH_BASE+0x1400)#defineGPIOE_BASE(APB2PERIPH_BASE+0x1800)#defineGPIOF_BASE(APB2PERIPH_BASE+0x1C00)#defineGPIOG_BASE(APB2PERIPH_BASE+0x2000)#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)#defineGPIOB((GPIO_TypeDef*)GPIOB_BASE)#defineGPIOC((GPIO_TypeDef*)GPIOC_BASE)#defineGPIOD((GPIO_TypeDef*)GPIOD_BASE)#defineGPIOE((GPIO_TypeDef*)GPIOE_BASE)#defineGPIOF((GPIO_TypeDef*)GPIOF_BASE)#defineGPIOG((GPIO_TypeDef*)GPIOG_BASE)如何使用GPIO數(shù)據(jù)結(jié)構(gòu)?如何使用GPIOA指向的結(jié)構(gòu)體成員?定義在Stm32f10x.h中第二十三頁(yè),共59頁(yè)。結(jié)構(gòu)GPIO_InitTypeDef定義于文件“stm32f10x_gpio.h”中:typedefstruct{uint16_tGPIO_Pin;GPIOSpeed_TypeDefGPIO_Speed;GPIOMode_TypeDefGPIO_Mode;}GPIO_InitTypeDef;使用時(shí),先定義:GPIO_InitTypeDefGPIO_InitStructure訪問其中的成員GPIO_InitStructure.GPIO_Pin……GPIO初始化結(jié)構(gòu)體第二十四頁(yè),共59頁(yè)。GPIO_Pin參數(shù)用來選擇待設(shè)置的GPIO管腳,使用操作符“|”可以一次選中多個(gè)管腳。GPIO_Pin參數(shù)的取值如表A-1所示。第二十五頁(yè),共59頁(yè)。GPIO_Speed用以設(shè)置選中管腳的速率,表A-2給出了該參數(shù)可取的值:第二十六頁(yè),共59頁(yè)。工作模式設(shè)置第二十七頁(yè),共59頁(yè)。GPIO_Mode用以設(shè)置選中管腳的工作狀態(tài),表A-3給出了該參數(shù)可取的值。第二十八頁(yè),共59頁(yè)。

4、應(yīng)用例程(1)STM32外接發(fā)光二極管的電路圖如圖5.16所示,GPIO管腳與對(duì)應(yīng)的LED燈關(guān)系如表5.36。圖5.16發(fā)光二級(jí)管電路第二十九頁(yè),共59頁(yè)。AdvancedPeripheralBus(APB)PCLK2PCLK1第三十頁(yè),共59頁(yè)。要求GPIO口輸出工作,必須要進(jìn)行如下設(shè)置:(1)首先使能GPIO時(shí)鐘,由于GPIO的時(shí)鐘是由APB2提供的,所以需要使能RCC_APB2Periph_GPIOF。(2)設(shè)置GPIO管腳工作模式及支持的時(shí)鐘速率。一般當(dāng)GPIO外接發(fā)光二極管時(shí),可將GPIO管腳的工作模式設(shè)置為:推挽輸出模式。管腳的時(shí)鐘速率不能超過50Mhz。值得注意的是:為降低STM32處理器的功耗,可以依據(jù)實(shí)際需要選擇合適的時(shí)鐘速率,GPIO口支持的最大時(shí)鐘速率越低,其產(chǎn)生的功耗也就越低。第三十一頁(yè),共59頁(yè)。常用函數(shù)P185根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器:P185GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)設(shè)置指定的數(shù)據(jù)端口位P186voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)清除指定的數(shù)據(jù)端口位P186voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)使能或者失能APB2外設(shè)時(shí)鐘:P191voidRCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph,FunctionalStateNewState);typedefenum{DISABLE=0,ENABLE=!DISABLE}FunctionalState;GPIOAGPIOB……GPIO_Pin_0GPIO_Pin_1……GPIOAGPIOB……GPIO_InitTypeDefGPIO_InitStructure;第三十二頁(yè),共59頁(yè)。#defineRCC_APB2Periph_AFIO((uint32_t)0x00000001)#defineRCC_APB2Periph_GPIOA((uint32_t)0x00000004)#defineRCC_APB2Periph_GPIOB((uint32_t)0x00000008)#defineRCC_APB2Periph_GPIOC((uint32_t)0x00000010)#defineRCC_APB2Periph_GPIOD((uint32_t)0x00000020)#defineRCC_APB2Periph_GPIOE((uint32_t)0x00000040)#defineRCC_APB2Periph_GPIOF((uint32_t)0x00000080)#defineRCC_APB2Periph_GPIOG((uint32_t)0x00000100)#defineRCC_APB2Periph_ADC1((uint32_t)0x00000200)#defineRCC_APB2Periph_ADC2((uint32_t)0x00000400)#defineRCC_APB2Periph_TIM1((uint32_t)0x00000800)#defineRCC_APB2Periph_SPI1((uint32_t)0x00001000)#defineRCC_APB2Periph_TIM8((uint32_t)0x00002000)#defineRCC_APB2Periph_USART1((uint32_t)0x00004000)#defineRCC_APB2Periph_ADC3((uint32_t)0x00008000)……配置:APB2外設(shè)復(fù)位寄存器(RCC_APB2RSTR)可參考書P35第三十三頁(yè),共59頁(yè)。設(shè)計(jì)要求1:讓DS1一個(gè)燈亮滅閃爍。用固件庫(kù)函數(shù)進(jìn)行編程具體分幾步走:(1)進(jìn)行相關(guān)引腳的定義(2)使能GPIO時(shí)鐘(3)設(shè)置GPIO管腳工作模式及速率(4)主函數(shù)Stm32f10x_conf.h文件根據(jù)所用資源進(jìn)行配置,本例中至少需要包含:#include"stm32f10x_rcc.h“#include"stm32f10x_gpio.h"第三十四頁(yè),共59頁(yè)。(1)進(jìn)行頭文件及相關(guān)引腳的定義。#include<stm32f10x.h>#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOF/*LED使用的GPIO時(shí)鐘*/#defineGPIO_LEDGPIOF/*LED燈使用的GPIO組*/#defineDS1_PINGPIO_Pin_6/*DS1使用的GPIO管腳*/Stm32f10x_rcc.hStm32f10.hStm32f10_gpio.h第三十五頁(yè),共59頁(yè)。(2)使能GPIO時(shí)鐘,由于GPIO的時(shí)鐘是由APB2提供的,所以需要使能RCC_APB2Periph_GPIOF。voidRCC_config(void)/*使能LED燈使用的GPIO時(shí)鐘*/{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);}Stm32f10x_rcc.c第三十六頁(yè),共59頁(yè)。(3)設(shè)置GPIO管腳工作模式及支持的時(shí)鐘速率voidLED_config(void)/*配置LED燈使用的GPIO管腳模式*/{GPIO_InitTypeDefGPIO_InitStructure;

/*定義結(jié)構(gòu)GPIO_InitTypeDef指針,用于配置外設(shè)GPIO信息*/GPIO_InitStructure.GPIO_Pin=DS1_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIO_LED,&GPIO_InitStructure);/*使用的LED燈相關(guān)的GPIO口初始化*/}第三十七頁(yè),共59頁(yè)。(4)主函數(shù)voidDelay(vu32nCount);//延時(shí)子程序intmain(void){RCC_config();//時(shí)鐘初始化設(shè)置LED_config();//LED引腳初始化配置GPIO_SetBits(GPIO_LED,DS1_PIN);/*關(guān)閉DS1指示燈*/while(1) { GPIO_SetBits(GPIO_LED,DS1_PIN);/*關(guān)閉DS1指示燈*/ Delay(0x2FFFFF);//延時(shí)子程序

GPIO_ResetBits(GPIO_LED,DS1_PIN);/*點(diǎn)亮DS1指示燈*/ Delay(0x2FFFFF);//延時(shí)子程序 }}第三十八頁(yè),共59頁(yè)。第三十九頁(yè),共59頁(yè)。仿真結(jié)果第四十頁(yè),共59頁(yè)。5、位段操作復(fù)習(xí):

SRAM區(qū)和Peripheral區(qū)第四十一頁(yè),共59頁(yè)。下列公式給出了位段區(qū)字的某一位是如何與位段別名區(qū)中的字地址建立關(guān)系的:

bit_word_addr=bit_band_base+(byte_offset×32)+(bit_number×4)其中:bit_word_addr為位段別名區(qū)中字的地址,它映射到位段某個(gè)目標(biāo)位;bit_band_base是位段別名區(qū)的起始地址;byte_offset包含了目標(biāo)位的字節(jié)在位段區(qū)的序號(hào);bit_number是目標(biāo)位所在字中的位置(0~31)。以位段區(qū)中地址為0x40000300的字中的位2為例,則對(duì)應(yīng)的位段別名區(qū)中字的地址為:0x42000000+(0x300×32)+(2×4)=0x42006008。也就是說對(duì)0x42006008地址的寫操作,與對(duì)地址0x40000300字節(jié)的位2的執(zhí)行讀-改-寫操作是一樣的,如圖1.9所示。圖1.9位段區(qū)與位段別名區(qū)的對(duì)應(yīng)關(guān)系

第四十二頁(yè),共59頁(yè)。

6、應(yīng)用例程(2)STM32外接發(fā)光二極管的電路圖如圖5.16所示,GPIO管腳與對(duì)應(yīng)的LED燈關(guān)系如表5.36。圖5.16發(fā)光二級(jí)管電路第四十三頁(yè),共59頁(yè)。設(shè)計(jì)要求2:位帶操作編程,讓DS1一個(gè)燈亮滅閃爍。用固件庫(kù)函數(shù)進(jìn)行編程具體分幾步走:(1)引用頭文件,進(jìn)行相關(guān)引腳的定義(2)使能GPIO時(shí)鐘(3)設(shè)置GPIO管腳工作模式及速率(4)主函數(shù)第四十四頁(yè),共59頁(yè)。需在USER文件夾中添加sys.h文件,其中sys.h文件如下:#defineBITBAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))#defineMEM_ADDR(addr)*((volatileunsignedlong*)(addr))#defineBIT_ADDR(addr,bitnum)MEM_ADDR(BITBAND(addr,bitnum))//IO口地址映射#defineGPIOA_ODR_Addr(GPIOA_BASE+12)//0x4001080C//端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)(x=A..E)#defineGPIOA_IDR_Addr(GPIOA_BASE+8)//0x40010808//端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)(x=A..E)……#definePAout(n)BIT_ADDR(GPIOA_ODR_Addr,n)//輸出#definePAin(n)BIT_ADDR(GPIOA_IDR_Addr,n)//輸入….DS1PFout(6)第四十五頁(yè),共59頁(yè)。(1)進(jìn)行相關(guān)引腳的定義。#include"sys.h“#include“stm32f10x.h”#defineRCC_GPIO_LEDRCC_APB2Periph_GPIOF/*LED使用的GPIO時(shí)鐘*/#defineGPIO_LEDGPIOF/*LED燈使用的GPIO組*/#defineDS1_PINGPIO_Pin_6/*DS1使用的GPIO管腳*/#defineDS1PFout(6)/*定義GPIOF.6輸出*/在user文件夾中添加sys.h文件第四十六頁(yè),共59頁(yè)。(2)使能GPIO時(shí)鐘,由于GPIO的時(shí)鐘是由APB2提供的,所以需要使能RCC_APB2Periph_GPIOF。voidRCC_config(void)/*使能LED燈使用的GPIO時(shí)鐘*/{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);}第四十七頁(yè),共59頁(yè)。(3)設(shè)置GPIO管腳工作模式及支持的時(shí)鐘速率voidLED_config(void)/*配置LED燈使用的GPIO管腳模式*/{GPIO_InitTypeDefGPIO_InitStructure;

/*定義結(jié)構(gòu)GPIO_InitTypeDef指針,用于配置外設(shè)GPIO信息*/GPIO_InitStructure.GPIO_Pin=DS1_PIN;GPIO_InitStr

溫馨提示

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

評(píng)論

0/150

提交評(píng)論