(9.5)--5 GPIO接口的应用单片机原理与应用.ppt

上传人:奉*** 文档编号:96451209 上传时间:2023-11-29 格式:PPT 页数:72 大小:6.32MB
返回 下载 相关 举报
(9.5)--5 GPIO接口的应用单片机原理与应用.ppt_第1页
第1页 / 共72页
(9.5)--5 GPIO接口的应用单片机原理与应用.ppt_第2页
第2页 / 共72页
点击查看更多>>
资源描述

《(9.5)--5 GPIO接口的应用单片机原理与应用.ppt》由会员分享,可在线阅读,更多相关《(9.5)--5 GPIO接口的应用单片机原理与应用.ppt(72页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 5.1GPIO的硬件结构和功能的硬件结构和功能 5.2 GPIO寄存器寄存器5.3 GPIO库函数库函数5.4 库函数与寄存器的关系库函数与寄存器的关系5.5 应用实例应用实例第第5章章GPIO原理及应用原理及应用 本章学习的知识点本章学习的知识点 关键要从接口的关键要从接口的外部电气特性外部电气特性、内部工作原内部工作原理理和和应用编程应用编程的方法几个方面来掌握:的方法几个方面来掌握:掌握接口的外部掌握接口的外部引脚功能及电气特性引脚功能及电气特性,以便将它和其,以便将它和其 它外设相连;它外设相连;掌握接口的掌握接口的工作方式工作方式及工作特点,以便选择适合于用及工作特点,以便选择适合

2、于用 户要求的工作方式;户要求的工作方式;掌握接口的掌握接口的控制字控制字(写写)和状态字和状态字(读读),它将决定接口的,它将决定接口的 工作方式及工作特点;工作方式及工作特点;掌握接口的掌握接口的寻址和寄存器寻址和寄存器的读写控制方法;的读写控制方法;掌握接口的掌握接口的初始化编程初始化编程。5.1GPIO硬件硬件结结构和功能构和功能多种功能的双向多种功能的双向IO:多多组组端口(端口(PA、PB、PC、PD、PE、PF、PG)每个端口共每个端口共16位位标标准准IO口可承受口可承受5V电压电压IO口可吸口可吸纳纳25mA电电流流可配置可配置输输出速度达到出速度达到50MHz多达多达16路

3、模路模拟输拟输入入 stm32f10 x_gpio.c文件中的GPIOvoid GPIO_DeInit(GPIO_TypeDef*GPIOx)/*Check the parameters*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx);if(GPIOx=GPIOA)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,DISABLE);else if(GPIOx=GPIOB)RCC_APB2PeriphResetCmd(RCC

4、_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,DISABLE);else if(GPIOx=GPIOG)RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG,ENABLE);RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG,DISABLE);GPIO外部引脚 5.1.1GPIO硬件结构硬件结构GPIO端口的内部结构:八种工作模式八种工作模式 1.1.浮空浮空输入模式输入模式2.2.上拉上拉输入模式输入模式3.3.下拉下拉输入模式输

5、入模式4.4.模拟模拟输入模式输入模式5.5.开漏开漏输出模式输出模式6.6.推挽推挽输出模式输出模式7.7.复用开漏复用开漏输出模式输出模式8.8.复用推挽复用推挽输出模式输出模式 5.1.2复用功能复用功能复用功能复用功能IO口功能口功能中断、中断、TIM、UART等第等第2功能功能注意设置注意设置配置该引脚配置该引脚输入输出模式输入输出模式如果有多个复用功能模块对应同一个引脚,仅如果有多个复用功能模块对应同一个引脚,仅可使能其中之一,其它模块保持可使能其中之一,其它模块保持非使能非使能状态状态 例如要使用例如要使用STM32F103VBT6的的47、48脚的脚的USART3功能,则需要配

6、置功能,则需要配置47脚为复用推挽输出或复用开漏输出,配置脚为复用推挽输出或复用开漏输出,配置48脚为某种输入模式,同时脚为某种输入模式,同时使能使能USART3并保持并保持I2C的的非使能非使能状态状态。5.1.3GPIO输入功能输入功能 述述u 输入电路部分输入电路部分 浮空输入:浮空输入:是指在电路内部既不接上拉电阻(外接是指在电路内部既不接上拉电阻(外接VDD)又)又不接下拉电阻(外接不接下拉电阻(外接VSS)的输入模式,是一个带有施密特触发)的输入模式,是一个带有施密特触发输入的输入的三态缓冲器三态缓冲器,由于它具有很高的直流输入等效阻抗,所以,由于它具有很高的直流输入等效阻抗,所以

7、在使用标准的在使用标准的通信协议(如通信协议(如I2C,USART)时,将时,将I/O口配置成这口配置成这种工作模式,在执行种工作模式,在执行I/O读操作时,将引脚当前电平状态读到内读操作时,将引脚当前电平状态读到内部总线上。部总线上。上拉输入:上拉输入:是指在电路是指在电路内部接上拉电阻内部接上拉电阻的输入模式,再经过的输入模式,再经过施密特触发器转换为施密特触发器转换为0,1电平信号。电平信号。下拉输入:下拉输入:和上拉输入原理相同,只是在电路内部接了和上拉输入原理相同,只是在电路内部接了下拉下拉电阻。电阻。模拟输入:模拟输入:是指不经过内部上拉或下拉,也不经过施密特触是指不经过内部上拉或

8、下拉,也不经过施密特触发器输入模式,它可以直接把发器输入模式,它可以直接把输入的电压信号输入的电压信号传给片上外设模块传给片上外设模块 5.1.4GPIO输出功能输出功能推挽输出推挽输出推挽输出的基本功能推挽输出的基本功能 通用推挽输出通用推挽输出 复用推挽输出复用推挽输出 开漏输出开漏输出开漏输出的基本功能开漏输出的基本功能 通用开漏输出通用开漏输出 复用开漏输出复用开漏输出 u输出电路部分输出电路部分 推推挽挽输输出出:是是指指线线路路经经过过P-MOSP-MOS(PositivePositive)和和N-N-MOS(Negative)MOS(Negative)管管组组成成的的单单元元电电

9、路路,在在输输出出高高电电平平(3.3v3.3v)时时,P-MOSP-MOS负责灌电流。在输出低电平(负责灌电流。在输出低电平(0v0v)时)时N-MOSN-MOS负责拉电流负责拉电流。开开漏漏输输出出:是是指指线线路路只只经经过过了了N-MOS而而没没有有接接负负责责灌灌电电流流的的P-MOS管管的的输输出出模模式式。在在输输出出1时时断断开开(此此时时相相当当于于高高阻阻态态),在输出,在输出0时由时由N-MOS拉低拉低。复复用用开开漏漏/推推挽挽输输出出:这这两两种种输输出出模模式式的的原原理理与与普普通通输输出出模模式相同,只不过这两种输出模式常用于特定的场合式相同,只不过这两种输出模

10、式常用于特定的场合。(1)推挽输出的基本功能)推挽输出的基本功能(2)通用推挽输出)通用推挽输出(3)复用推挽输出)复用推挽输出(4)开漏输出的基本功能)开漏输出的基本功能(2)通用开漏输出)通用开漏输出(3)复用开漏输出)复用开漏输出 5.1.5GPIO速度选择速度选择I/O口的口的输输出模式下,有出模式下,有3种种输输出速度可出速度可选选,分,分别别为为2MHz、10MHz和和50MHz是指是指I/O口口驱动电驱动电路路的的响响应应速度速度而不是而不是输输出信号的出信号的速度速度通通过选择过选择速度来速度来选择选择不同的不同的输输出出驱动驱动模模块块,达到,达到最佳的最佳的噪声控制噪声控制

11、和和降低功耗降低功耗的目的。高的目的。高频驱动电频驱动电路噪声也高,当不需要高的路噪声也高,当不需要高的输输出出频频率率时时,请选请选用用低低频驱动电频驱动电路,路,这样这样有利于提高系有利于提高系统统的的EMI(电磁电磁干扰干扰)性能。性能。5.1.6钳位功能钳位功能-0.6V,3.9 小结输出模式输出模式 输出信号来自输出信号来自 推挽或开漏推挽或开漏 输出带宽输出带宽 通用开漏输出通用开漏输出 输出数据寄存器输出数据寄存器 开漏开漏 可选:可选:2MHz10MHz50MHz通用推挽输出通用推挽输出 推挽推挽 开漏复用输出开漏复用输出 片上外设片上外设 开漏开漏 推挽复用输出推挽复用输出

12、推挽推挽 表5-1 GPIO输出模式 小结表5-2 GPIO输入模式 输入模式输入模式 输入信号去向输入信号去向 上拉或下上拉或下拉拉 施密特触发器施密特触发器 模拟输入模拟输入 片上模拟外设片上模拟外设ADC 无无 关闭关闭 浮空输入浮空输入 输入数据寄存器或片输入数据寄存器或片上外设上外设 无无 激活激活 下拉输入下拉输入 输入数据寄存器或片输入数据寄存器或片上外设上外设 下拉下拉 激活激活 上拉输入上拉输入 输入数据寄存器或片输入数据寄存器或片上外设上外设 上拉上拉 激活激活 5.2GPIO寄存器寄存器 表表1GPIO相关寄存器功能相关寄存器功能寄存器寄存器 功能功能 GPIOx_CRL

13、 低位配置寄存器用来设置端口低低位配置寄存器用来设置端口低8位的工作模式位的工作模式 GPIOx_CRH 用来设置端口高用来设置端口高8位工作模式位工作模式 GPIOx_IDR 如果端口被配置成输入端口,可以从如果端口被配置成输入端口,可以从GPIOx_IDR相应位读数据相应位读数据 GPIOx_ODR 如果端口被配置成输出端口,可以从如果端口被配置成输出端口,可以从GPIOx_ ODR相应位读或写数据相应位读或写数据 GPIOx_BSRR 通过该寄存器可以对端口数据输出寄存器通过该寄存器可以对端口数据输出寄存器GPIOx_ODR每一位进行置每一位进行置1和复位操作和复位操作 GPIOx_BR

14、R 通过该寄存器可以对端口数据输出寄存器通过该寄存器可以对端口数据输出寄存器GPIOx_ODR每一位进行复位操作每一位进行复位操作 GPIOx_LCKR 当执行正确的写序列设置了位当执行正确的写序列设置了位16(LCKK)时,该时,该寄存器用来锁定端口位的配置寄存器用来锁定端口位的配置 STM32每个每个IO端口有端口有7个寄存器个寄存器来控制来控制,分别是:分别是:CRL和和CRH:配置模式的配置模式的2个个32位的位的端口配置寄存端口配置寄存器,器,控制着每个控制着每个IO口的模式及输出速率;口的模式及输出速率;IDR和和ODR:32位的位的数据寄存器数据寄存器;BSRR:32位的位的置位

15、置位/复位寄存器复位寄存器;BRR:16位的位的复位寄存器复位寄存器;LCKR:32位的位的锁存寄存器锁存寄存器;端口低配置寄存器端口低配置寄存器CRL的描述,如下图所示:的描述,如下图所示:端口低配置寄存器端口低配置寄存器CRH的描述,如下图所示:的描述,如下图所示:端口位配置表端口位配置表配置模式配置模式CNF1CNF0MODE1:0PxODR寄存寄存器器通用输出通用输出推挽推挽00011011参照下表参照下表0或或1开漏开漏10或或1复用功能复用功能输出输出推挽推挽10任意任意开漏开漏1任意任意输入输入模拟输入模拟输入0000任意任意输入浮空输入浮空1任意任意输入下拉输入下拉100输入上

16、拉输入上拉1输出模式位表输出模式位表MODE1:0含义含义00保留保留01最大输出速率最大输出速率10MHz10最大输出速率最大输出速率2MHz11最大输出速率最大输出速率50MHz IDR只用了低只用了低16位。位。该寄存器为只读寄存器,并且只能该寄存器为只读寄存器,并且只能以以16位的形式读出。该寄存器各位的描述如下图所示:位的形式读出。该寄存器各位的描述如下图所示:IDR-输入数据寄存器输入数据寄存器 ODR是一个端口输出数据寄存器,只用了低是一个端口输出数据寄存器,只用了低16位位。该寄存器虽然为可读写,但是从该寄存器读出来的数该寄存器虽然为可读写,但是从该寄存器读出来的数据都是据都是

17、0。只有写是有效的。其作用就是控制端口的输。只有写是有效的。其作用就是控制端口的输出。该寄存器的各位描述如下图所示:出。该寄存器的各位描述如下图所示:ODR-ODR-输出数据寄存器输出数据寄存器 5.3GPIO库库函数函数 GPIO完整的固件库完整的固件库stm32f10 x_gpio.c是用是用C语语言言编编写的写的GPIO的的驱动驱动源程序文件源程序文件stm32f10 x_gpio.cstm32f10 x_gpio.hgpio的的头头文件,包含函数定文件,包含函数定义义以及函数使用以及函数使用的的变变量量stm32f10 x_gpio.h文件文件 1、GPIO_Init()函数名 GPI

18、O_Init函数原形 voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)功能描述 根据根据GPIO_InitStruct中指定的参数初始化外设中指定的参数初始化外设GPIOx寄存器寄存器输入参数1 GPIOx:x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设外设输入参数2 GPIO_InitStruct:指向结构:指向结构GPIO_InitTypeDef的指的指针,包含了外设针,包含了外设GPIO的配置信息的配置信息输出参数 无 返回值 无 先决条件 无 被调用函数 无 5.4库库函数和寄存器的

19、关系函数和寄存器的关系1.GPIO_Configuration(void)分析分析voidGPIO_Configuration(void)GPIO_InitTypeDefGPIO_InitStructure;(1)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;(2)GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;(3)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;(4)GPIO_Init(GPIOA,&GPIO_InitStructure);(5)库函数和寄存器的关系库函

20、数和寄存器的关系1.GPIO_Configuration(void)分析 void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;(1)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;(2)GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;(3)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;(4)GPIO_Init(GPIOA,&GPIO_InitStructure);(5)1 10 0GPIOA_CR

21、L,0 x40010800地址,赋值0 xXXX3 XXXX GPIO_Init(GPIOA,&GPIO_InitStructure)语句语句(5)是一个函数调用,即调用是一个函数调用,即调用GPIO_Init函数,函数,并提供给该函数并提供给该函数2个参数,分别为个参数,分别为GPIOA和和&GPIO_InitStructure,其中,其中&GPIO_InitStructure表示结构体变量表示结构体变量GPIO_InitStructure的地址,而的地址,而GPIOA则在则在“stm32f10 x.h”文件中找到定义:文件中找到定义:#defineGPIOA(GPIO_TypeDef*)G

22、PIOA_BASE)GPIOA_BASE=0 x40000000+0 x10000+0 x0800 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4 此句是一个赋值语句此句是一个赋值语句,把,把GPIO_Pin_4赋给赋给GPIO_InitStructure结构体中的成员结构体中的成员GPIO_Pin,可以在可以在“stm32f10 x_gpio.h”文件中找到对文件中找到对GPIO_Pin_4做的宏定义:做的宏定义:#defineGPIO_Pin_4(u16)0 x0010)此句的本质是将此句的本质是将16位数位数0 x0010赋给赋给GPIO_InitStruc

23、ture结构体中的成员结构体中的成员GPIO_Pin。GPIOSpeed_TypeDef 在“stm32f10 x_gpio.h”文件中找到对GPIOSpeed_TypeDef的定义:typedef enum GPIO_Speed_10MHz=1,GPIO_Speed_2MHz,GPIO_Speed_50MHzGPIOSpeed_TypeDef;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz 语句语句(3)将将GPIO_Speed_50MHz赋给赋给GPIO_InitStructure结构体中的成员结构体中的成员GPIO_Speed,但注意到此处但

24、注意到此处GPIO_Speed_50MHz只是一个枚举变量只是一个枚举变量,按照按照GPIOSpeed_TypeDef的设置其值为的设置其值为3。GPIOMode_TypeDef/*Configuration Mode enumeration-*/typedef enum GPIO_Mode_AIN =0 x0,GPIO_Mode_IN_FLOATING=0 x04,GPIO_Mode_IPD =0 x28,GPIO_Mode_IPU =0 x48,GPIO_Mode_Out_OD =0 x14,GPIO_Mode_Out_PP =0 x10,GPIO_Mode_AF_OD =0 x1C,GP

25、IO_Mode_AF_PP =0 x18GPIOMode_TypeDef;/定义定义GPIO管脚管脚 的的 工作模式工作模式工作模式:用低工作模式:用低4位位 区分。区分。输输 入入输输 出出输入、输出判断:高输入、输出判断:高4位为位为1-输出,否则为输入。输出,否则为输入。GPIOMode_TypeDefp输入浮空:输入浮空:IN_FLOATINGp输入上拉:输入上拉:IPU(InPush-Up)p输入下拉输入下拉:IPD(InPush-Down)p模拟输入模拟输入:AIN(AnalogIn)p开漏输出:开漏输出:Out_OD (Open Drain Output)p推挽式输出推挽式输出:

26、Out_PP (Push-Pull Output)p推挽式复用功能推挽式复用功能:AF_PP (Push-Pull Output Alternate-Function)p开漏复用功能开漏复用功能:AF_OD (Open Drain Output Alternate-Function)输输 入入输输 出出复复用用输输 出出 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP 语句(4)把GPIO_Mode_Out_PP 赋给GPIO_InitStructure 结构体中的成员GPIO_Mode,从上文可知GPIO_Mode_Out_PP 的值为0 x10。

27、GPIO_Configuration()小结void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;(1)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;(2)GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;(3)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;(4)GPIO_Init(GPIOA,&GPIO_InitStructure);(5)对语句5代码进行一个总结:调用GPIO_Init 函数,并

28、将STM32 微控制器的GPIOA 设备地址和所定义的结构体变量GPIO_InitStructure 的地址传入。2.GPIO_Init()2.GPIO_Init()内部分析内部分析(简介)简介)voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)/*初始化各个变量初始化各个变量*/uint32_tcurrentmode=0 x00,currentpin=0 x00,pinpos=0 x00,pos=0 x00;uint32_ttmpreg=0 x00,pinmask=0 x00;/currentmode用于存放临

