通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。
GPIO输出初始化顺序
1、确定GPIO是输入、通用输出、复用功能还是模拟输入。( 模式寄存器: MODER )
2、如果输出还要确定是推挽输出还是开漏输出(输出类型寄存器: OTYPER )
3、配置输出的速度(输出速度寄存器: OSPEEDR )
4、输出的时候内部的上/下拉电阻要不要开启(.上拉/下拉寄存器: PUPDR )
5、具体要输出的内容(置位复位寄存器: BSRR和数据输出寄存器: ODR )
1.配置端口模式寄存器确定使用模式
每两位控制一个IO,例当MODER0设置为0,0,既为输入状态,我们想控制PB0输出高低电平,则MODER0设置为0,1,输出模式
2,确定是推挽输出还是开漏输出(输出类型寄存器: OTYPER )
什么叫推挽输出?
1、可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由VSS决定。
2、推挽结构指两个三极管受两路互补的信号控制,总是在一个导通的时候另外- 个
截止,优点开关效率效率高,电流大,驱动能力强。
3、输出高电平时,电流输出到负载,叫灌电流,可以理解成推,输出低电平时,负
载电流流向芯片,叫拉电流,即挽。
什么叫开漏输出?
1、只能输出低电平,不能输出高电平。
2、如果要输出高电平,则需要外接上拉。
3、开漏输出具有"线与”功能,一个为低,全部为低,多用于I2C和SMBUS总线。
3、配置输出的速度(输出速度寄存器: OSPEEDR )
与模式寄存器类似由两位控制一个IO,我们默认设置低速即可,既OSPEEDR0置为0,0
4、(.上拉/下拉寄存器: PUPDR )
上拉下拉不配置即可。
5、具体要输出的内容(置位复位寄存器: BSRR和数据输出寄存器: ODR )
NPN IO输出高电平,三极管导通,低断开
PNP IO输出低电平,三极管导通,高断开
PB0控制灯LED4,当PB0输出低电平时LED4点亮,PB0输出高电平时LED4熄灭。
使用寄存器控制PB0代码实现
int main(void)
{
RCC->IOPENR |=1<<1;//打开GPIOB的使能
GPIOB->MODER |=1<<0;//配置01输出模式(PB0的)
GPIOB->MODER &=~(1<<1);//配置01输出模式
GPIOB->OTYPER &=~(1<<0);//配置输出类型 推挽输出(PB0的)
GPIOB->OSPEEDR |=1<<0;//配置输出速度(PB0的)
GPIOB->OSPEEDR |=1<<1;//配置输出速度(PB0的)
while (1)
{
GPIOB->BRR=1<<0;//控制PB0输出低电平
}
}