嵌入式系统设计(STM32)第3讲_第1页
嵌入式系统设计(STM32)第3讲_第2页
嵌入式系统设计(STM32)第3讲_第3页
嵌入式系统设计(STM32)第3讲_第4页
嵌入式系统设计(STM32)第3讲_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第第3讲讲 GPIOGPIO-General purpose input/output主要内容主要内容n3.1 GPIO结构结构n3.2 GPIO寄存器寄存器n3.3 GPIO函数函数n3.4 GPIO编程举例编程举例n3.5 练习题练习题n3.6 实验实验GPIO的功能的功能(1)最基本的功能是可以驱动)最基本的功能是可以驱动LED、产生、产生PWM、驱动蜂鸣器等。、驱动蜂鸣器等。(2)具有单独的位设置或位清除,编程简单。端口配置好后,只需)具有单独的位设置或位清除,编程简单。端口配置好后,只需GPIO_SetBits(GPIOx, GPIO_Pin_x) 就可以实现对就可以实现对GPIO

2、x的的Pinx位为高位为高电平;电平; GPIO_ResetBits(GPIOx, GPIO_Pin_x)就可以实现对就可以实现对GPIOx的的Pinx位为低电平。位为低电平。(3)具有外部中断)具有外部中断/唤醒能力,端口配置成输入模式时,具有外部中断能力。唤醒能力,端口配置成输入模式时,具有外部中断能力。(4)具有复用功能,复用功能的端口兼有)具有复用功能,复用功能的端口兼有I/O功能等。功能等。(5)软件重新映射)软件重新映射I/O复用功能:为了使不同器件封装的外设复用功能:为了使不同器件封装的外设I/O功能的数量功能的数量达到最优,可以把一些服用功能重新映射到其他一些引脚上。这可以通过

3、达到最优,可以把一些服用功能重新映射到其他一些引脚上。这可以通过软件配置到相应的寄存器来完成。软件配置到相应的寄存器来完成。(6)GPIO口的配置具有锁定机制。当配置好口的配置具有锁定机制。当配置好GPIO口后,在端口位上执行了口后,在端口位上执行了锁定(锁定(LOCK),可以通过程序锁住配置组合,在下一次复位之前,将不),可以通过程序锁住配置组合,在下一次复位之前,将不能再更改端口位的配置。能再更改端口位的配置。3.1 GPIO结构结构nI/O端口位的基本结构图端口位的基本结构图 钳位保护二极管钳位保护二极管nGPIO内部具有钳位保护二极管,其作用是防止从内部具有钳位保护二极管,其作用是防止

4、从外部管脚外部管脚Pin输入的电压过高或者过低。输入的电压过高或者过低。nVDD正常供电是正常供电是3.3V。如果从。如果从Pin输入的信号(假输入的信号(假设任何输入信号都有一定的内阻)电压超过设任何输入信号都有一定的内阻)电压超过VDD加上二极管加上二极管D1的导通压降(假定在的导通压降(假定在0.6V左右),左右),则二极管则二极管D1导通,会把多于的电流引到导通,会把多于的电流引到VDD,而,而真正输入到内部的信号电压不会超过真正输入到内部的信号电压不会超过3.9V。n同理,如果从同理,如果从Pin输入的信号电压比输入的信号电压比GND还低,则还低,则由于二极管由于二极管D2的作用,会

5、把实际输入内部的信号的作用,会把实际输入内部的信号电压钳制在电压钳制在 0.6V左右。左右。对于对于GPIO的配置种类有的配置种类有8种之多:种之多:n(1)GPIO_Mode_AIN 模拟输入模拟输入 n(2)GPIO_Mode_IN_FLOATING 浮空输入浮空输入n(3)GPIO_Mode_IPD 下拉输入下拉输入 n(4)GPIO_Mode_IPU 上拉输入上拉输入n(5)GPIO_Mode_Out_OD 开漏输出开漏输出n(6)GPIO_Mode_Out_PP 推挽输出推挽输出n(7)GPIO_Mode_AF_OD 复用开漏输出复用开漏输出n(8)GPIO_Mode_AF_PP 复

