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);
库函数配置过程:
- 开启时钟,STM32所有的GPIO都是挂载在APB2总线上的,首先开启APB2对应端口上的时钟,RCC_APB2PeriphClockCmd();
- 初始化GPIO结构体,配置GPIO_Pin(引脚),GPIO_Mode(模式),GPIO_Speed(输出速度)。(如果引脚是输入,那么直接省略掉GPIO_Speed).
- 进行初始化结构体GPIO_Init()(至此,GPIO已经配置完成了)
- 输出或者输入,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的主要内容,如果未能解决你的问题,请参考以下文章