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);
    
  • 相关阅读:
    WPF 跨应用程序域的 UI(Cross AppDomain UI)
    Visual->UIElement->FrameworkElement,带来更多功能的同时也带来了更多的限制
    使用不安全代码将 Bitmap 位图转为 WPF 的 ImageSource 以获得高性能和持续小的内存占用
    从 “x is null 和 x == null” 的区别看 C# 7 模式匹配中常量和 null 的匹配
    WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制
    WPF 同一窗口内的多线程 UI(VisualTarget)
    如何实现一个可以用 await 异步等待的 Awaiter
    使用 Task.Wait()?立刻死锁(deadlock)
    使用 ExceptionDispatchInfo 捕捉并重新抛出异常
    CaptureMouse/CaptureStylus 可能会失败
  • 原文地址:https://www.cnblogs.com/wyd-blogs/p/12502712.html
Copyright © 2011-2022 走看看