29、时的用于存放临时的LCIR/currentpin用于存放配置的引脚位用于存放配置的引脚位/pinpos用于存放当前操作的引脚号用于存放当前操作的引脚号/pos存放当前操作的引脚位存放当前操作的引脚位/tmreg当前的当前的CIR/pinmask/*检查参数是否正确检查参数是否正确*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx);assert_param(IS_GPIO_MODE(GPIO_InitStruct-GPIO_Mode);assert_param(IS_GPIO_PIN(GPIO_InitStruct-GPIO_Pin);2.GPIO_Init()2.

30、GPIO_Init()内部分析内部分析 /取出配置信息里面的模式信息并且取它的低取出配置信息里面的模式信息并且取它的低4位位currentmode=(uint32_t)GPIO_InitStruct-GPIO_Mode)&(uint32_t)0 x0F);if(uint32_t)GPIO_OInitStruct-GPIO_Mode)&(uint32_t)0 x10)!=0 x00)/输输出模式出模式/如果欲如果欲设设置置为为任意一种任意一种输输出模式出模式,则则再再检查检查”翻翻转转速率速率”参数是否正确参数是否正确assert_param(IS_GPIO_SPEED(GPIO_InitStr

31、uct-GPIO_Speed);/将速度信息放入将速度信息放入currentmode低低2位位currentmode|=(uint32_t)GPIO_InitStruct-GPIO_Speed;GPIO_Mode_Out_PP=0 x10currentmode=0 x00GPIO_Speed_50MHz=3=11Bcurrentmode=0 x03=00000011B 2.GPIO_Init()2.GPIO_Init()内部分析内部分析 /*设设置低置低8位引脚位引脚(即即pin0-pin7)*/if(uint32_t)GPIO_InitStruct-GPIO_Pin&(uint32_t)0

