stm32入门 2
GPIO简介
(1)GPIO(General Purpose lnput Output)通用输入输出口;
(2)可配置8种输入输出模式;
(3)引脚电平:0V~3.3V,部分引脚可容忍5V(有FT的)(但只能输出3.3V);
(4)输出模式下可控制端口输出高低电平,以驱动LED,控制蜂鸣器,模拟通信协议时序等;
(5)输入模式下可读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC 电压采集,模拟通信协议接收数据等;
GPIO基本结构
图1
图2
由图2可看出在stm32中所有的GPIO都是挂载在APB2外设总线上的;
每个GPIO模块内主要包含了寄存器和驱动器
寄存器
输出寄存器写1,对应的引脚就会输出高电平,写0,就会输出低电平;
输入寄存器读取为1,就证明对应端口目前是高电平,读取为0,就是低电平;
驱动器
驱动器是用来增加信号的驱动能力的,寄存器只负责存储数据(例如:点灯操作就需要驱动器负责增大驱动能力);
GPIO位结构
图3
输入部分
保护二极管
电压小于0V时VSS接通,电压大于3.3V时VDD接通,电压属于0~3.3V时两个保护二极管均不接通;
上拉电阻下拉电阻
给输入提供一个默认的输入电平,由于输入只能是高电平或低电平,若输入引脚什么都不接,输入就会处于一种浮空的状态,此时引脚的输入电平极易受到外界的干扰而改变,为了保证输入数据确定,就需要加上上拉电阻或下拉电阻(如果接入上拉电阻,当电阻悬空时,还有上拉电阻来保证引脚的高电平(又被称为默认为高电平的输入模式)(下拉同理));
肖特基触发器(施密特触发器)
图4
作用:对输入电压进行整形;
原理:如果输入电压大于某一阈值输出就会瞬间升为高电平,小于某一阈值就会瞬间降为低电平,在阈值内保持高电平或低电平(即只有高于上限或低于下限输出才会改变可参考图4);
连接至片上外设
模拟输入
连接到ADC,ADC接收模拟量,因此连接到施密特触发器之前;
复用功能输入
连接到其它需要读取端口的外设上,其接收的是数字量,因此在施密特触发器之后;
输出部分
位设置/清除寄存器
由于输出数据寄存器同时控制16个端口,并且这个寄存器只能整体读写,为了对某些口进行单独操作就需要用到位设置寄存器(可对某一位进行置1的操作,其余不需要操作的位置0)或位清除寄存器(想要置为0的写入1);
推挽输出(强推输出模式)
P-MOS和N-MOS均有效;
该模式stm32对IO口具有·绝对的控制权;
当数据寄存器为1时,P-MOS(上管)导通,N-MOS(下管)断开,输出直接接到VDD,也就是输出高电平;
当数据寄存器为0时,N-MOS(下管)导通,P-MOS(上管)断开,输出直接接到VSS,也就是输出低电平;
开漏输出
P-MOS无效,只有N-MOS工作;
当数据寄存器为1时,N-MOS(下管)断开,这时相当于断开,也就是高阻模式;
当数据寄存器为0时,N-MOS(下管)导通,输出直接接到VSS,也就是输出低电平;
开漏模式可作为通信协议的驱动方式,在多机通信的情况下这个模式可以避免各个设备的相互干扰,开漏模式还可用于输出5V的电平信号(输出低电平时N-MOS接VSS,输出高电平时,由外部的上拉电阻拉高至5V);
输出关闭
即为输入模式;
GPIO的八种模式
浮空/上拉/下拉输入
模拟输入
只有模拟输入会关闭数字的输入功能;
推挽/开漏输出
复用推挽/复用开漏输出
即使用片上外设来控制;
