【STM32基础外设】01 GPIO

一、什么是GPIO?

GPIO,全称为 General Purpose Input Output(通用输入输出),是一种通用的数字输入/输出端口。在嵌入式系统中,GPIO被设计为灵活的引脚,可以被配置为输入或输出,以满足不同的应用需求。

主要作用包括:
1.输入(采集):
GPIO 可以配置为输入模式,用于采集外部器件的信息。例如,连接传感器、开关或按钮等外部设备,通过 GPIO 读取这些设备的状态。

2.输出(控制):
GPIO 也可以配置为输出模式,用于控制外部器件的工作。例如,连接LED、继电器、驱动器等外部设备,通过 GPIO 输出电平信号来控制这些设备的工作状态。

二、GPIO的八种模式分析

1.输入浮空(Floating Input):

特点: 输入用,完全浮空,状态不定。
应用: 适用于需要读取外部信号的场景,但外部信号状态不确定。

2.输入上拉(Input Pull-Up):

特点: 输入用,使用内部上拉电阻,初始状态是高电平。
应用: 适用于外部信号默认为高电平的情况,如按钮按下时会拉低信号。

3.输入下拉(Input Pull-Down):

特点: 输入用,使用内部下拉电阻,初始状态是低电平。
应用: 适用于外部信号默认为低电平的情况,如按钮按下时会拉高信号。

4.模拟功能(Analog Mode):

特点: 用于连接模拟外设,如ADC(模数转换器)、DAC(数模转换器)等。
应用: 适用于需要进行模拟信号处理的场景。

5.开漏输出(Open-Drain Output):

特点: 用于实现开漏输出,常用于构建总线,如I2C。
应用: 适用于需要多个输出端口共享同一信号线的场景,例如I2C的SDA、SCL线。

6.推挽输出(Push-Pull Output):

特点: 驱动能力强,支持通用输出,可提供较大电流。
应用: 适用于需要输出到外部设备,需要较大驱动能力的场景。

7.开漏式复用功能(Open-Drain Alternate Function):

特点: 用于实现开漏输出,并复用了片上外设功能。
应用: 适用于需要实现外设功能,同时共享信号线的场景,例如硬件I2C的SDA、SCL线。

8.推挽式复用功能(Push-Pull Alternate Function):

特点: 用于实现推挽输出,并复用了片上外设功能。
应用: 适用于需要实现外设功能,同时需要提供较大驱动能力的场景,例如SPI的SCK、MISO、MOSI线。

三、代码配置

1.设置工作模式

配置GPIO的工作模式,包括输入、输出、模拟等。这一步通常使用HAL_GPIO_Init函数来完成,该函数需要传入GPIO端口号和一个包含GPIO初始化信息的结构体。

// 例子:配置GPIOB的Pin 5为推挽输出,速度为中等,无上下拉
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

2.设置输出状态

如果配置的GPIO是输出引脚,可以使用HAL_GPIO_WritePin或HAL_GPIO_TogglePin函数来设置输出状态。

// 例子:设置GPIOB的Pin 5输出高电平
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
// 例子:翻转GPIOB的Pin 5状态
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);

3.读取输入状态(可选)

如果配置的GPIO是输入引脚,可以使用HAL_GPIO_ReadPin函数来读取输入状态。

// 例子:读取GPIOB的Pin 5输入状态
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == GPIO_PIN_SET) {
    // 输入为高电平
} else {
    // 输入为低电平
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值