摘要: 本文将深入浅出地介绍 STM32 通用输入/输出端口 (GPIO) 的基本概念,重点讲解输出模式和输入模式及其应用。通过表格、图表和代码示例,帮助读者快速掌握 GPIO 的配置方法,为嵌入式开发打下坚实基础。
关键词: STM32,GPIO,输出模式,输入模式,嵌入式开发
1. GPIO 简介
通用输入/输出端口 (GPIO) 是微控制器与外部世界交互的重要接口。STM32 芯片拥有丰富的 GPIO 资源,每个 GPIO 引脚都可以配置为多种模式,例如输入模式、输出模式和复用功能模式等,从而实现对外部设备的控制和数据采集。
2. GPIO 输出模式
GPIO 输出模式允许 STM32 直接控制引脚的输出电平,实现对 LED、继电器等外部设备的驱动。
2.1 输出模式分类
STM32 GPIO 提供以下四种输出模式:
模式 | 描述 |
---|---|
推挽输出 | 输出高电平时输出电流,输出低电平时吸入电流 |
开漏输出 | 仅输出低电平,需要外部上拉电阻 |
复用推挽输出 | 用于外设复用功能 |
复用开漏输出 | 用于外设复用功能 |
2.2 推挽输出与开漏输出的区别
推挽输出 可以输出高电平和低电平,驱动能力强,适用于驱动 LED、蜂鸣器等低电流设备。
开漏输出 只能输出低电平,需要配合外部上拉电阻才能输出高电平,适用于需要与其他设备共享 I/O 线路的场合,例如 I2C 总线。
2.3 代码示例 (推挽输出)
以下代码演示了如何将 STM32F103 的 PA5 引脚配置为推挽输出模式,并控制 LED 灯闪烁:
#include "stm32f10x.h"
int main(void)
{
// 使能 GPIOA 时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// 配置 PA5 为推挽输出模式
GPIOA->CRL &= ~(GPIO_CRL_MODE5 | GPIO_CRL_CNF5);
GPIOA->CRL |= (GPIO_CRL_MODE5_1 | GPIO_CRL_MODE5_0);
while (1)
{
// PA5 输出高电平,LED 灭
GPIOA->BSRR = GPIO_BSRR_BS5;
delay(500);
// PA5 输出低电平,LED 亮
GPIOA->BSRR = GPIO_BSRR_BR5;
delay(500);
}
}
2.4图表 - 推挽输出电路
3. GPIO 输入模式
GPIO 输入模式用于读取外部设备的信号,例如按键状态、传感器数据等。
3.1 输入模式分类
STM32 GPIO 提供以下四种输入模式:
模式 | 描述 |
---|---|
浮空输入 | 引脚处于高阻态,外部信号可以直接输入 |
上拉输入 | 内部集成了上拉电阻,适合读取低电平有效的信号 |
下拉输入 | 内部集成了下拉电阻,适合读取高电平有效的信号 |
模拟输入 | 用于 ADC 等模拟外设 |
3.2 代码示例 (下拉输入)
以下代码演示了如何将 STM32F103 的 PA0 引脚配置为下拉输入模式,并读取按键状态:
#include "stm32f10x.h"
int main(void)
{
// 使能 GPIOA 时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// 配置 PA0 为下拉输入模式
GPIOA->CRL &= ~(GPIO_CRL_MODE0 | GPIO_CRL_CNF0);
GPIOA->CRL |= GPIO_CRL_CNF0_1;
while (1)
{
// 读取 PA0 引脚
if (GPIOA->IDR & GPIO_IDR_IDR0)
{
// 按键未按下
}
else
{
// 按键按下
}
}
}
3.3图表 - 下拉输入电路
本文详细介绍了 STM32 GPIO 的输出模式和输入模式,并通过代码示例和图表展示了其应用方法。GPIO 作为 STM32 与外部世界交互的重要桥梁,熟练掌握 GPIO 的配置和使用是嵌入式开发的基础。
希望本文能帮助读者更好地理解和应用 STM32 GPIO。 想要深入学习,可以参考以下知识点:
- GPIO 工作原理: STM32 GPIO 原理详解
- STM32 寄存器配置: STM32 寄存器手册
- GPIO 库函数使用: STM32 HAL 库文档
- 不同输入/输出模式的应用场景: GPIO 应用案例