GPIO

GPIO(General Purpose Input Output 通用输入输出口)

可配置8中输入输出模式

引脚电平:0~3.3V,部分引脚可容忍5V

输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出协议输出失序等。只要是能用高低电平进行控制的地方,都可以用GPIO来完成,如果是控制大功率设备,加入驱动电路即可

输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

GPIO的基本结构

image-20260803155540993

每个GPIO模块主要包含了寄存器和驱动器这些东西

寄存器:一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了

STM32是32位的单片机,所以内部的寄存器都是32位的

如果端口少于这个数,那就是低位对应端口

如上图,每一位寄存器对应一个引脚

输出寄存器写1,对应的引脚就会输出高电平;写0,就会输出低电平

输入寄存器读取为1,证明对应的端口目前是高电平;读取为0,就是低电平

驱动器:用来增强信号的驱动能力

GPIO位结构

image-20260803163351742

image-20260803170419689

这个是接了两个保护二极管的IO引脚,用于对输入电压进行限幅

当电压超过3.3V,那VDD导通;当电压低于0V,VSS导通。这样不正常的电压就不会进入电路导致损毁电路

image-20260803170754474

这个是上拉电阻和下拉电阻,当IO口浮空的时候,不确定是高电压还是低电压,电路容易受外界的影响而不稳定,这个的作用就是设置一个默认的电压,闭合VDD就是默认高电压,闭合VSS就是默认低电压

image-20260803171052897

这个是用来设置一个上下限的,当你的电压波动的时候会因为干扰而导致误判,所以直接划定两条界限,超过上限就是高电平,低过下限就是低电平

image-20260803171321072

这个的作用是当你想对某一位进行设置/清除的时候在寄存器对应的位置写1就会对内部电路里的这一位清0了,你写0就是对这一位不做任何改变

image-20260803171618698

这个是MOS管,上面这个图可能有问题,但设计需求就是:”寄存器写 1,PMOS 必须导通,寄存器写 0,NMOS 必须导通,要实现这个目的“,只需要再输出控制那个地方加个反相器

推挽:PMOS管和NMOS管都有效,STM32对IO口具有绝对的控制权

开漏:PMOS管无效,相当于直接断开

关闭:两个MOS管都无效

GPIO模式

image-20260803165746412

浮空/上拉/下拉输入

image-20260803165916308

模拟输入image-20260803165947522

开漏/推挽输出

image-20260803170034610

复用开漏/推挽输出

image-20260803170110341

LED:发光二极管,正向通电点亮,反向通电不亮

有源蜂鸣器:内部自带震荡源,将正负极接上直流电压即可持续发声,频率固定

无源蜂鸣器:内部不带震荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

相关的一些硬件电路(左边是LED,右边是蜂鸣器)

image-20260803170219049

GPIO的输出

芯片向外发出电信号,控制外部器件

1.LED闪烁

image-20260803220507081

image-20260803215012666

image-20260803215129086

image-20260803220258426

2.LED流水灯

image-20260803220521056

image-20260803222135675

3.蜂鸣器

image-20260803223458631

image-20260803223450748

几种使用库函数的方法

1.先打开相应硬件.h文件的最后,看一下有哪些函数,然后右键转到定义,查看一下函数和参数的用法(英文看不懂借助翻译)

2.打开库函数的固件函数用户手册

3.网上搜索

GPIO的输入

芯片读取外部电路传来的电平信号

按键:

常用的输入设备,按下导通,松手断开

按键抖动:由于按键内部使用的是机械弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有有一连串的抖动

按键的几种电路

image-20260803231417957

传感器模块:

传感器原件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定制电阻分压即可得到模拟电阻输出,再通过高电压比较器进行二值化即可得到数字电压输出

上拉下拉模型分析

比作两个弹簧,上下各一个,那个弹簧的拉力越大就偏向那一边

而电阻越小的那边代表拉力大的那边,因为电平偏向电阻小的那边

1.按键控制LED

image-20260804090435261

Key.c

image-20260804091311638

LED.c

image-20260804091553561

main.c

image-20260804090621172

2.光敏传感器控制蜂鸣器

image-20260804091745880

Buzzer.c

image-20260804092119290

LightSensor.c

image-20260804092221835

main.c

image-20260804092258863

main.c

[外链图片转存中…(img-qKhGuuzW-1785851669928)]

更多推荐