zoukankan      html  css  js  c++  java
  • 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);
    
  • 相关阅读:
    网络编程基础【day10】:多线程效果演示(二)
    网络编程基础【day10】:进程与线程介绍(一 )
    第四模块:网络编程基础
    第三模块:面向对象(目录)
    网络编程基础【day09】:堡垒机前戏(十一)
    网络编程基础【day09】:socketserver进阶(十)
    网络编程基础【day09】:socketserver使用(九)
    网络编程基础【day09】:socket解决粘包问题之MD5(八)
    网络编程基础【day09】:socket接收大数据(五)
    网络编程基础【day09】:socket实现文件发送(六)
  • 原文地址:https://www.cnblogs.com/wyd-blogs/p/12502712.html
Copyright © 2011-2022 走看看