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判断中
浙公网安备 33010602011771号