6、用推挽输出复用推挽输出浮空输入(高阻输入)浮空输入(高阻输入)输入模式的结构比较简单,就是一个带有施输入模式的结构比较简单,就是一个带有施密特触发输入(密特触发输入(Schmitt-triggered input)的三态缓冲器(的三态缓冲器(U1),并具有很高的输入等),并具有很高的输入等效阻抗。效阻抗。施密特触发输入的作用是能将缓慢变化的或施密特触发输入的作用是能将缓慢变化的或者是畸变的输入脉冲信号整形成比较理想的者是畸变的输入脉冲信号整形成比较理想的矩形脉冲信号。矩形脉冲信号。执行执行GPIO管脚读操作时,在读脉冲管脚读操作时,在读脉冲(Read Pulse)的作用下会把管脚()的作用下会

7、把管脚(Pin)的当前电平状态读到内部总线上的当前电平状态读到内部总线上(Internal Bus)。)。在不执行读操作时,外部管脚与内部总线之在不执行读操作时,外部管脚与内部总线之间是隔离的。间是隔离的。推挽输出推挽输出 执行执行GPIO管脚写操作时,在写管脚写操作时,在写脉冲(脉冲(Write Pulse)的作用下,数)的作用下,数据被锁存到据被锁存到Q和和/Q。 T1和和T2构成构成CMOS反相器,反相器,T1导通或导通或T2导通时都表现出较低的阻导通时都表现出较低的阻抗,但抗,但T1和和T2不会同时导通或同时不会同时导通或同时关闭,最后形成的是推挽输出。关闭,最后形成的是推挽输出。开漏

8、输出开漏输出开漏输出只有下拉晶体管开漏输出只有下拉晶体管T1而没有上拉晶体而没有上拉晶体管。同样,管。同样,T1实际上也是多组可编程选择的实际上也是多组可编程选择的晶体管。开漏输出的实际作用就是一个开关,晶体管。开漏输出的实际作用就是一个开关,输出输出“1”时断开、输出时断开、输出“0”时连接到时连接到GND。开漏输出结构没有内部上拉,因此在实际应开漏输出结构没有内部上拉,因此在实际应用时通常都要外接合适的上拉电阻(通常采用时通常都要外接合适的上拉电阻(通常采用用4.710k)。)。开漏输出能够方便地实现开漏输出能够方便地实现“线与线与”逻辑功能,逻辑功能,即多个开漏的管脚可以直接并在一起使用

9、,即多个开漏的管脚可以直接并在一起使用,并统一外接一个合适的上拉电阻,就自然形并统一外接一个合适的上拉电阻,就自然形成成“逻辑与逻辑与”关系。关系。开漏输出的另一种用途是能够方便地实现不开漏输出的另一种用途是能够方便地实现不同逻辑电平之间的转换(如同逻辑电平之间的转换(如3.3V到到5V之间),之间),只需外接一个上拉电阻,而不需要额外的转只需外接一个上拉电阻,而不需要额外的转换电路。换电路。输入配置输入配置当当I/O端口配置为输入时:端口配置为输入时: 输出缓冲器被禁止输出缓冲器被禁止 施密特触发输入被激活施密特触发输入被激活 根据输入配置根据输入配置(上拉,下拉或浮动上拉,下拉或浮动)的不

10、同,弱上拉和的不同,弱上拉和下拉电阻被连接下拉电阻被连接 出现在出现在I/O脚上的数据在每个脚上的数据在每个APB2时钟被采样到输入时钟被采样到输入数据寄存器数据寄存器 对输入数据寄存器的读访问可得到对输入数据寄存器的读访问可得到I/O状态状态 输入浮空输入浮空/上拉上拉/下拉配置图下拉配置图 输出配置输出配置当当I/O端口被配置为输出时:端口被配置为输出时: n输出缓冲器被激活输出缓冲器被激活 开漏模式:输出寄存器上的开漏模式:输出寄存器上的0激活激活N-MOS,而输出寄存器上的,而输出寄存器上的1将端口置于高阻状态将端口置于高阻状态(P-MOS从不被激活从不被激活)。 推挽模式:输出寄存器

11、上的推挽模式:输出寄存器上的0激活激活N-MOS,而输出寄存器上的,而输出寄存器上的1将激活将激活P-MOS。 n施密特触发输入被激活施密特触发输入被激活 n弱上拉和下拉电阻被禁止弱上拉和下拉电阻被禁止 n出现在出现在I/O脚上的数据在每个脚上的数据在每个APB2时钟被采样到输入数据寄时钟被采样到输入数据寄存器存器 n在开漏模式时,对输入数据寄存器的读访问可得到在开漏模式时,对输入数据寄存器的读访问可得到I/O状态状态 n在推挽模式时,对输出数据寄存器的读访问得到最后一次写在推挽模式时,对输出数据寄存器的读访问得到最后一次写的值。的值。I/O端口位的输出配置图端口位的输出配置图返回返回3.2

12、GPIO寄存器寄存器每个每个GPI/O端口有:端口有:n两个两个32位配置寄存器位配置寄存器(GPIOx_CRL,GPIOx_CRH),n两个两个32位数据寄存器位数据寄存器(GPIOx_IDR,GPIOx_ODR),n一个一个32位置位位置位/复位寄存器复位寄存器(GPIOx_BSRR),n一个一个16位复位寄存器位复位寄存器(GPIOx_BRR)n一个一个32位锁定寄存器位锁定寄存器(GPIOx_LCKR)。 GPIO端口的每个位可以由软件分别配置成多种模式。端口的每个位可以由软件分别配置成多种模式。必须以字必须以字(32位位)的方式操作这些外设寄存器。的方式操作这些外设寄存器。GPIOx

13、_BSRR和和GPIOx_BRR寄存器允许对任何寄存器允许对任何GPIO寄存器的读寄存器的读/更改的独立访问,这样,在读和更改访问之更改的独立访问,这样,在读和更改访问之间产生间产生IRQ时不会发生危险。时不会发生危险。 3.2 GPIO寄存器寄存器nCRL端口配置低寄存器端口配置低寄存器 nCRH 端口配置高寄存器端口配置高寄存器 nIDR 端口输入数据寄存器端口输入数据寄存器 nODR 端口输出数据寄存器端口输出数据寄存器 nBSRR 端口位设置端口位设置/复位寄存器复位寄存器 nBRR 端口位复位寄存器端口位复位寄存器 nLCKR 端口配置锁定寄存器端口配置锁定寄存器 nEVCR 事件控

14、制寄存器事件控制寄存器 nMAPR 复用重映射和调试复用重映射和调试 nEXTICR 外部中断线路外部中断线路0-15配置寄存器配置寄存器端口配置低寄存器端口配置低寄存器GPIOx_CRL) (x=A.E) 复位值:复位值:0 x4444 4444CNFy1:0:端口:端口x配置位配置位(y = 07) (Port x configuration bits) MODEy1:0:端口:端口x的模式位的模式位(y = 07) (Port x mode bits) 端口位配置表端口位配置表 n复位期间和刚复位后,复用功能未开启,复位期间和刚复位后,复用功能未开启,I/O端口被配置端口被配置成成浮空输

15、入模式浮空输入模式(CNFx1:0=01b,MODEx1:0=00b)。 输出模式位 端口配置高寄存器端口配置高寄存器(GPIOx_CRH) (x=A.E)复位值:复位值:0 x4444 4444 CNFy1:0:端口:端口x配置位配置位(y = 815) (Port x configuration bits) MODEy1:0:端口:端口x的模式位的模式位(y = 815) (Port x mode bits) 端口输入数据寄存器端口输入数据寄存器(GPIOx_IDR) (x=A.E) 复位值:复位值:0 x0000 XXXX nIDRy15:0IDRy15:0:端口输入数据:端口输入数据(

16、y = 015) (Port input data) (y = 015) (Port input data) n这些位为只读并只能以字这些位为只读并只能以字(16(16位位) )的形式读出。的形式读出。n读出的值为对应读出的值为对应I/OI/O口的状态。口的状态。 端口输出数据寄存器端口输出数据寄存器(GPIOx_ODR) (x=A.E) 复位值:复位值:0 x0000 0000 nODRy15:0:端口输出数据:端口输出数据(y = 015) (Port output data) n这些位可读可写并只能以字这些位可读可写并只能以字(16位位)的形式操作。的形式操作。 n注:对注:对GPIOx

