stm32—GPIO

Posted wyd-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32—GPIO相关的知识,希望对你有一定的参考价值。

GPIO

简介:
??通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以用作串口的数据收发管脚,或者AD的接口等复用功能使用。因此其作用和功能非常重要。

GPIO的工作模式:四种输入、四种输出

  • 输入方式:
    • 输入浮空模式:由引脚直接进入输入数据寄存器
    • 输入上拉模式:存在上拉电阻(VDD约为30k到50k)
    • 输入下拉模式:存在下拉电阻(VSS约为30k到50k)
    • 模拟模式:不输入电平,输入电压
  • 输出方式
    • 开漏输出方式:输出信号由CPU提供,但是只能提供低电平,输出低电阻(N_MOS半导体被拉低,不能输出1,除非提供上拉电阻)
    • 推挽输出方式:输出信号由CPU提供,可以提供高电平和低电平,输出1则显示1,输出0则显示0;
    • 复位开漏输出方式:输出信号由外界模块实现,输出低电阻(N_MOS半导体被拉低,不能输出1,除非提供上拉电阻)
    • 复位推挽方式:输出信号由外界模块实现,可以提供高电平和低电平,输出1则显示1,输出0则显示0;

GPIO库函数:

函数名 描述
GPIO_DeInit 将外设 GPIOx 寄存器重设为缺省值
GPIO_AFIODeInit 将复用功能(重映射事件控制和 EXTI 设置)重设为缺省值
GPIO_Init 根据 GPIO_InitStruct 中指定的参数初始化外设 GPIOx 寄存器
GPIO_StructInit 把 GPIO_InitStruct 中的每一个参数按缺省值填入
GPIO_ReadInputDataBit 读取指定端口管脚的输入
GPIO_ReadInputData 读取指定的 GPIO 端口输入
GPIO_ReadOutputDataBit 读取指定端口管脚的输出
GPIO_ReadOutputData 读取指定的 GPIO 端口输出
GPIO_SetBits 设置指定的数据端口位
GPIO_ResetBits 清除指定的数据端口位
GPIO_WriteBit 设置或者清除指定的数据端口位
GPIO_Write 向指定 GPIO 数据端口写入数据
GPIO_PinLockConfig 锁定 GPIO 管脚设置寄存器
GPIO_EventOutputConfig 选择 GPIO 管脚用作事件输出
GPIO_EventOutputCmd 使能或者失能事件输出
GPIO_PinRemapConfig 改变指定管脚的映射
GPIO_EXTILineConfig 选择 GPIO 管脚用作外部中断线路

函数GPIO_Init

函数名 GPIO_Init
函数原形 void GPIO_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 的配置信息参阅 Section:GPIO_InitTypeDef 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数

GPIO_InitTypeDef structure
GPIO_InitTypeDef 定义于文件“stm32f10x_gpio.h”:

typedef struct
{
u16 GPIO_Pin;
GPiospeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
} GPIO_InitTypeDef;
GPIO_Pin

GPIO_Speed

GPIO_Speed 用以设置选中管脚的速率。

GPIO_Speed 描述
GPIO_Speed_10MHz 最高输出速率 10MHz
GPIO_Speed_2MHz 最高输出速率 2MHz
GPIO_Speed_50MHz 最高输出速率 50MHz

GPIO_Mode值

GPIO_Speed 描述
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出

函数GPIO_SetBits

函数名 GPIO_SetBits
函数原形 void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 设置指定的数据端口位
输入参数 1 GPIOx: x 可以是 A, B, C, D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待设置的端口位该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合参阅 Section: GPIO_Pin 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数
/* Set the GPIOA port pin 10 and pin 15 */
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

函数GPIO_ResetBits

函数名 GPIO_ResetBits
函数原形 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
功能描述 清除指定的数据端口位
输入参数 1 GPIOx: x 可以是 A, B, C, D 或者 E,来选择 GPIO 外设
输入参数 2 GPIO_Pin:待清除的端口位该参数可以取 GPIO_Pin_x(x 可以是 0-15)的任意组合参阅 Section: GPIO_Pin 查阅更多该参数允许取值范围
输出参数
返回值
先决条件
被调用函数
/* Clears the GPIOA port pin 10 and pin 15 */
GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

库函数配置过程:

  1. 开启时钟,STM32所有的GPIO都是挂载在APB2总线上的,首先开启APB2对应端口上的时钟,RCC_APB2PeriphClockCmd();
  2. 初始化GPIO结构体,配置GPIO_Pin(引脚),GPIO_Mode(模式),GPIO_Speed(输出速度)。(如果引脚是输入,那么直接省略掉GPIO_Speed).
  3. 进行初始化结构体GPIO_Init()(至此,GPIO已经配置完成了)
  4. 输出或者输入,GPIO_SetBits();(输出置位函数,也就是输出一个高电平)
    GPIO_ResetBits();(输出置零)。GPIO_ReadInputDataBit(),输入检测函数,检测一个引脚的输入电平。

初始化GPIO结构体:

/* Configure all the GPIOA in Input Floating mode */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);

以上是关于stm32—GPIO的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103 GPIO 端口

stm32如何启动串口中断

STM32F3 发现 - 实现 GPIO 中断

STM32学习笔记

stm32 外部中断 能读gpio值吗

STM32F407: USART 遇到的问题