32、x00FF)!=0 x00)/引脚有定引脚有定义义/*读读出当前配置字出当前配置字*/tmpreg=GPIOx-CRL;/循循环环低低8位引脚位引脚for(pinpos=0 x00;pinpos0 x08;pinpos+)/*获获取将要配置的引脚号取将要配置的引脚号*/pos=(uint32_t)0 x01)GPIO_Pin)&pos;tmpreg=0 xXXXXXXXX4号引脚号引脚pos=0 x00000010currentpin=0 x00000010 2.GPIO_Init()2.GPIO_Init()内部分析内部分析 if(currentpin=pos)/如果当前引脚在配置信息里存在

33、如果当前引脚在配置信息里存在/*先清除先清除对应对应引脚的配置字引脚的配置字*/pos=pinpos2;/pos=引脚号引脚号4pinmask=(uint32_t)0 x0F)pos;/1111引脚号引脚号4,根据根据CRL的的结结构很容易理解构很容易理解tmpreg&=pinmask;/当前当前应该应该操作的操作的CRL位清位清0/*写入新的配置字写入新的配置字*/tmpreg|=(currentmodeGPIO_Mode=GPIO_Mode_IPD)/端口置端口置为为高高电电平平GPIOx-BRR=(uint32_t)0 x01)GPIO_Mode=GPIO_Mode_IPU)/端口清端口

34、清0GPIOx-BSRR=(uint32_t)0 x01)CRL=tmpreg;tmpreg=0 xXXX3XXXX 总结固件库首先将各个设备所有寄存器的配置字进行固件库首先将各个设备所有寄存器的配置字进行预先定义预先定义然后封装在结构或枚举变量中然后封装在结构或枚举变量中待用户调用对应的固件库函数时,会根据用户传待用户调用对应的固件库函数时,会根据用户传入的参数从这些封装好的结构或枚举变量中取出入的参数从这些封装好的结构或枚举变量中取出对应的配置字对应的配置字最后写入寄存器中,完成对底层寄存器的配置。最后写入寄存器中,完成对底层寄存器的配置。5.5GPIO应用实例应用实例实验实验2 2 跑马

35、灯的控制跑马灯的控制 实验实验目的目的:1、掌握基本的、掌握基本的IO读写技巧读写技巧 2、熟悉集成开发环境、熟悉集成开发环境RealViewMDK4.10的使用的使用 3、STM32 IO口简介口简介 实验预期效果:实验预期效果:作作为为所所有有核核心心板板的的经经典典入入门门实实验验,莫莫过过于于跑跑马马灯灯了了。STM32STM32核核心心板板有有8 8个个LEDLED灯灯,本本实实验验将将通通过过教教你你如如何何控控制制这这些些灯灯实实现现交交替替闪闪烁烁的的类类跑跑马马灯灯效效果果。该该实实验验的的关关键键在在于于如如何何控控制制STM32STM32的的IOIO口口输输出出。了了解解

36、了了STM32STM32的的IOIO口口如如何何输输出出的的,就就可可以以实实现现跑跑马马灯灯了了。通通过过这这一一节节的的学学习习,你你将将初初步步掌掌握握STM32STM32基本基本IOIO口的使用,而这是迈向口的使用,而这是迈向STM32STM32的第一步。的第一步。硬件电路连接如图硬件电路连接如图:概述概述6.56.5例程源代码分析例程源代码分析工程组详情见图:第第6 6章章 通用通用IOIO(GPIOGPIO)理论与实战)理论与实战 u源码分析源码分析 先看先看UserUser组的组的main.cmain.c文件文件 /*/*STM32 *STM32开发板范例代码开发板范例代码 *跑

37、马灯实验跑马灯实验 *接线接线 :开发板上已经接好:开发板上已经接好:PE0PE7 -LED0LED7PE0PE7 -LED0LED7 * *版本号:版本号:v1.0v1.0 *时间时间 :2011.04.222011.04.22 *作者作者 :bkrc_hrjbkrc_hrj*/*/#includestm32f10 x.h#includestm32f10 x.h#include LED.h#include LED.h#include sys.h#include sys.h#include delay.h#include delay.h“int main()/int main()/主函数主函数

38、 u8 i,j;u8 i,j;u16 a,b;u16 a,b;LED_Init();LED_Init();delay_init();delay_init();main.cmain.c文件的内容分析文件的内容分析 while(1)while(1)a=0 x0001;a=0 x0001;for(i=0;i8;i+)for(i=0;i8;i+)GPIO_Write(GPIOE,a);GPIO_Write(GPIOE,a);delay_ms(1000);delay_ms(1000);a=a1;a=a1;b=0 x0080;b=0 x0080;for(j=0;j8;j+)for(j=0;j1;b=b1;

39、(2 2)Led.hLed.h#ifndef _LED_H#ifndef _LED_H#define _LED_H#define _LED_Hvoid LED_Init(void);void LED_Init(void);#endif#endif#includestm32f10 x.h#include LED.h#include sys.h#include delay.hvoid LED_Init()GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitS

40、tructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOE,&GPIO_InitStructure);LED.CLED.C文件的内容文件的内容 教材的应用举例实现PA0至PA3所接4个发光二极管顺次亮灭(1)配置输入的时钟Sys