17、_BSRR(x = AE),可以分别地对各个,可以分别地对各个ODR位位进行独立的设置进行独立的设置/清除。清除。 端口位设置端口位设置/清除寄存器清除寄存器(GPIOx_BSRR)复位值:复位值:0 x0000 0000 nBRy: BRy: 清除端口清除端口x x的位的位y (y = 015) (Port x Reset bit y) y (y = 015) (Port x Reset bit y) 这些位只这些位只能写入并只能以字能写入并只能以字(16(16位位) )的形式操作。的形式操作。 n0 0:对对应的:对对应的ODRyODRy位不产生影响,位不产生影响,1 1:清除对应的:清除

18、对应的ODRyODRy位为位为0 0 nBSy: BSy: 设置端口设置端口x x的位的位y y。n0 0:对对应的:对对应的ODRyODRy位不产生影响,位不产生影响,1 1:设置对应的:设置对应的ODRyODRy位为位为1 1n注:如果同时设置了注:如果同时设置了BSyBSy和和BRyBRy的对应位,的对应位,BSyBSy位起作用。位起作用。 端口位清除寄存器端口位清除寄存器(GPIOx_BRR) 复位值:复位值:0 x0000 0000 nBRy: 清除端口清除端口x的位的位y (y = 015) (Port x Reset bit y) n这些位只能写入并只能以字这些位只能写入并只能以

19、字(16位位)的形式操作。的形式操作。 n0:对对应的:对对应的ODRy位不产生影响,位不产生影响, n1:清除对应的:清除对应的ODRy位为位为0 端口配置锁定寄存器端口配置锁定寄存器(GPIOx_LCKR) 复位值:复位值:0 x0000 0000 n当执行正确的写序列设置了位当执行正确的写序列设置了位16(LCKK)时,该寄存器用时,该寄存器用来锁定端口位的配置。来锁定端口位的配置。n位位15:0用于锁定用于锁定GPIO端口的配置。在规定的写入操作端口的配置。在规定的写入操作期间,不能改变期间,不能改变LCKy15:0。当对相应的端口位执行了。当对相应的端口位执行了LOCK序列后,在下次

20、系统复位之前将不能再更改端口位序列后,在下次系统复位之前将不能再更改端口位的配置。的配置。 n每个锁定位锁定控制寄存器每个锁定位锁定控制寄存器(CRL, CRH)中相应的中相应的4个位。个位。nLCKy: 端口端口x的锁位的锁位y (y = 015) (Port x Lock bit y) 。这些位可读可写但只能在这些位可读可写但只能在LCKK位为位为0时写入。时写入。 n0:不锁定端口的配置,:不锁定端口的配置, 1:锁定端口的配置:锁定端口的配置 端口配置锁定寄存器格式端口配置锁定寄存器格式GPIO寄存器结构nGPIO寄存器结构,寄存器结构,GPIO_TypeDef 和和 AFIO_Typ

21、eDef,在文件在文件“stm32f10 x_map.h”中定义如下:中定义如下: 寄存器编程举例寄存器编程举例void LED_Init(void)RCC-APB2ENR|=1CRL&=0X00000000;GPIOE-CRL|=0X33333333; /PE.0-PE.7推挽输出推挽输出GPIOE-ODR|=0 xFF; /PE.0-PE.7输出高电平输出高电平APB2外设时钟使能寄存器外设时钟使能寄存器(RCC_APB2ENR) 复位值:复位值:0 x0000 0000 nIOPEEN(位位6 ):IO端口端口E时钟使能时钟使能 (I/O port E clock enable)

22、 由软件置由软件置1或清或清0 n0:IO端口端口E时钟关闭;时钟关闭; 1:IO端口端口E时钟开启。时钟开启。 n/点亮灯点亮灯nGPIOC-ODR = 0 xfffffffe; /点亮点亮1个灯个灯nGPIOC-BSRR = 0 x00030000;/点亮点亮2个灯个灯nGPIOC-BRR = 0 x000C;n/GPIO_ResetBits(GPIOC, GPIO_Pin_2); n/GPIO_Write(GPIOC, 0 xffff); n/GPIO_WriteBit(GPIOC, GPIO_Pin_3, Bit_RESET);n/熄灭灯熄灭灯nGPIOC-ODR = 0 xfffff

