STM32:从内部电路开始教你GPIO接口的工作原理 上

1.什么是GPIO

GPIO(General-purpose input/output),通用输入输出接口,通俗的说,就是单片机的引脚,可以控制外部设备,实现单片机与外部硬件之间的连接和通讯。每个芯片上都有很多组GPIO。掌握了GPIO口差不多就掌握了操作硬件的能力。

例如图上的PA0-PA15,是一组GPIO引脚。

1.1 GPIO配置要认识哪些寄存器

每一组GPIO都有一组寄存器与之关联,我们是通过编程读写相关寄存器,来实现对GPIO引脚的控制。GPIO常用寄存器有四种,配置寄存器,数据寄存器,复位/置位寄存器,复用寄存器。

配置寄存器端口模式寄存器控制gpio的工作模式
端口输出类型寄存器控制gpio的输出类型
端口输出速度寄存器      控制gpio的输出速度
端口上下拉寄存器控制gpio的上拉/下拉
数据寄存器端口输入数据寄存器读取gpio的输入数据
端口输出数据寄存器控制gpio的输出电平

复位/置位寄存器

端口复位寄存器设置gpio端口的输出位是1还是0
复用寄存器复用功能寄存器设置io口的复用功能

暂时只用知道个大概,因为在实际编程中,库函数会封装好底层寄存器的操作细节,使得开发者可以更专注于应用逻辑的实现,而无需记住每一个寄存器的具体功能和配置方法。不过,了解关键寄存器和它们的作用仍然是非常重要的,这可以帮助你更好地理解硬件的工作原理,以及在遇到问题时进行调试和优化。

2.GPIO有哪些工作模式

GPIO的工作模式有四种输入模式,上拉输入,下拉输入,浮空输入,模拟输入。

四种输出模式,包括推挽输出,开漏输出,推挽复用输出,开漏复用输出。

3.工作模式这么多,从哪里开始理解?

我认为学习GPIO的工作模式,从内部电路开始理解比较好,理解了电路,才能更好的理解内部工作原理,方便设计外部电路,提高代码的可移植性,并且深化记忆。

3.1 GPIO原理图,周围电路讲解

每个GPIO内部都有这样一个电路结构,上面是输入电路,输入的是外部电路的电平信号,下面是输出电路,输出的是微控制器内部的控制信号。

保护二极管的作用是钳位引脚电压,防止过高或过低的电压,造成芯片内部电路损坏

4.结合电路讲解GPIO各个模式

4.1 模拟输入

这里的施密特触发器,可以讲模拟信号转化为数字信号。当模拟输入模式时,外部的模拟信号不经过施密特触发器,直接进入片上的模拟外设,例如ADC模块

4.2 上拉输入与下拉输入,浮空输入

通过设置端口模式寄存器来选择使用上拉电阻或下拉电阻

上拉模式下,输入数据寄存器直接读取IO端口的电平,IO端口的电平为高电平,则读取高电平,IO端口为低电平,则读取低电平。IO端口悬空无信号输入时,则被上拉到高电平。

下拉模式下,输入数据寄存器直接读取IO端口的电平,IO端口的电平为高电平,则读取高电平,IO端口为低电平,则读取低电平。IO端口悬空无信号输入时,则被下拉到低电平。与下拉模式相反。

浮空输入模式下,IO端口悬空时,读取的端口电平是不确定的,这就是这三个输入模式最大的不同。

5.GPIO各个输入模式的使用场景与隐患

5.1.浮空输入模式(GPIO_Mode_IN_FLOATING)

使用场景

按键检测:适用于需要检测外部按键的场景。按键未按下时,引脚呈高阻态,按下时引脚电平变化。

外部信号握手:适用于中断请求信号等外部信号的检测。

隐患

电平不确定:在引脚悬空时,读取的电平状态是不确定的,容易受到外界干扰,导致误读取。需要外部上拉/下拉电阻:如果需要稳定的默认电平,通常需要外部添加上拉或下拉电阻。

5.2  上拉输入模式(GPIO_Mode_IPU)

使用场景

默认高电平:适用于需要引脚在无外部驱动时保持高电平状态的场景,如某些通信协议的闲置状态保持。

低电平触发中断:适用于低电平有效的中断输入,如外部中断请求。

隐患

外部低电平影响:当外部电路输出低电平时,引脚电平会被拉低,可能导致误触发。

上拉电阻值:内部上拉电阻值较大(通常为30K~50KΩ),可能不足以驱动某些外部设备。

5.3 下拉输入模式(GPIO_Mode_IPD)

使用场景

默认低电平:适用于需要引脚在无外部驱动时保持低电平状态的场景,如某些通信协议的闲置状态。

高电平触发中断:适用于高电平有效的中断输入。

隐患

外部高电平影响:当外部电路输出高电平时,引脚电平会被拉高,可能导致误触发。

下拉电阻值:内部下拉电阻值较大(通常为30K~50KΩ),可能不足以驱动某些外部设备。

5.4 模拟输入模式(GPIO_Mode_AIN)

使用场景

ADC采集:适用于连接温度传感器、光照强度传感器、电压分压器等模拟信号源,通过ADC采集模拟信号并转化为数字值进行处理。

隐患

信号范围限制:输入信号必须在0~3.3V之间,否则可能损坏内部电路。

无法读取数字电平:在模拟输入模式下,信号不经过施密特触发器,无法读取准确的数字电平状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值