初始化和配置相关函数
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 F407串口通信出现乱码
下一篇:stm32f4端口寄存器配置
推荐阅读最新更新时间:2024-11-17 03:31
设计资源 培训 开发板 精华推荐
- 明日方舟 罗德岛主题装饰灯 触摸调节 USB供电 8022W
- 具有浪涌保护和反向保护功能的 LTC3897EUHF 24V/10A 2 相同步升压转换器的典型应用电路
- BFP420 作为全球定位 L1 频段 (1575.42 MHz) 的低成本 LNA
- 103030215, CAN-BUS Shield V2.0 评估板
- F4飞控-适配DOBBY四轴无刷机架
- LT3761IMSE-1 40W SEPIC LED 驱动器的典型应用电路
- EVAL-RS485HDEBZ,用于 ADM3075E 半双工 RS-485 收发器的评估板,采用 8 引脚 SOIC 封装
- LTM8052AIY 5.6A、36Vin 为两个 2.5V 系列超级电容器充电的典型应用
- 具有双输入的 LTC3126IUFD 3.3V、750kHz 降压转换器的典型应用电路
- 使用 Analog Devices 的 LTC3602IFE 的参考设计