23、fff; nGPIOC-BSRR = 0 x00000003;nGPIOC-BSRR = 0 x0000000C;n/GPIO_SetBits(GPIOC, GPIO_Pin_2); n/GPIO_Write(GPIOC, 0 xfff0);n/GPIO_WriteBit(GPIOC, GPIO_Pin_3, Bit_SET); 返回返回3.3 GPIO函数函数nGPIO_DeInit 将外设将外设GPIOx寄存器重设为缺省值寄存器重设为缺省值nGPIO_AFIODeInit 将复用功能(重映射事件控制和将复用功能(重映射事件控制和EXTI设置)重设为缺省值设置)重设为缺省值nGPIO_Ini

24、t 根据根据GPIO_InitStruct中指定的参数初始化外设中指定的参数初始化外设GPIOx寄存器寄存器nGPIO_StructInit 把把GPIO_InitStruct中的每一个参数按缺省值填入中的每一个参数按缺省值填入nGPIO_ReadInputDataBit 读取指定端口管脚的输入读取指定端口管脚的输入 nGPIO_ReadInputData 读取指定的读取指定的GPIO端口输入端口输入 nGPIO_ReadOutputDataBit 读取指定端口管脚的输出读取指定端口管脚的输出nGPIO_ReadOutputData 读取指定的读取指定的GPIO端口输出端口输出nGPIO_Se

25、tBits 设置指定的数据端口位设置指定的数据端口位 nGPIO_ResetBits 清除指定的数据端口位清除指定的数据端口位 nGPIO_WriteBit 设置或者清除指定的数据端口位设置或者清除指定的数据端口位 nGPIO_Write 向指定向指定GPIO数据端口写入数据数据端口写入数据 nGPIO_PinLockConfig 锁定锁定GPIO管脚设置寄存器管脚设置寄存器nGPIO_EventOutputConfig 选择选择GPIO管脚用作事件输出管脚用作事件输出 nGPIO_EventOutputCmd 使能或者失能事件输出使能或者失能事件输出 nGPIO_PinRemapConfig

26、 改变指定管脚的映射改变指定管脚的映射 nGPIO_EXTILineConfig 选择选择GPIO管脚用作外部中断线路管脚用作外部中断线路 函数GPIO_DeInit n功能功能 :将外设:将外设GPIOx寄存器重设为缺省值。寄存器重设为缺省值。n函数原形函数原形:void GPIO_DeInit(GPIO_TypeDef* GPIOx) nGPIOx:x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设。外设。n被调用函数:被调用函数: RCC_APB2PeriphResetCmd() n例:例: /* Resets the GPIOA peripheral registers

27、 to their default reset values */ GPIO_DeInit(GPIOA); 函数GPIO_AFIODeInit n功能描述:将复用功能(重映射事件控制和功能描述:将复用功能(重映射事件控制和EXTI设置)重设设置)重设为缺省值为缺省值n函数原形:函数原形:void GPIO_AFIODeInit(void) n被调用函数:被调用函数:RCC_APB2PeriphResetCmd()n例:例: /* Resets the Alternate functions registers to their default reset values */ GPIO_AFIO

28、DeInit(); 函数GPIO_Init n功能描述:根据功能描述:根据GPIO_InitStruct中指定的参数初始化外设中指定的参数初始化外设GPIOx寄存器寄存器n函数原形:函数原形: void GPIO_Init (GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)nGPIOx:x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设外设nGPIO_InitStruct:指向结构:指向结构GPIO_InitTypeDef的指针,包的指针,包含了外设含了外设GPIO的配置信息的配置信息n例如:例如:GPIO_Init

29、 (GPIOA, &GPIO_InitStructure); nGPIO_InitTypeDef定义于文件定义于文件“stm32f10 x_gpio.h”: typedef struct u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; GPIO_InitTypeDef; GPIO_Pin值该参数选择待设置的该参数选择待设置的GPIO管脚,使用操作符管脚,使用操作符 “|” 可以可以一次选中多个管脚。可以使用下表中的任意组合。一次选中多个管脚。可以使用下表中的任意组合。nGPIO_Pin_No

