深度学习GPIO
GPIO
GPIO(General Purpose Input Output 通用输入输出口)
可配置8中输入输出模式
引脚电平:0~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出协议输出失序等。只要是能用高低电平进行控制的地方,都可以用GPIO来完成,如果是控制大功率设备,加入驱动电路即可
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
GPIO的基本结构

每个GPIO模块主要包含了寄存器和驱动器这些东西
寄存器:一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就可以完成输出电平和读取电平的功能了
STM32是32位的单片机,所以内部的寄存器都是32位的
如果端口少于这个数,那就是低位对应端口
如上图,每一位寄存器对应一个引脚
输出寄存器写1,对应的引脚就会输出高电平;写0,就会输出低电平
输入寄存器读取为1,证明对应的端口目前是高电平;读取为0,就是低电平
驱动器:用来增强信号的驱动能力
GPIO位结构


这个是接了两个保护二极管的IO引脚,用于对输入电压进行限幅
当电压超过3.3V,那VDD导通;当电压低于0V,VSS导通。这样不正常的电压就不会进入电路导致损毁电路

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

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

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

这个是MOS管,上面这个图可能有问题,但设计需求就是:”寄存器写 1,PMOS 必须导通,寄存器写 0,NMOS 必须导通,要实现这个目的“,只需要再输出控制那个地方加个反相器
推挽:PMOS管和NMOS管都有效,STM32对IO口具有绝对的控制权
开漏:PMOS管无效,相当于直接断开
关闭:两个MOS管都无效
GPIO模式

浮空/上拉/下拉输入

模拟输入
开漏/推挽输出

复用开漏/推挽输出

LED:发光二极管,正向通电点亮,反向通电不亮
有源蜂鸣器:内部自带震荡源,将正负极接上直流电压即可持续发声,频率固定
无源蜂鸣器:内部不带震荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音
相关的一些硬件电路(左边是LED,右边是蜂鸣器)

GPIO的输出
芯片向外发出电信号,控制外部器件
1.LED闪烁




2.LED流水灯


3.蜂鸣器


几种使用库函数的方法
1.先打开相应硬件.h文件的最后,看一下有哪些函数,然后右键转到定义,查看一下函数和参数的用法(英文看不懂借助翻译)
2.打开库函数的固件函数用户手册
3.网上搜索
GPIO的输入
芯片读取外部电路传来的电平信号
按键:
常用的输入设备,按下导通,松手断开
按键抖动:由于按键内部使用的是机械弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有有一连串的抖动
按键的几种电路

传感器模块:
传感器原件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定制电阻分压即可得到模拟电阻输出,再通过高电压比较器进行二值化即可得到数字电压输出
上拉下拉模型分析
比作两个弹簧,上下各一个,那个弹簧的拉力越大就偏向那一边
而电阻越小的那边代表拉力大的那边,因为电平偏向电阻小的那边
1.按键控制LED

Key.c

LED.c

main.c

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

Buzzer.c

LightSensor.c

main.c

main.c
[外链图片转存中…(img-qKhGuuzW-1785851669928)]
更多推荐
所有评论(0)