1.
GPIO表示的时通用输入输出口,有8种输入输出模式,引脚电平为0-3.3V,部分引脚可以容忍5V。
输出模式下可以控制端口输出高低电平,用来驱动LED,控制蜂鸣器,模拟通信协议输出时序等。
输入模式下可读取端口的高低电平或电压,用来读取按键输入(最常见),外界模块的电平信号输入,ADC电压采集,模拟通信协议接收数据等。
2.GPIO基本结构
图解:左边为APB2外设总线
内核通过APB2对寄存器进行读写,达到读取和输出电平的功能
寄存器的每位对应一个引脚
3.GPIO位结构
右边vdd接3.3v,vss接0v,确保电压在0-3.3v
4.输出部分:
上方vdd和vss调整上拉输入(高电平输入)或者下拉输入(低电平输入)
施密特触发器将输入电压整形,变成方波
然后写入输入数据寄存器,用来读数
5.输入部分:
写入通过片上外设或者输出数据寄存器,输出数据寄存器只能整体读写,具体某一位的控制通过位设置/清除寄存器来实现,例如
方法1:先读出寄存器,再通过按位与和按位或的方式来更改某一位,然后再将更改后的数据写回去,C语言中就是&=和|=的操作
方法2:通过设置位设置/清除寄存器,在对应的位写1,其他位写0
推挽输出:p-mos和n-mos均有效,数据寄存器为1时,上管导通,下管断开,输出直接接到vdd,就是输出高电平。
开漏输出:p-mos无效,n-mos有效,数据寄存器为1时,下管断开,数据寄存器为0时,下管导通,仅有低电平有驱动能力。可以作为通信的模式,或者输出5V的电平信号
关闭:引脚配置为输入模式,关闭
6.GPIO模式
开漏输出和推挽输出都可以输出有驱动能力的低电平,但只有推挽输出能输出有驱动能力的高电平。