【stm32】GPIO
GPIO(通用输入输出口)
1.可配置8种输入输出模式
浮空输入,上拉输入,下拉输入的电路基本结构一样,都可以读取端口的高电平,区别为上拉电阻和下拉电阻的连接。引脚悬空时,上拉输入默认高电平,下拉输入默认低电平,浮空输入不确定,要在端口处接一个连续的驱动源,不能悬空。
在输入模式下,输出驱动器断开,只能输入不能输出
当输入为5V时,上面的保护二极管要进行处理,否则接VDD 3.3V时,外部接入5V电压会导致上面二极管开启并产生比较大的电流
模拟输入
只剩下引脚接入片上外设一条线,会关闭数字的输入功能
当使用ADC时,将引脚配置为模拟输入
开漏输出和推挽输出,电路结构基本一样,为数字输出端口,用于输出高低电平,区别为开漏输出的高电平为高阻态,没有驱动能力;推挽输出高低电平都有驱动能力
输出由输出数据寄存器控制,P-MOS无效,为开漏输出;P-MOS和N-MOS都有效,为推挽输出
在输出模式下,输入模式也有效(一个端口只能一个输出,但可以有多个输入)
复用开漏输出和复用推挽输出,与开漏输出和推挽输出相比,是复用的输出,引脚电平由片上外设控制
2.引脚电平0~3.3V(数据0为低电平,0V;数据1为高电平 3.3V),部分可容忍5V(可输入5V电压,高电平,输出最大为3.3V)
具体可查看附件引脚定义,带FT即可容忍5V的
3.输出模式下可控制端口输出高低电平,如驱动LED,控制蜂鸣器,模拟通信协议输出时序
4.输入模式下读取端口高低电平或电压,如读取案件输入,外界模块电平信号输入,ADC电压采集,模拟通信协议接收数据
GPIO基本结构
所有GPIO都挂载在APB2外设总线上
GPIO位结构
蜂鸣器
1.有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可发声,频率固定,如下图
2.无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声调整提供振荡脉冲的频率,可发出不同频率的声音
三极管开关驱动方案:
对于功率较大的,直接而用IO口驱动会使stm32负担过重,这是可以用三极管驱动电路来驱动
上面图为PNP三极管的驱动电路,三极管左边为基极,带牵头为发射极,剩下为集电极,基极给低电平,三极管导通,通过3.3V和GND给蜂鸣器提供电流;基极给高电平,三极管截至,蜂鸣器无电流
下面图为NPN三极管驱动电路,驱动逻辑与上面相反,基极高电平导通,低电平断开
PNP三极管最好接在上面,NPN三极管最好接在下面,是因为,三极管的通断,是需要在发射极和基极直接产生一定的开启电压
LED
为stm32的GPIO口驱动LED电路
上面为低电平驱动电路,LED正极接3.3V,负极通过限流电阻接到PA0,PA0输出低电平时,LED两端产生电压差,,形成正向导通的电流;输出高电平时,不会形成电流,熄灭
限流电阻一方面防止LED因电流过大而烧毁,也可以调整LED亮度
下面为高电平驱动电路,同理相反
选择:依靠IO口高低电平的驱动能力,在推挽模式下,高低电平均有较强驱动能力,两种接法均可;但在单片机电路里,一般倾向第一种,因为很多单片机或芯片都使用高电平弱驱动,低电平强驱动的规则。
注;本文来源为江协b站课程,为笔记