GPIO理解

GPIO引脚是除去电源引脚(VSS/VDD)、复位引脚(NRST)、备用电池引脚(VBAT)以及启动模式选择引脚(BOOT0)以外的所有引脚

命名规则:以字母开头表示组,以数字表示引脚编号

引脚的8种工作模式:通用推挽输出、通用开漏输出、复用推挽输出、复用开漏输出、上拉输入、下拉输入、浮空输入、模拟模式

通用(OUT):CPU直接对引脚控制输出高低电平

复用(AF):其他片上外设对引脚控制输出高低电平

推挽(PP):高低电平均有驱动能力

开漏(OD):低电平有驱动能力,高电平具有高阻态现象,约等于开路状态

上拉输入:

下拉输入:

浮空输入:

 


如何使用引脚以达到通过引脚控制输入输出高低电平?
先开启引脚的时钟并初始化,之后就可以控制引脚输入输出高低电平

RCC_APB2PeriphClockCmd(参数1,参数2);
作用:开启APB2桥其中的某个引脚组
参数1:APB2桥中的引脚组名,可以追溯该方法的源码中查看有哪些引脚组
参数2:ENABLE/DISABLE,使能或失能即开启或关闭
为什么需要开启时钟:类比人体机能机构,想要控制手指,则需要大脑发送指令;手指想要动起来需要能量,人体的能量就是血液,如果将手指的供血系统关闭,则手指接收到指令也没有能量执行指令;而时钟类似人体的供血系统为某个引脚提供能量,开启时钟就开启了该引脚的供电系统

 

GPIO_Init(参数1,参数2);
作用:设置开启时钟的引脚组中某个引脚的各种参数(即初始化)
参数1:开启时钟的引脚组
参数2:一个GPIO_InitTypeDef类型的结构体参数,里面包含引脚的各种设置,&结构体参数名
以下是GPIO_InitTypeDef类型的结构体参数定义和介绍
GPIO_InitTypeDef GPIO_InitStruct;     //定义一个GPIO_InitTypeDef类型的结构体变量

GPIO_InitStruct.GPIO_Mode = 引脚的工作模式(8种);
GPIO_InitStruct.GPIO_Pin = 引脚组中的哪个引脚工作;
GPIO_InitStruct.GPIO_Speed = 引脚的工作频率(输出的频率);
以上三个都是结构体变量中的参数,各个参数的值都是固定好的,如果不了解可以追溯到源码选中GPIO_Mode/Pin/Speed全局查找查看参数的值有哪些方便选择
以上两个函数就可以实现某个GPIO引脚的初始化

引脚的输出速度/频率(1秒内可以输出多少个高低电平)
在理想状态下引脚的高低电平是瞬间切换然后保持的;但是实际状态却是切换过程中有一个上升或下降的过渡时间,然后才会保持高低电平
根据上升下降和保持的时间将引脚的输出速度分为了低、中、高3种速度
低速:上升下降:125ns,保持时间:250ns    输出频率=1s/(125+250+125)ns=10000000ns/500ns=2MHz
中速:上升下降:25ns,保持时间:50ns    输出频率=1s/(25+50+25)ns=10000000ns/100ns=10MHz
高速:上升下降:5ns,保持时间:10ns    输出频率=1s/(5+10+5)ns=10000000ns/20ns=50MHz

 

 

 

GPIO_SetBits(参数1, 参数2);
作用:将GPIO引脚设置为高电平(输出1)
参数1:选择GPIO引脚所在的GPIO组
参数2:选择GPIO引脚

 

GPIO_ResetBits(参数1, 参数2);
作用:将GPIO引脚设置为低电平(输出0)
参数1:选择GPIO引脚所在的GPIO组
参数2:选择GPIO引脚

 

GPIO_WriteBit(参数1, 参数2, 参数3);
作用:设置GPIO引脚的高低电平
参数1:选择GPIO引脚所在的GPIO组
参数2:选择GPIO引脚
参数3:Bit_RESET/Bit_SET两个可选值,同上Bit_RESET表示0输出低电平,而Bit_SET表示1输出高电平

以上三个是GPIO引脚控制输出高低电平函数

 

uint8_t GPIO_ReadInputDataBit(参数1, 参数2);
作用:读取输入GPIO引脚的电平,返回一个无符号int类型的对应值
参数1:选择GPIO引脚所在的GPIO组
参数2:选择GPIO引脚
返回值:Bit_RESET/Bit_SET两个值,同上Bit_RESET表示0输入低电平,而Bit_SET表示1输入高电平
常用在if/while判断中

posted on 2026-04-13 23:18  绝情世家  阅读(5)  评论(0)    收藏  举报