30、ne:无管脚被选中:无管脚被选中nGPIO_Pin_0: 选中管脚选中管脚0 nGPIO_Pin_1: 选中管脚选中管脚1 nGPIO_Pin_2: 选中管脚选中管脚2 nGPIO_Pin_3: 选中管脚选中管脚3 nnGPIO_Pin_All: 选中全部管脚选中全部管脚 GPIO_Speed值GPIO_Mode: 用以设置选中管脚的工作状态用以设置选中管脚的工作状态 GPIO_Mode 描述描述GPIO_Mode_AIN 模拟输入模拟输入 GPIO_Mode_IN_FLOATING 浮空输入浮空输入 GPIO_Mode_IPD 下拉输入下拉输入 GPIO_Mode_IPU 上拉输入上拉输入

31、GPIO_Mode_Out_OD 开漏输出开漏输出 GPIO_Mode_Out_PP 推挽输出推挽输出 GPIO_Mode_AF_OD 复用开漏输出复用开漏输出 GPIO_Mode_AF_PP 复用推挽输出复用推挽输出GPIO的初始化配置程序的初始化配置程序例:例: /* Configure all the GPIOA in Input Floating mode */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = G

32、PIO_Speed_10MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init (GPIOA, &GPIO_InitStructure); 函数GPIO_StructInit 例:例: /* Initialize the GPIO Init Structure parameters */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_StructInit (&GPIO_InitStructure); 函数GPIO_ReadInputDataBit n函数名:函数名

33、:GPIO_ReadInputDataBit n函数原形:函数原形: u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) n功能描述:功能描述: 读取指定端口管脚的输入读取指定端口管脚的输入 n输入参数输入参数1: GPIOx-x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设外设n输入参数输入参数2: GPIO_Pin-待读取的端口位待读取的端口位n返回值:输入端口管脚值返回值:输入端口管脚值 例:例: /* Reads the seventh pin of the GPIOB and store it in

34、 ReadValue variable */ u8 ReadValue; ReadValue = GPIO_ReadInputDataBit (GPIOB, GPIO_Pin_7); 函数GPIO_ReadInputData n函数名函数名: GPIO_ReadInputData n函数原形函数原形: u16 GPIO_ReadInputData(GPIO_TypeDef* GPIOx)n功能描述功能描述: 读取指定的读取指定的GPIO端口输入端口输入n输入参数输入参数: GPIOx:x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设外设n输出参数输出参数: 无无 n返回值返回

35、值: GPIO输入数据端口值输入数据端口值例:例: /*Read the GPIOC input data port and store it in ReadValue variable*/ u16 ReadValue; ReadValue = GPIO_ReadInputData (GPIOC); 函数GPIO_ReadOutputDataBit n函数名函数名GPIO_ReadOutputDataBit n函数原形函数原形: u8 GPIO_ReadOutputDataBit (GPIO_TypeDef* GPIOx, u16 GPIO_Pin)n功能描述功能描述 读取指定端口管脚的输出读

36、取指定端口管脚的输出 输入参数输入参数1- GPIOx:x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设外设 输入参数输入参数2-GPIO_Pin:待读取的端口位:待读取的端口位n返回值返回值: 输出端口管脚值输出端口管脚值 例:例: /* Reads the seventh pin of the GPIOB and store it in ReadValue variable */ u8 ReadValue; ReadValue = GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_7); 函数GPIO_ReadOutputData n函数名函数

37、名: GPIO_ReadOutputData n函数原形函数原形: u16 GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) n功能描述功能描述: 读取指定的读取指定的GPIO端口输出端口输出n输入参数输入参数: GPIOx-x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设外设n返回值返回值: GPIO输出数据端口值输出数据端口值例:例: /* Read the GPIOC output data port and store it in ReadValue variable */ u16 ReadValue; ReadValue = GPIO

38、_ReadOutputData(GPIOC); 函数GPIO_SetBits n函数名函数名GPIO_SetBits n函数原形函数原形 void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) n功能描述功能描述 设置指定的数据端口位设置指定的数据端口位n输入参数输入参数1 GPIOx:x可以是可以是A,B,C,D或者或者E,来选择,来选择GPIO外设外设n输入参数输入参数2 GPIO_Pin:待设置的端口位该参数可以取:待设置的端口位该参数可以取GPIO_Pin_x(x可以是可以是0-15)的任意组合的任意组合例:例: /* Set the

39、GPIOA port pin 10 and pin 15 */ GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15); 函数GPIO_ResetBits n函数原形函数原形:nvoid GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) n功能描述功能描述: 清除指定的数据端口位清除指定的数据端口位 例:例: /* Clears the GPIOA port pin 10 and pin 15 */ GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15) 函数GPI

