GPIO工作模式

一、四种输入模式

根据电路图,把引脚配置成输入,读某个寄存器就可以得到这个引脚的状态是零还是一。对于悬空的引脚无法判断是高电平还是低电平。
在这里插入图片描述
在这里插入图片描述

如图所示,当电阻R2足够大大于R1时,电压V约等于3.3V,只要V的电压大于1.7V,引脚读出的就是1,高电平。红色部分电阻属于下拉电阻。引脚悬空时没有办法知道电平是多少,没有一个参考电压,要使k1按下是高电平,松开是低电平
在这里插入图片描述
按下时是低电平,松开高电平,当电阻R2比较小或者约等于0的时候,就能分辨出K2按下和松开是引脚的电平是多少
可以将上拉和下拉集成到芯片内部引脚处
在这里插入图片描述
如图所示当按键K按下得到高电平,松开得到低电平,这个时候就要使能芯片内部下拉电阻。简称使能上拉
在这里插入图片描述
如图所示当按键按下引脚是低电平,松开要得到高电平就要使能芯片内部的上拉电阻确定一个值,简称使能下拉。
在这里插入图片描述
当外部提供上拉电阻和下拉电阻,不使用芯片内部的上拉电阻和下拉电阻就叫做浮空输入。
在这里插入图片描述
引脚进来经过施密特触发器到达输入数据寄存器,要么得到1或0。有时候要得到这个电压原始的数据,走模拟输入时,在这个场景里面让引脚在芯片内部是浮空状态,不使用上拉,也不使用下拉,让电压完全由外部电路决定,让引脚接到模拟输入里面去,不接到数据输入里面去。
数据输入、模拟输入,其它的输入,例如IIC模拟输入。

引脚电压范围是多少,读到一和零时电压范围是多少。读到1电源电压范围1.546 ~ 3.6V, 引脚有FT的,电压范围是1.546~5.x V,当电压 -0.3 ~ 1.146V是低电压,读到0,

在这里插入图片描述
上图是施密特触发器的作用,保证了输入数据寄存器里面的零和一稳定

二、四种输出模式

在这里插入图片描述

点亮这盏灯,V=Vdd=3.3V,熄灭这盏灯我希望V=0V。输出1的时候P_MOS闭合,N_MOS打开,输出零的时候N_MOS闭合,P_MOS打开。
复用功能下的推挽输出
在这里插入图片描述
如图所示前面两位CNF决定引脚是开漏还是推挽,后面两位决定引脚速出速率
在这里插入图片描述
上图是GPIO引脚模式配置
在这里插入图片描述

三级目录

### 华大半导体 GPIO 工作模式及相关配置 华大半导体的 GPIO(通用输入/输出接口)支持多种工作模式,这些模式可以通过寄存器或库函数进行灵活配置。以下是关于其主要工作模式及其配置方法的详细介绍。 #### 1. **GPIO 的基本功能** GPIO 是一种可编程的硬件资源,能够被设置为不同的工作模式以满足各种应用需求。常见的 GPIO 功能包括但不限于输入、输出、推挽、开漏以及外部中断触发等功能[^1]。 #### 2. **GPIO 的常见工作模式** 华大半导体的 GPIO 支持以下几种典型的工作模式: - **输入模式** 在此模式下,GPIO 被配置为接收外部信号。通常会结合上拉电阻或下拉电阻来稳定输入状态。例如,在低功耗设计中,通过 `Sysctrl_SetPeripheralGate` 和 `Gpio_PuDisable/Gpio_PdDisable` 来控制上下拉电阻的状态[^3]。 - **输出模式** 输出模式允许 MCU 向外部设备发送逻辑电平信号。根据实际需求可以选择推挽输出或开漏输出。例如,在 DS18B20 温度传感器的应用场景中,PB03 引脚被配置为强驱动推挽输出模式,具体代码如下: ```c stcGpioCfg.enDir = GpioDirOut; stcGpioCfg.enOD = GpioOdDisable; stcGpioCfg.enDrv = GpioDrvH; ``` - **外设复用模式** 当 GPIO 连接到特定外设时,需将其配置为相应的复用功能。例如,PWM 输入捕获功能需要将 PB07 配置为 TIM62_PWM 外设的功能引脚,代码片段如下: ```c GPIO_SetFunc(TMR6_2_PWMA_PORT, TMR6_2_PWMA_PIN, GPIO_FUNC_3_TIM62_PWMA, PIN_SUBFUNC_DISABLE); ``` - **模拟模式** 如果 GPIO 需要用于 ADC 或 DAC 等模拟功能,则应禁用数字功能并启用模拟路径。例如,在 ADC 测量模拟量的过程中,可能涉及 DMA 数据传输和通道切换的操作[^4]。 #### 3. **GPIO 的配置流程** 为了正确配置 GPIO,一般遵循以下步骤: - 开启对应 GPIO 的时钟门控,确保模块正常运行。 - 设置 IO 方向(输入/输出)、驱动方式(推挽/开漏)以及其他属性(如上下拉电阻)。 - 若需要使用外设复用功能,则调用相关 API 将 GPIO 映射到指定外设。 以下是一个完整的初始化示例代码: ```c uint8_t DS18B20_Init(void) { stc_gpio_cfg_t stcGpioCfg; DDL_ZERO_STRUCT(stcGpioCfg); Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); // 开启 GPIO 时钟门控 stcGpioCfg.enDir = GpioDirOut; // 端口方向配置 -> 输出 stcGpioCfg.enOD = GpioOdDisable; // 推挽输出 stcGpioCfg.enPu = GpioPuDisable; // 上拉禁止 stcGpioCfg.enPd = GpioPdDisable; // 下拉禁止 stcGpioCfg.enDrv = GpioDrvH; // 强驱动 Gpio_Init(GpioPortB, GpioPin8, &stcGpioCfg); // 初始化端口 Gpio_SetIO(GpioPortB, GpioPin8); // 默认置高电平 } ``` #### 4. **注意事项** 在实际开发过程中需要注意以下几点: - 不同型号的芯片可能会有细微差异,请参考具体的 datasheet 文档。 - 对于低功耗应用场景,合理关闭未使用的 GPIO 并配置合适的上下拉电阻有助于降低整体功耗[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值