GPIO 設置

GPIO配置与中断触发详解
本文详细介绍了GPIO(通用输入输出)的三种状态——上拉、下拉和不拉,并探讨了这些配置如何影响中断的触发及信号读取。特别强调了输入GPIO的初始状态设置的重要性,以及它如何影响中断接收和信号的正确解读。

每个gpio 内部都有3种状态, 上拉,下拉,不拉。

hw,外部的 原理图设计 会根据这个,来对这个 input gpio进行状态变换,

比如:

hpd 中断pin,没有中断的时候,值是0,那么他的初始设置应该是下拉的。 这时候 当有hdmi cable插入的时候,硬件上设计,让他内部变成 上拉, 这时候读到的值就是1

如果hpd的初始状态设置为上拉,那么默认值是1. 这时候 插入hdmi cable,因为硬件上设计是,当插入的时候上拉,所以 hpd的值没有发生变化。 

所以说,每个input 的初始状态的设置是非常重要的,取决了你是否能收到中断,以及收到中断后读到的状态0,1是否颠倒。



output gpio,一般配成 no pull,这样,才能根据我们对他的设置,变成1(pull up:上拉), 和 0(pull down:下拉)


### GPIO 设置代码示例 在嵌入式开发中,通用输入/输出 (GPIO) 是一种常见的硬件接,用于控制外部设备或读取传感器数据。以下是基于 C 和 Python 的两种常见平台(如 Raspberry Pi 或 STM32)上的 GPIO 配置方法。 #### 基于 Raspberry Pi 的 Python 示例 Raspberry Pi 提供了一个名为 `RPi.GPIO` 的库来简化 GPIO 控制操作[^1]: ```python import RPi.GPIO as GPIO import time # 使用 BCM 编号模式 GPIO.setmode(GPIO.BCM) # 定义引脚编号 pin = 18 # 将指定引脚设置为输出模式 GPIO.setup(pin, GPIO.OUT) try: while True: # 输出高电平 GPIO.output(pin, GPIO.HIGH) print("Pin is HIGH") time.sleep(1) # 输出低电平 GPIO.output(pin, GPIO.LOW) print("Pin is LOW") time.sleep(1) finally: # 清理 GPIO 设置 GPIO.cleanup() ``` 上述代码展示了如何通过循环切换 GPIO 引脚的状态,在实际应用中可以用来驱动 LED 等简单外设[^1]。 --- #### 基于 STM32 的 C 示例 对于微控制器如 STM32,通常会使用 HAL 库或其他底层 API 来配置 GPIO。以下是一个简单的初始化函数示例[^2]: ```c #include "stm32f4xx_hal.h" void GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用 GPIOA 时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置 PA5 作为推挽输出模式 GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; // 不带上下拉电阻 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速模式 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } int main(void) { HAL_Init(); GPIO_Init(); while (1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 设置 PA5 为高电平 HAL_Delay(1000); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 设置 PA5 为低电平 HAL_Delay(1000); } } ``` 此代码片段演示了如何利用 STM32 的 HAL 库实现对特定 GPIO 引脚的高低电平切换功能[^2]。 --- #### 关键概念说明 - **BCM 模式 vs BOARD 模式**: 在 Raspberry Pi 中,可以选择 BCM 或 BOARD 模式定义引脚编号。前者依据芯片内部编号,后者按照物理针脚顺序排列[^1]。 - **推挽输出与开漏输出**: 微控制器中的 GPIO 可能支持多种工作方式,其中最常用的是推挽输出和开漏输出。推挽适用于大多数场景,而开漏则常用于 I²C 总线通信等特殊需求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值