问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

手把手教你入门STM32的GPIO:使用GPIO输入

创作时间:
作者:
@小白创作中心

手把手教你入门STM32的GPIO:使用GPIO输入

引用
CSDN
1.
https://m.blog.csdn.net/2301_79035870/article/details/143251741

STM32微控制器的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_0到GPIO_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速度。

假设我们要将GPIOA的PA0配置为上拉输入模式,代码如下:

#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端口,可以是GPIOA、GPIOB等(视具体芯片而定)。
  • GPIO_InitStruct:指向GPIO_InitTypeDef结构体的指针,该结构体定义了引脚的初始化设置。

读取引脚状态

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

参数说明:

  • GPIOx:指定GPIO端口,可以是GPIOA、GPIOB等(具体端口视芯片不同而变化)。
  • GPIO_Pin:指定GPIO引脚,可以是GPIO_Pin_0、GPIO_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将极大提升系统的性能与可靠性。

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号