41、temInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);(2)声明GPIO结构void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/GPIO状态恢复默认参数 /*Configure PA.03 as Output push-pull*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;/管脚位置定义,标号可以是NONE、ALL、0至15 GPIO_InitS

42、tructure.GPIO_Speed=GPIO_Speed_50MHz;/输出速度50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽输出模式GPIO_Init(GPIOA,&GPIO_InitStructure);/A组GPIO初始化 GPIOx_ODR位位定义定义位位31:16保留,始终读为保留,始终读为0。位位15:0ODRy15:0:端口输出数据:端口输出数据(y=015)(Port output data)这些位可读可写并只能以半字这些位可读可写并只能以半字(16位位)的形式操作。的形式操作。注:对注:对GPIOx_BSRR

43、(x=AE),可以分别地对各个,可以分别地对各个ODR位进行独立的设置位进行独立的设置/清除。清除。方法1:ODR寄存器法while(1)GPIOA-ODR=0 xfffe;1111 1111 1111 1110B Delay(0XFFFFF);GPIOA-ODR=0 xffff;1111 1111 1111 1111B Delay(0XFFFFF);GPIOA-ODR=0 xfffd;Delay(0XFFFFF);GPIOA-ODR=0 xffff;Delay(0XFFFFF);GPIOA-ODR=0 xfffb;Delay(0XFFFFF);GPIOA-ODR=0 xffff;Delay(

44、0XFFFFF);GPIOA-ODR=0 xfff7;Delay(0XFFFFF);GPIOA-ODR=0 xffff;Delay(0XFFFFF);GPIOx_BSRR位位定义定义位位31:160:对相应的:对相应的ODRy位不产生位不产生影响影响 1:清除对应的:清除对应的ODRy位为位为0 注注:如果同时设置了:如果同时设置了BSy和和BRy的对应位,的对应位,BSy位起作用。位起作用。位位15:00:对相应的:对相应的ODRy位不产生影响位不产生影响;1:设置对应的:设置对应的ODRy位为位为1 位位定义定义位位31:1631:16保留。保留。位位15:015:0BRy:BRy:清除端

45、口清除端口x x的位的位y(y=0y(y=015)(Port 15)(Port x Reset bit y)x Reset bit y)这些位只能写入并只能以这些位只能写入并只能以半字半字(16(16位位)的形式操作的形式操作。0 0:对对应的:对对应的ODRyODRy位不产生影响位不产生影响 1 1:清除对应的:清除对应的ODRyODRy位为位为0 0。方法2:位设置/清除寄存器法while(1)GPIOA-BRR|=0 x0001;0000 0000 0000 0001B Delay(0XFFFFF);GPIOA-BSRR|=0 x000f;0000 0000 0000 1111B Del

46、ay(0XFFFFF);GPIOA-BRR|=0 x0002;Delay(0XFFFFF);GPIOA-BSRR|=0 x000f;Delay(0XFFFFF);GPIOA-BRR|=0 x0004;Delay(0XFFFFF);GPIOA-BSRR|=0 x000f;Delay(0XFFFFF);GPIOA-BRR|=0 x0008;Delay(0XFFFFF);GPIOA-BSRR|=0 x000f;Delay(0XFFFFF);GPIOx_BSRR位位定义定义位位31:160:对相应的:对相应的ODRy位不产生位不产生影响影响 1:清除对应的:清除对应的ODRy位为位为0 注注:如果同时

47、设置了:如果同时设置了BSy和和BRy的对应位,的对应位,BSy位起作用。位起作用。位位15:00:对相应的:对相应的ODRy位不产生影响位不产生影响;1:设置对应的:设置对应的ODRy位为位为1 GPIO_WriteBit()typedefenumBit_RESET=0,Bit_SETBitAction;voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal)/*Checktheparameters*/assert_param(IS_GPIO_ALL_PERIPH(GPIOx);assert_param(IS

48、_GET_GPIO_PIN(GPIO_Pin);assert_param(IS_GPIO_BIT_ACTION(BitVal);if(BitVal!=Bit_RESET)GPIOx-BSRR=GPIO_Pin;elseGPIOx-BRR=GPIO_Pin;方法4:GPIO_WriteBit()函数法while(1)GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0 x00);/GPIOA_Pin_0写入0;Delay(0XFFFFF);GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0 x01);/GPIOA_Pin_0写

49、入1;Delay(0XFFFFF);GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0 x00);/GPIOA_Pin_1写入0;Delay(0XFFFFF);GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0 x01);/GPIOA_Pin_1写入1;Delay(0XFFFFF);GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)0 x00);/GPIOA_Pin_2写入0;Delay(0XFFFFF);GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)

50、0 x01);/GPIOA_Pin_2写入1;Delay(0XFFFFF);GPIO_WriteBit(GPIOA,GPIO_Pin_3,(BitAction)0 x00);/GPIOA_Pin_3写入0;Delay(0XFFFFF);GPIO_WriteBit(GPIOA,GPIO_Pin_3,(BitAction)0 x01);/GPIOA_Pin_3写入1;Delay(0XFFFFF);GPIO_SetBits()和GPIO_ResetBits()void GPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin)/*Check the para

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