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

发布者:annye_cheng最新更新时间:2019-08-07 来源: 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_InitStruct.GPIO_Mode= GPIO_Mode_OUT;


         GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;


 


         GPIO_Init(GPIOA,&GPIO_InitStruct);


 


         GPIO_SetBits(GPIOA,GPIO_Pin_6);


 


示例二:把gpioe4配置成输入


         GPIO_InitTypeDefGPIO_InitStruct;


         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);


         GPIO_InitStruct.GPIO_Pin= GPIO_Pin_4;


         GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IN;


         GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;


         GPIO_Init(GPIOE,&GPIO_InitStruct);


 


示例三:配置复用功能 PA9 PA10 配置成串口1的收发接口


GPIO_InitTypeDef GPIO_InitStructure;


         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟


         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟


         //串口1对应引脚复用映射


         GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9复用为USART1


         GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIOA10复用为USART1


         //USART1端口配置


         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10


         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//复用功能


         GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;      //速度50MHz


         GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //推挽复用输出


         GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉


         GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA9,PA10



关键字:STM32  库函数  通用输入  输出  GPIO 引用地址:STM32库函数详解----(通用输入/输出GPIO)

上一篇:stm32 F407串口通信出现乱码
下一篇:stm32f4端口寄存器配置

推荐阅读最新更新时间:2024-11-17 03:31

STM32GPIO使用
设置GPIO引脚的输出功能,将对应引脚拉高或拉低输出 初步认识STM32最新的HAL库的使用 用代码实现控制GPIO引脚输出产生周期出1s 占空比为50%的PWM波 示例详解 做实验用到的STM32F103C8T6最小系统板,如下图所示。使用STM32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 最小系统板原理图: 新建并配置工程 在新弹出的界面中的搜索框中输入 “stm32f103c8” ,并双击右侧栏中列出的STM32F103C8 弹出如下图所示界面,至此工程创建完成。 接下来配置工程。 配置系统伏仿真调试接口, 在System Core 目录下单击SYS选项,将其中的Debug选项选
[单片机]
<font color='red'>STM32</font>的<font color='red'>GPIO</font>使用
基础——STM32F4的GPIO模式
stm32的GPIO的配置模式包括: 1. 模拟输入; 2. 浮空输入; 3. 上拉输入; 4. 下拉输入; 5. 开漏输出; 6. 推挽输出; 7. 复用开漏输出; 8. 复用推挽输出 1.模拟输入 从上图我们可以看到,我觉得模拟输入最重要的一点就是,他不经过输入数据寄存器,所以我们无法通过读取输入数据寄存器来获取模拟输入的值,我觉得这一点也是很好理解的,因为输入数据寄存器中存放的不是0就是1,而模拟输入信号不符合这一要求,所以自然不能放进输入数据寄存器。该输入模式,使我们可以获得外部的模拟信号。 2.浮空输入 该输入状态,我的理解是,它的输入完全由外部决定,我觉得在数据通信中应该可以使用该模式。应为在数
[单片机]
基础——STM32F4的<font color='red'>GPIO</font>模式
STM32从地址到寄存器
本文希望在上一节的基础上,把指针操作过渡到寄存器的使用,来帮助读者深入理解寄存器。 引入头文件 主函数里出现了强制转换与指针的操作,程序不那么容易理解。我们把寄存器的地址进行宏定义,可以增强可读性。 #define RCC_APB2ENR (*(unsigned int *)0x40021018) #define GPIOB_CRH (*(unsigned int *)0x40010c04) #define GPIOB_ODR (*(unsigned int *)0x40010c0c) int main(void) { RCC_APB2ENR = 0x00000008; GPIOB_CRH = 0x444444
[单片机]
STM32的入门总结和学习步骤
一、入门总结 1.1为什么要把时间花在“犹豫”上? 每当我们在入门之前(ARM是这样,DSP也一样),总会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。 大家可能是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。严格地说,应该是模仿实验。熟悉之后才会自己写程序代码实现某个功能。因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM32;
[单片机]
<font color='red'>STM32</font>的入门总结和学习步骤
STM32等单片机程序加密的方法
为了防止大家的程序不被剽窃,本文给大家分享单片机加密的方法。 常见加密方法 程序写保护 这种方法是最常见,也是最简单的一种。现在的MUC基本都有写保护功能,但是这种容易被人破解。 烧断数据总线 这个方法听起来不错,但有损坏的风险,同样也能破解。 软件加密 是一些防止别人读懂程序的方法,单一的这种方法不能防止别人全盘复制,须配合其他的加密算法。 添加外部硬件电路的加密方法 这个方法效果看起来比较好,但会增加成本。 芯片打磨改型 这个方法改了型号能误导,但同时也增加成本,解密者一般也能分析出来。 通过通过联网加序列号加密 通过连接网络,在你的MCU中生成一个唯一的随机长序列号,并加入复杂的特种算法,或加入你们
[单片机]
STM32的ISP升级详解
最近在做一个给STM32用ISP升级的项目,接触到STM32厂家烧录的Bootloader工作流程,具体官方文档稍后上传供大家参考,也可去ST官网下载文档。接下来针对文档中部分内容分析其工作过程: 一、要进入该模式,需把STM32硬件上的BOOT0引脚拉高(置1),BOOT1拉低(置0),对此部分不明白的可以查阅STM32BOOT引脚的资料(网上一搜一大堆),不过多阐述。两个引脚配置好对STM32复位,其在4个时钟周期内会自动检测BOOT引脚相应的配置情况,进入相应模式(原厂Bootloader模式)下工作,此时已经到达此次旅行的起点——USART Bootloader 模式 此处要特别注意的是硬件上一定要用原厂规定的串口
[单片机]
<font color='red'>STM32</font>的ISP升级详解
获取较高的低压输出精度小技巧
 输出电压在不断下降,而稳压要求却变得越来越高,对于设计者来说,适当的小技巧可以使任务不像其表面看起来那么难。即使必须要使用1%或更大的容差电阻来进行设计,我们仍然可以得到非常精确的输出电压。   图1显示了一款典型的电源调节电路。输出被分流降压,并与参考电压进行比较。差异被放大,并用于驱动调节环路。乍一看,您可能会认为这一方案仅限于两倍电阻容差精度。幸运的是,实际并非如此;精度还是输出电压与参考电压之比的强函数。   图1:输出精度是分压器比、基准精度和误差放大器补偿的函数。   三种不同的情况可以非常容易地说明这一比率。第一种情况是假设一点分压也没有,换句话就是说输出电压等于参考电压。很明显,这种情况下没有电阻分压误
[电源管理]
STM32 嵌入式学习入门(3)——STM32F103 按键输入控制LED灯
按键是单片机上一个很重要的输入设备,也很容易掌握,只要明白了IO口最基本的使用,就可以操作按键了。 我们的目的是控制开发板上板载的三个按键来操作开发板上板载的两个LED灯实现亮或灭(按键第一次按下时灯亮,再按下时灯灭,以此类推)。 博主所用的开发板是正点原子的mini板(STM32F103RCT6)和战舰板(STM32F103ZET6),因此下面的内容的例子以这两款开发板为例,但是基本的原理对任何开发板来说都是一样的,只要自己的开发板上板载了按键和LED灯(这两个资源应该是所有开发板上都有的资源吧),然后查看自己开发板的数据手册和硬件电路图、原理图,找到按键和LED灯对应的IO口,就可以按照本文所介绍的流程使用按键控制LE
[单片机]
<font color='red'>STM32</font> 嵌入式学习入门(3)——STM32F103 按键<font color='red'>输入</font>控制LED灯
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved