STM32库函数详解----(通用输入/输出GPIO)

2019-11-30来源: eefocus关键字:STM32  库函数  通用输入  输出  GPIO

初始化和配置相关函数


1。void  GPIO_DeInit  (GPIO_TypeDef* GPIOx)


函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不在使用某一接口后,可以调用该函数。


参数:GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


2.void  GPIO_Init  (GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)


函数解释:GPIO的初始化函数,该函数的作用是对io进行初始化。


参数:(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


            (2)GPIO_InitStruct,GPIO的初始化相关结构体。该结构体里的成员变量决定了我们具体的初始化参数。以下进行说明:


              GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


              GPIO_Mode:指定GPIO的模式,有四种模式:


  GPIO_Mode_IN(输入), GPIO_Mode_OUT(输出), GPIO_Mode_AF(第二功能), GPIO_Mode_AN(模拟)


              GPIO_Speed:指定IO最快翻转速度,也就是当使用IO产生频率(如PWM)的最大速度。有四种模式:


 GPIO_Low_Speed(低速), GPIO_Medium_Speed(中等速度), GPIO_Fast_Speed(快速), GPIO_High_Speed(低速)


               GPIO_OType:指定选择管脚的输出类型,有以下两种配置:


GPIO_OType_PP(推挽方式输出),GPIO_OType_OD(开漏方式输出)


温馨提示:


推挽输出:推挽输出就是单片机引脚可以直接输出高电平电压。低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上拉电阻。但如果输出端可能会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚。推挽方式的驱动力更大。


开漏输出:开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时,电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机低的时候。


GPIO_PuPd:指定选择管脚的上拉和下拉模式。有三种配置:


GPIO_PuPd_NOPULL(不上拉也不下拉),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)


温馨提示:


这些都是io内部的内部上拉或者下拉模式,也可以接上拉或下拉电阻,通过硬件连接,实现外部上拉或外部下拉。


3。void  GPIO_StructInit  (GPIO_InitTypeDef* GPIO_InitStruct)


函数解释:GPIO结构体的初始化。对GPIO_InitStruct结构体进行默认配置。


参数:GPIO_InitStruct,直接传入该结构体的指针。在该函数内会对结构体进行初始化。


4.void  GPIO_PinLockConfig (GPIO_TypeDef* GPIOx,uint16_t  GPIO_Pin)


函数解释:锁定GPIO寄存器,锁定的寄存器是GPIOx_MODER,   GPIOx_OTYPER,    GPIOx_OSPEEDR,   GPIOx_PUPDR,    GPIOx_AFRL    and    GPIOx_AFRH。在下一次复位前,被锁定的管脚不能被修改。


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)  GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


GPIO的读写函数


1.uint8_t  GPIO_ReadInputDataBit  (GPIO_TypeDef* GPIOx , uint16_t GPIO_Pin)


函数解释:读取io输入管脚的值


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)  GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


返回值:输入管脚的值 Bit_SET(高电平),Bit_RESET(低电平)


2.uint16_t  GPIO_ReadInputData (GPIO_TypeDef* GPIOx )


函数解释:读取输入io数据,该函数用于读取一个io分组的所有数据


参数:GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


返回值:一个io端口的所有数据(输入状态)


3。uint8_t  GPIO_ReadOutputDataBit  (GPIO_TypeDef* GPIOx , uint16_t GPIO_Pin)


函数解释:读取io输出管脚的值


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)  GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


返回值:输出管脚的值 Bit_SET(高电平),Bit_RESET(低电平)


4.uint16_t  GPIO_ReadOutputData (GPIO_TypeDef* GPIOx )


函数解释:读取输出io数据,该函数用于读取一个io分组的所有数据


参数:GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


返回值:一个io端口的所有数据(输出状态)


5。void  GPIO_SetBits(GPIO_TypeDef* GPIOx,uint16_t  GPIO_Pin)


函数解释:对io管脚进行置位(输出高电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


6.void  GPIO_ResetBits(GPIO_TypeDef* GPIOx,uint16_t  GPIO_Pin)


函数解释:对io管脚进行复位(输出低电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


7。void  GPIO_WriteBit(GPIO_TypeDef* GPIOx,uint16_t  GPIO_Pin,BitActionBitVal)


函数解释:对某一位进行写入操作。


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


(3)BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)


8.void  GPIO_Write(GPIO_TypeDef* GPIOx,uint16_t  PortVal)


函数解释:对GPIO端口进行写入操作,适用于对统一端口的多个管脚的写入。


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)


9.void  GPIO_ToggleBits(GPIO_TypeDef* GPIOx,uint16_t  GPIO_Pin)


函数解释:翻转指定的GPIO口,如果当前io是高电平,则变为低电平。如果当前io是低电平,则变为高电平。


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)GPIO_Pin:指定具体的io脚,如GPIO_Pin_0,GPIO_Pin_1这样的宏定义。


GPIO复用功能配置函数


1。void  GPIO_PinAFConfig(GPIO_TypeDef* GPIOx,uint16_t  GPIO_PinSource,uint8_t  GPIO_AF)


函数解释:改变指定管脚的映射关系,即配置指定管脚的复用功能。


参数:

(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。


(2)GPIO_PinSource,具体要配置成复用功能的管脚(如GPIO_Pin_0,GPIO_Pin_1这样的宏定义)。


(3)GPIO_AF:选择该管脚要使用的复用功能,有以下配置,              


GPIO_AF_RTC_50Hz: Connect RTC_50Hz pin toAF0 (default after reset)


GPIO_AF_MCO: Connect MCO pin (MCO1 and MCO2)to AF0 (default after reset)


GPIO_AF_TAMPER: Connect TAMPER pins(TAMPER_1 and TAMPER_2) to AF0 (default after reset)


GPIO_AF_SWJ: Connect SWJ pins (SWD andJTAG)to AF0 (default after reset)


GPIO_AF_TRACE: Connect TRACE pins to AF0(default after reset)


GPIO_AF_TIM1: Connect TIM1 pins to AF1


GPIO_AF_TIM2: Connect TIM2 pins to AF1


GPIO_AF_TIM3: Connect TIM3 pins to AF2


GPIO_AF_TIM4: Connect TIM4 pins to AF2


GPIO_AF_TIM5: Connect TIM5 pins to AF2


GPIO_AF_TIM8: Connect TIM8 pins to AF3


GPIO_AF_TIM9: Connect TIM9 pins to AF3


GPIO_AF_TIM10: Connect TIM10 pins to AF3


GPIO_AF_TIM11: Connect TIM11 pins to AF3


GPIO_AF_I2C1: Connect I2C1 pins to AF4


GPIO_AF_I2C2: Connect I2C2 pins to AF4


GPIO_AF_I2C3: Connect I2C3 pins to AF4


GPIO_AF_SPI1: Connect SPI1 pins to AF5


GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5


GPIO_AF_SPI4: Connect SPI4 pins to AF5


GPIO_AF_SPI5: Connect SPI5 pins to AF5


GPIO_AF_SPI6: Connect SPI6 pins to AF5


GPIO_AF_SAI1: Connect SAI1 pins to AF6 forSTM32F42xxx/43xxx devices.      


GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6


GPIO_AF_I2S3ext: Connect I2S3ext pins toAF7


GPIO_AF_USART1: Connect USART1 pins to AF7


GPIO_AF_USART2: Connect USART2 pins to AF7


GPIO_AF_USART3: Connect USART3 pins to AF7


GPIO_AF_UART4: Connect UART4 pins to AF8


GPIO_AF_UART5: Connect UART5 pins to AF8


GPIO_AF_USART6: Connect USART6 pins to AF8


GPIO_AF_UART7: Connect UART7 pins to AF8


GPIO_AF_UART8: Connect UART8 pins to AF8


GPIO_AF_CAN1: Connect CAN1 pins to AF9


GPIO_AF_CAN2: Connect CAN2 pins to AF9


GPIO_AF_TIM12: Connect TIM12 pins to AF9


GPIO_AF_TIM13: Connect TIM13 pins to AF9


GPIO_AF_TIM14: Connect TIM14 pins to AF9


GPIO_AF_OTG_FS: Connect OTG_FS pins to AF10


GPIO_AF_OTG_HS: Connect OTG_HS pins to AF10


GPIO_AF_ETH: Connect ETHERNET pins to AF11


GPIO_AF_FSMC: Connect FSMC pins to AF12


GPIO_AF_FMC: Connect FMC pins to AF12 forSTM32F42xxx/43xxx devices.   


GPIO_AF_OTG_HS_FS: Connect OTG HS(configured in FS) pins to AF12


GPIO_AF_SDIO: Connect SDIO pins to AF12


GPIO_AF_DCMI: Connect DCMI pins to AF13


GPIO_AF_LTDC: Connect LTDC pins to AF14 forSTM32F429xx/439xx devices。


GPIO_AF_EVENTOUT: Connect EVENTOUT pins toAF15


代码示例:


示例一:把GPIO6配置成输出管脚,并置高电平。


         GPIO_InitTypeDefGPIO_InitStruct;


         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);


         GPIO_InitStruct。GPIO_Pin= GPIO_Pin_6;


GPIO_InitStru

[1] [2]
关键字:STM32  库函数  通用输入  输出  GPIO 编辑:什么鱼 引用地址:http://news.pyfle.com/mcu/ic481622.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32之开发利器(USART)
下一篇:STM32 数据类型定义

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

