STM32 GPIO功能详解与使用方法
目录
一、参考文章
二、GPIO相关寄存器
1.GPIO配置寄存器(GPIOx_CRL, GPIOx_CRH)
2.端口输入数据寄存器(GPIOx_IDR)
3.端口输出数据寄存器(GPIOx_ODR)
4.端口位设置/清除寄存器(GPIOx_BSRR)
5.端口位清除寄存器(GPIOx_BRR)
6.端口配置锁定寄存器(GPIOx_LCKR)
三、GPIO电路结构和各种工作模式
1.输入模式
2.输出模式
3.复用模式
4.模拟输入模式
四、外设的GPIO配置
五、模式用途
1.模拟输入
2.上/下拉输入
3. 推挽输出
4.开漏输出
六、总结
1.外接上拉电阻可以增强单片机引脚的驱动能力
2.TTL施密特触发器的作用
3.P-MOS和N-MOS的作用
4.开漏输出和推挽输出的区别
七、代码
一、参考文章
1.介绍了GPIO管脚的分类
GPIO简介-CSDN博客
2.介绍了GPIO八种工作模式原理,有电路图详解
GPIO输入输出模式原理(八种工作方式附电路图详解)_gpio四种输入输出模式-CSDN博客
3.介绍了上下拉电阻的作用,三极管驱动电路,三种电流的定义
上、下拉电阻(定义、强弱上拉、常见作用、吸电流、拉电流、灌电流)_弱上拉和强上拉的区别-CSDN博客
4.介绍了BSRR和BRR寄存器的作用
关于STM32的BSRR(端口位设置/清除寄存器) 和 BRR(端口位清除寄存器) 的理解(初学32)-CSDN博客
二、GPIO相关寄存器
I/0端口寄存器必须按32位字被访问;
1.GPIO配置寄存器(GPIOx_CRL, GPIOx_CRH)
Control Register High/Low
2.端口输入数据寄存器(GPIOx_IDR)
Input Data Register
3.端口输出数据寄存器(GPIOx_ODR)
Output Data Register
4.端口位设置/清除寄存器(GPIOx_BSRR)
Bits Set Reset Register
5.端口位清除寄存器(GPIOx_BRR)
Bits Reset Register
6.端口配置锁定寄存器(GPIOx_LCKR)
Local Key Register
三、GPIO电路结构和各种工作模式
以下是GPIO的电路结构特点
以下为GPIO的八种工作模式
1.输入模式
2.输出模式
3.复用模式
4.模拟输入模式
四、外设的GPIO配置
当使用某种外设时,不知道配置GPIO为哪种工作方式时;
可以参考手册,不一定会准,只能当一个参考,只展示了一部分。
五、模式用途
1.模拟输入
ADC采集,输入的是模拟信号。
2.上/下拉输入
按键检测
第一个按键,按键按下时 GPIO接VCC,此时GPIO口的电平应该是3.3V,则软件通过检测IO口是否为高电平时来判断按键是否按下。为了防止按键误触发,将GPIO配置成下拉模式。
则GPIO的默认电平为低电平,当GPIO的电平变成高电平时表明按键被按下了。
下面三个按键,按键按下时GPIO接地,此时GPIO口的电平应该是0V,则软件可以通过检测IO口是否为低电平时来判断按键是否按下。为了防止按键误触发,将GPIO配置成上拉模式。
则GPIO的默认电平为高电平,当GPIO的电平变成低电平时表明按键被按下了。
3. 推挽输出
可以输出高、低电平。导通损耗小、效率高。既提高电路的负载能力,又提高开关速度,广泛应用各种实验。
4.开漏输出
IO 输出 0 接 GND,IO 输出 1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为 1 时,IO 口的状态由上拉电阻拉高电平。
这样 IO 口也就可以由外部电路改变为低电平或不变,该模式适用于电平不匹配场合、适合做电流型的驱动,吸收电流能力比较强。(如软件IIC)
六、总结
1.外接上拉电阻可以增强单片机引脚的驱动能力
在STM32芯片中,内部上拉电阻通常被设计为低功耗和高阻抗,以适应大多数标准应用的需求。所以GPIO内置的上拉电阻较大,导致该电阻的电流较小,进而使得驱动能力较弱。
外接一个阻值较小的上拉电阻,两个电阻并联从而总电阻值减小,输出电流增大,驱动能力相应增强。
2.TTL施密特触发器的作用
可以根据输入信号的变化,产生稳态的脉冲信号(非0即1)。输入信号幅度大于阈值时输出1,小于阈值时输出0.
具有滞回特性,即当输入信号在某一阈值附近波动时,输出信号能够保持稳定,不会因微小的输入信号变化而频繁翻转,具有较好的抗干扰能力。简单来说,可以避免误触发现象的出现,避免输入信号出现尖脉冲导致误触发。
3.P-MOS和N-MOS的作用
在推挽输出时,P-MOS和N-MOS只有一个会导通,无非是和VDD或者VSS导通。这意味着GPIO直接和VDD或者VSS连接,可以认为上拉电阻和下拉电阻全部为0Ω,可以输出强高低电平。
MOS管内部电阻很小,导通时间快,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
在开漏输出时,只利用到了N-MOS,而P-MOS没被激活,分析与上面一样,该种工作模式下,只能输出强低电平。若是需要输出强高电平则需要在外部电路外接一个阻值较小的上拉电阻。
4.开漏输出和推挽输出的区别
关于推挽输出和开漏输出,最后用一幅最简单的图形来概括:
左边是推挽输出模式;右边为开漏输出模式,需要接上拉;
七、代码
GPIO初始化
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); //使能端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x; //引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOx, &GPIO_InitStructure); //初始化端口
八种工作模式选择
typedef enum
{ GPIO_Mode_AIN = 0x0, //模拟输入
GPIO_Mode_IN_FLOATING = 0x04, //浮空输入
GPIO_Mode_IPD = 0x28, //下拉输入
GPIO_Mode_IPU = 0x48, //上拉输入
GPIO_Mode_Out_OD = 0x14, //开漏输出
GPIO_Mode_Out_PP = 0x10, //通用推挽输出
GPIO_Mode_AF_OD = 0x1C, //复用开漏输出
GPIO_Mode_AF_PP = 0x18 //复用推挽
}GPIOMode_TypeDef;
作者:生活最重要(ง •̀_•́)ง