【嵌入式】手把手教你入门STM32的GPIO:使用GPIO输入

目录

 GPIO 输入的基本概念

STM32 GPIO 输入配置步骤

注意事项

总结


 GPIO 输入的基本概念

GPIO引脚可以配置为输入或输出模式。在输入模式下,GPIO用于读取外部信号,比如开关、传感器等。以下是关于STM32 GPIO输入的一些基本知识点:

  • 引脚配置:每个GPIO引脚可以独立配置为输入或输出,支持多种输入模式。
  • 输入模式:GPIO输入引脚可以配置为上拉、下拉或浮空输入,以适应不同的电路设计。
  • 中断功能:GPIO输入支持外部中断,可以在信号变化时触发中断处理程序,增强实时响应能力。
  • STM32 GPIO 输入配置步骤

    配置STM32的GPIO输入一般需要以下几个步骤:

    选择GPIO引脚

  • 确定要使用的GPIO引脚,参考STM32的引脚图,确保该引脚支持输入功能
  • 启用时钟

        使用RCC(时钟控制器)启用对应GPIO端口的时钟。每个GPIO端口(如GPIOA、GPIOB等)都有各自的时钟,使得该端口能够正常工作。

    函数原型:

    void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
    

    参数说明

  • RCC_APB1Periph:指定需要使能时钟的APB1外设,可以是以下值之一或组合(使用“按位或”操作):

  • RCC_APB1Periph_TIM2:定时器2
  • RCC_APB1Periph_TIM3:定时器3
  • RCC_APB1Periph_TIM4:定时器4
  • RCC_APB1Periph_USART2:USART2
  • RCC_APB1Periph_USART3:USART3
  • RCC_APB1Periph_I2C1:I2C1
  • RCC_APB1Periph_I2C2:I2C2
  • RCC_APB1Periph_CAN1:CAN1
  • RCC_APB1Periph_PWR:电源接口
  • RCC_APB1Periph_BKP:备份接口
  • RCC_APB1Periph_WWDG:独立看门狗
  • 其他设备按需设置。
  • NewState:指定外设时钟的新状态,可选值:

  • ENABLE:使能该外设的时钟。
  • DISABLE:禁用该外设的时钟。
  • 使用示例

    例如,要使能USART2的时钟,可以使用如下代码:

    #include "stm32f10x_rcc.h"
    
    void RCC_Config(void) {
        // 启用USART2的时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_GPIOA, ENABLE);
    }
    

    配置引脚模式

        使用GPIO_InitTypeDef结构体设置引脚模式、上拉/下拉电阻等属性。引脚模式包括输入模式、输出模式等,具体可根据需要进行设置。

    在调用GPIO_Init()函数前,需先定义并设置 GPIO_InitTypeDef 结构体的成员变量。该结构体通常包含以下成员:

    typedef struct
    {
      uint16_t GPIO_Pin;              // GPIO引脚,可以是GPIO_Pin_0~GPIO_Pin_15
      GPIOMode_TypeDef GPIO_Mode;      // GPIO模式,如输入、输出、复用等
      GPIOSpeed_TypeDef GPIO_Speed;    // GPIO速度,仅在输出模式下有效
    } GPIO_InitTypeDef;
    
  • GPIO_Pin:指定要配置的GPIO引脚,可以是 GPIO_Pin_0GPIO_Pin_15。可以用 | 运算符选择多个引脚。
  • GPIO_Mode:指定GPIO模式,具体如下:
  • 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_Speed:指定输出速度,仅在输出模式有效:
  • GPIO_Speed_10MHz:10 MHz速度。
  • GPIO_Speed_2MHz:2 MHz速度。
  • GPIO_Speed_50MHz:50 MHz速度。
  • 假设我们要将GPIOAPA0配置为上拉输入模式,代码如下:

    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    
    void GPIO_Config(void) {
        // 启用GPIOA时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
        GPIO_InitTypeDef GPIO_InitStructure;
    
        // 配置PA0为上拉输入模式
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  // 上拉输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 设置速度,不影响输入模式
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    }
    

    初始化引脚

        调用GPIO_Init()函数完成引脚的初始化,确保引脚配置生效。  

    参数说明

  • GPIOx:指定GPIO端口,可以是GPIOAGPIOB等(视具体芯片而定)。
  • GPIO_InitStruct:指向GPIO_InitTypeDef结构体的指针,该结构体定义了引脚的初始化设置。
  • 读取引脚状态

      使用GPIO_ReadInputDataBit()函数读取引脚的状态,以获取外部信号的当前状态。

    参数说明 

  • GPIOx:指定GPIO端口,可以是GPIOAGPIOB等(具体端口视芯片不同而变化)。
  • GPIO_Pin:指定GPIO引脚,可以是 GPIO_Pin_0GPIO_Pin_1 等。
  • 返回值

  • 1:表示引脚为高电平。
  • 0:表示引脚为低电平。
  • uint8_t pinState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
    
    if (pinState) {
        // 引脚状态为高电平
    } else {
        // 引脚状态为低电平
    }
    

    注意事项

    在进行GPIO输入配置时,以下注意事项值得关注:

  • 确保时钟启用:在配置GPIO之前,必须正确启用时钟。没有启用时钟的GPIO引脚将无法正常工作。
  • 外部中断配置:使用外部中断时,除了配置GPIO引脚外,还需要正确配置NVIC(中断控制器),以处理相应的中断服务例程(ISR)。
  • 信号去抖动:在读取开关等机械信号时,可能会出现抖动现象。可以通过软件去抖动或硬件滤波器来提高信号的稳定性。
  • 总结

    STM32的GPIO输入功能为外部设备交互提供了灵活的解决方案。通过正确配置GPIO引脚,开发者可以有效地读取外部信号,并在需要时触发中断,增强系统的响应能力。希望本文能够帮助您更好地理解和使用STM32的GPIO输入功能。在实际应用中,根据具体需求灵活配置GPIO将极大提升系统的性能与可靠性。

    作者:进击的小C

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【嵌入式】手把手教你入门STM32的GPIO:使用GPIO输入

    发表回复