GPIO输入输出的配置及输出和输入模式(STM32笔记)
目录
GPIO的初始化:
首先先调用函数:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
此函数为开启APB2总线的时钟,里面有两个参数:
- RCC_APB2Periph_GPIOx : x为几那就是对应的外设
- 第二个参数可取ENABLE/DISABLE(开启/关闭)时钟
随后初始化GPIOx,调用GPIO_Init(参数1,参数2);
参数1:GPIOx指定是几号GPIO口
参数2:一个GPIO_InitTypeDef类型的结构体指针

里面有三个成员:
1.GPIO_PIn参数:指定是几号口。

2.GPIO_Speed参数:控制引脚输出电平的快慢

3.GPIO_Mode参数:设置模式

使用时先配置好这两个参数。注意:第二个参数是结构体的地址(指针)
输入和输出模式:
先看一张GPIO基本结构图:

1.保护电路:

在输入时,接了两个保护二极管。Vss = 0v,Vdd = 3.3v
- 当输入的电压<0v时,下面的二极管导通,输入电压就全部流向下面。
- 当输入的电压>3.3v时,上面的二极管导通,输入的电压就全部流向上面。
这样就保证了只有0~3.3v的电压才能进入左边进行工作
2.施密特触发器
(图中名字写错了)

他的作用是对输入信号进行 “整形” 和 “抗干扰”,把不稳定的模拟信号,转换成干净、标准的数字方波信号。
他是通过双阈值来工作的:设定两个值,一高一低(V_{T+}和V_{T-})。
当电压高于高阈值时,直接把电压设为高阈值,当低于低阈值时把电压设置为低阈值
注意:假如此时为高阈值,只有当电压低于低阈值时才会变成低压。相反,若此时电压处于低电压,只有当电压高于高阈值时才会变成高压。
(你可以理解为把模拟量变成了数字量,因为模拟量可以是1,1.2,3,4 ... 然后设置了两个值x和y,当低于x时为0,高于y时为1)
3.浮空/上拉/下拉

浮空输入时:输入驱动器里面的两个(像弹簧一样的)连接的开关都不会闭合,就导致了电压处于浮空状态(没有具体的值,易受环境影响)
上拉输入:输入驱动器里面上面的开关闭合,此时上面的Vdd导通,此时电压处于Vdd=3.3v
下拉输入:输入驱动器里面下面的开关闭合,此时下面的Vss导通,此时电压处于Vss = 0v
3.模拟输入:

这里施密特触发器关闭状态,重新引一根线接到专门的ADC外设
4.开漏/推挽输出:

此时看输出驱动器:输出控制后面接了两个mos管,推挽输出状态下,两个mos管都闭合
mos管导通条件:栅极(输入)跟(Vdd/Vss)的差值,大于某个阈值(一般是0.7)就导通
N-MOS 管:栅极高电平导通,低电平截止
P-MOS 管:栅极低电平导通,高电平截止
输出控制端输出1,P管前面接非,接收为0,上面接Vdd差值大于
注意:不可能出现两个mos管都同时导通的情况
开漏输出:输出控制一直输出低电平让P-Mos不工作,只输出0
代码:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
更多推荐



所有评论(0)