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

ops/2024/11/14 21:13:49/

目录

 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_15GPIOMode_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将极大提升系统的性能与可靠性。


http://www.ppmy.cn/ops/133680.html

相关文章

2024年9月青少年软件编程(C语言/C++)等级考试试卷(九级)

青少年软件编程(C 语言) 等级考试试卷(九级) 1、 两个序列的故事 给定两个整数序列 A a 1 , a 2 , … , a n 与 B b 1 , b 2 , … , b n , 我们称 A 中长度为 (r-l1 ) 的连续子序列 a l , a l1 , … , a r (1 ≤ l ≤ r ≤ n) …

零碎02-接口文档管理

目录 一、背景故事 二、解决方案分析 1. 静态文档方案 2. Swagger Springfox 3. Knife4j增强方案 三、示例 1. 添加依赖 2. 配置Knife4j 3. 创建knife4j配置类 4. 启动Spring Boot项目并访问接口文档 5. 使用示例 6. 测试和使用 四、总结 一、背景故事 酷乐是一名…

2024-11-11 问AI: [AI面试题] 讨论人工智能的未来趋势和进步

文心一言 病预测、个性化医疗等方面的应用将显著提高医疗服务的效率和质量,推动医疗行业的数字化转型。AI金融:AI在风险管理、投资决策、客户服务等方面的应用将重塑金融行业,提高金融服务的智能化和个性化水平。 3. 伦理与监管 数据隐私与…

PostgreSQL 修改序列

ALTER SEQUENCE public.pitr_test_id_seq CACHE XXXXX; SELECT nextval(pitr_test_id_seq); SELECT setval(pitr_test_id_seq, 42); 下一次 nextval 会返回 43 SELECT setval(pitr_test_id_seq, 42, true); 同上 SELECT setval(pitr_test_id_seq, 42, false); …

ASP.NET 部署到IIS,访问其它服务器的共享文件 密码设定

asp.net 修改上面的 IIS需要在 配置文件 添加如下内容 》》》web.config <system.web><!--<identity impersonate"true"/>--><identity impersonate"true" userName"您的账号" password"您的密码" /><co…

STM32各模块

1.工程文件结构&#xff1a; startup前缀的汇编文件是来调用system前缀的文件来进行系统初始化和时钟配置,然后调用自定义的main函数&#xff0c;包括很多stm32f10x_it文件定义的中断处理函数。 stm32f10x.h定义了stm32所有外设寄存器描述&#xff0c;core_cm3文件定义了内核寄…

LeetCode 热题100之技巧关卡

1.只出现一次的数字 思路分析1&#xff1a;使用哈希表存储每个数字和该数字出现的次数。遍历数组即可得到每个数字出现的次数&#xff0c;并更新哈希表&#xff0c;最后遍历哈希表&#xff0c;得到只出现一次的数字。 具体实现代码&#xff08;详解版&#xff09;&#xff1a;…

前缀和 so easy! 力扣.128 最长连续序列 leetcode longest-consecutive-sequence

数组系列 力扣数据结构之数组-00-概览 力扣.53 最大子数组和 maximum-subarray 力扣.128 最长连续序列 longest-consecutive-sequence 力扣.1 两数之和 N 种解法 two-sum 力扣.167 两数之和 II two-sum-ii 力扣.170 两数之和 III two-sum-iii 力扣.653 两数之和 IV two…