40、O_WriteBit n函数原形函数原形: void GPIO_WriteBit (GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal)n功能描述功能描述: 设置或者清除指定的数据端口位设置或者清除指定的数据端口位nBitVal: 该参数指定了待写入的值该参数指定了待写入的值. 该参数必须取枚举该参数必须取枚举BitAction的其的其中一个值中一个值. Bit_RESET: 清除数据端口位清除数据端口位, Bit_SET: 设置数据端口位设置数据端口位例:例: /* Set the GPIOA port pin 15 */ GPIO_Wri

41、teBit(GPIOA, GPIO_Pin_15, Bit_SET); 函数GPIO_Write n函数原形函数原形: void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal) n功能描述功能描述: 向指定向指定GPIO数据端口写入数据数据端口写入数据nPortVal: 待写入端口数据寄存器的值待写入端口数据寄存器的值例:例: /* Write data to GPIOA data port */ GPIO_Write(GPIOA, 0 x1101); 返回返回3.4 GPIO编程举例编程举例-点亮一个灯点亮一个灯PC0PC1 STM32 f103VB

42、PC2PC3主程序主程序#include stm32f10 x.hErrorStatus HSEStartUpStatus; /定义外部高速晶振启动状态枚举变量定义外部高速晶振启动状态枚举变量void Delay(vu32 nTime); /vu32代表无符号代表无符号32位长整型位长整型void RCC_Configuration(void); void GPIO_Configuration(void);int main(void) RCC_Configuration(); /配置时钟配置时钟 GPIO_Configuration();/配置端口配置端口 for( ; ; ) /或者或者 w

43、hile(1) GPIOC-ODR = 0 xfffffffe; Delay(800000);GPIOC-ODR = 0 xffffffff; Delay(800000); void RCC_Configuration(void) /配置时钟的函数配置时钟的函数 RCC_DeInit();RCC_HSEConfig(RCC_HSE_ON);HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus = SUCCESS) RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_

44、HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

45、while(RCC_GetSYSCLKSource() != 0 x08); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 配置端口函数配置端口函数void GPIO_Configuration(void) /端口端口GPIOC3:0,推挽输出,推挽输出,50MHz。 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructu

46、re.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); /端口端口GPIOA3:0,浮空输入,浮空输入,2MHz(可省略)。(可省略)。 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING

47、; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); 延时函数void Delay(vu32 nCount) for( ; nCount != 0; nCount-);关于关于ErrorStatustypedef enum ERROR = 0, SUCCESS = !ERROR ErrorStatus; GPIO编程举例编程举例-独立按键输入独立按键输入n核心板上,按键接口电路:核心板上,按键接口电路:PA0PA1 STM32 f103VBPA2PA3#incl

48、ude stm32f10 x.h ErrorStatus HSEStartUpStatus;void Delay(vu32 nTime);void RCC_Configuration(void);void GPIO_Configuration(void);u8 t;主函数主函数int main (void) RCC_Configuration();/* 配置系统时钟,使能外设时钟配置系统时钟,使能外设时钟 */ GPIO_Configuration(); /* 配置配置GPIO,PC推挽输出,推挽输出,PA浮空输入浮空输入 */ GPIOC-ODR = 0 xffffffff; /* 灯全灭灯

49、全灭 */while(1) t = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3);if (t=0) GPIOC-ODR = 0 xfffffff0;t = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);if (t=0) GPIOC-ODR = 0 xfffffff3; /配置系统时钟配置系统时钟void RCC_Configuration(void) /(系统时钟配置同实验二,略)(系统时钟配置同实验二,略) / 使能外设(使能外设( PA口和口和PC口)时钟口)时钟 RCC_APB2PeriphClockCmd (RCC_A

50、PB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);void GPIO_Configuration(void) /配置配置GPIO, 推挽输出,上拉输入推挽输出,上拉输入 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论