目录

GPIO的初始化:

输入和输出模式:

1.保护电路:

2.施密特触发器

3.浮空/上拉/下拉

3.模拟输入:

4.开漏/推挽输出:

代码:


GPIO的初始化:

首先先调用函数:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

        此函数为开启APB2总线的时钟,里面有两个参数:

  1. RCC_APB2Periph_GPIOx :  x为几那就是对应的外设
  2. 第二个参数可取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);

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