开发STM32MP1,没有一块好的开发办怎么行
STM32MP1系列的出现吸引了很多STM32的新老用户的关注,但是很多的人都会担心一个问题:以前是基于Cortex M系列MCU惊醒开发,对于cortex-A架构的处理器以及Linux系统都不熟悉。如何高效地从MCU跨越到MPU是大家都关心的话题。 作为ST官方合作伙伴,米尔电子推出了开发套件MYD-YA157C,该套件由核心板MYC-YA157C和底板MYB-YA157C组成。该平台采用STM32MP157系列高性能处理器,提供了高性能显示,千兆以太网,WIFI/蓝牙,RS232/RS485/CAN等丰富接口。贴合应用场景的产品定义,稳定可靠的硬件设计,丰富的软件和学习资源,能帮助大家轻松实现跨越,是一块值得推荐
发表于 2020-01-09
开发STM32MP1,没有一块好的开发办怎么行
stm8s输入捕获
输入捕获,简而言之,即 记录信号到来时刻的CNTR的值,然后把该值传给CCR。下面以PC1为例,代码如下:    TIM1_CR1_DIR = 0;//计数器向上计数    TIM1_IER_UIE = 1;//使能TIM1溢出中断      TIM1_PSCRH = 0x00;    TIM1_PSCRL = 0x05; //配置TIM1为6分频->0.75us记一次数     TIM1_ARRH = 0xFF;     TIM1_ARRL = 0xFF; //自动重
发表于 2020-01-09
STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
Ⅰ、写在前面上一篇文章是“STM32F10x_模拟I2C读写EEPROM”,讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程。上一篇文章主要内容:I2C协议、模拟I2C底层驱动、EEPROM(AT24Xxx)单字节读写操作。本文主要内容:STM32硬件I2C详细配置、EEPROM(AT24Xxx)多字节读写操作、ST官方I2C存在问题。实例实验效果:1、多字节读写:任意地址(66), 写入任意长度(129)、读取并打印出来2、单字节读写:任意地址(0),写入1字节数据、 读取并打印出来实验说明:1.多字节读写实验为什么是从66地址写? 为什么是写入129字节?答案:验证对EEPROM多字节
发表于 2020-01-09
STM32F10x_硬件I2C读写EEPROM(标准外设库版本)
STM32系统学习——I2C (读写EEPROM)
I2C 通讯协议(Inter-Integrated Circuit)引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。 在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片上外设;STM32 标准库则是在寄存器与用户代码之间的软件层。对于通讯协议,我们也以分层的方式来理解,最基本的是把它分为物理层和协议层。 物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。简单来说物理层规定我们用嘴巴还是用肢体来交流,协议层
发表于 2020-01-09
STM32系统学习——I2C (读写EEPROM)
STM8的IAP在线升级
IAP(In Application Program)在线应用编程官方资料(STVD开发环境):例程AN2659,《 AN2659 Application Note.pdf 》要实现在线升级,MCU代码须分为 : bootloader和 用户代码App 两个部分。图1.STM8下IAP程序的存储方式用户启动区域(UBC): (可理解为用户自定义的bootloader的存放区域)包含有复位和中断向量表,它可用于存储IAP及通讯程序。UBC有一个两级保护结构可保护用户代码及数据在IAP编程中免于无意的擦除或修改。这意味着该区域总是写保护的,而且写保护不能通过使用MASS密钥来解锁。它的大小可通过配置option bytes 设置
发表于 2020-01-09
STM8的IAP在线升级
STM8做BUS OFF快慢恢复策略
前言:CAN总线上出现错误会导致CAN控制器进入BUS OFF状态,具体的可以参考CAN的规范。CAN控制器提供自动恢复和手动恢复功能。1.自动恢复自动恢复比较简单,初始化的时候打开自动恢复功能。要求不高的话建议打开,否则CAN BUS OFF一直无法恢复通信。CAN->MCR |= CAN_MasterCtrl_AutoBusOffManagement;/*atuo bus off recovery */2.手动恢复一般车厂要求ECU不能自动恢复,而是先快恢复后慢恢复。常用的就是:先100ms恢复5次,然后是1000ms恢复一次。具体的就是:(1)发生BUS OFF后,立即关闭TX,然后重置CAN控制器(2)快恢复次数+1(
发表于 2020-01-09
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD。com。cn, Inc。 All rights reserved
安徽快3走势 快乐赛车是正规福彩吗 快乐飞艇怎么看走势 快乐赛车微信群 安徽快3 优优彩票网 快乐赛车冠军技巧 快乐赛车直播开奖视频 快乐赛车计划下载 湖北快3走势