GPIO的工作方式
输入
浮空输入模式
输出缓冲器被禁止,施密特触发输入被激活,不接上拉和下拉电阻,出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器。
上拉输入模式
输出缓冲器被禁止,施密特触发输入被激活,上拉电阻接通,不接下拉电阻,当I/O引脚无输入信号时,读取到的数据为1,即高电平
下拉输入模式
输出缓冲器被禁止,施密特触发输入被激活,上拉电阻不接,下拉电阻接通,当I/O引脚无输入信号时,读取到的数据为0,即低电平
有些传感器等元气件,他们的信号输出有效时候会输出一个高电平(或者低电平),无效时候不输出,为开路。此时我们就必须用上拉电阻(或下拉电阻)。
模拟输入模式
输出缓冲器被禁止,禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置为’0’;上拉和下拉电阻被禁止; I/O引脚的信号交由片上外设(比如ADC)处理。
输出
推挽输出模式
输出缓冲器被激活,施密特触发输入被激活,上拉电阻和下拉电阻被禁止,若通过输出数据寄存器输出1,则P-mos管导通,N-MOS管截止,I/O脚得到高电平;输出0,则相反
输出低电平时0v,输出高电平时3.3v;对输出数据寄存器的读访问得到最后一次写的值
复用推挽输出
开漏输出模式
输出缓冲器被激活,施密特触发输入被激活,上拉电阻和下拉电阻被禁止,输出寄存器上的’0’激活N-MOS,端口得到低电平;而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。
复用开漏输出
输出对比
- 推挽输出:
可以输出高低电平,连接数字器件,两个MOS管轮流导通,使其负载能力
和开关速度都比普通方式有很大提高 - 开漏输出:
只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电
极。要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收
电流的能力相对强(一般20ma以内)。 - 非复用输出方式其输出值由cpu执行指令控制,复用
输出方式其输出值来自片上外设
输出引脚的速度
- “速度”指输出驱动电路的响应速度,并不是输出信号的速度。芯片内部在
I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据
自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模
块,达到最佳的噪声控制和降低功耗的目的。 - GPIO的引脚速度应与应用相匹配,如果输出信号的频率超过了驱动电路的
响应速度,就有可能信号失真。(比如:信号频率为10MHz,而你配置了
2MHz的带宽,则10MHz的方波很可能就变成了正弦波),另一方面,速度
配置越高,噪声越大,功耗越大。 - 常用的选择:
① USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省
电也噪声小。
② I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的
GPIO引脚速度。
③ SPI接口,若使用18M或9M波特率,需要选用50M - 当GPIO的I/O引脚配置为输入模式时,不需要配置输出速度。
GPIO寄存器
实现对GPIO端口初始化配置和数据输入输出控制
1. 配置寄存器:GPIOx_CRL、GPIOx_CRH
用来选择引脚功能,例如输入或输出
2. 数据寄存器:GPIOx_IDR、GPIOx_ODR
用来保存引脚输入电平或输出电平
4. 位控寄存器:GPIOx_BSRR、GPIOx_BRR
用来控制某引脚为1或0
4. 锁定寄存器:GPIOx_LCKR
用来锁定引脚配置(不允许修改)
每个寄存器只能以32位(字)进行访问
不允许16位(半字)或8位(字节)访问
每组端口有两个32位配置寄存器
• 配置寄存器低(Low) 字GPIOx_CRL
• 配置寄存器高(High)字GPIOx_CRH
(x是A~G)
配置寄存器低字CRL对应配置 低8位引脚Px0、Px1、……Px7
配置寄存器高字CRH对应配置 高8位引脚Px8、Px9、……Px15
两个32位(一个64位)配置寄存器
每4位对应一个引脚(64位对应16个引脚)
• 低2位设置其工作模式(MODE)
• 高2位设置其配置(CNF:Configuration)
共有4种输入功能、4种输出功能
GPIO的引脚配置功能表
GPIO的数据寄存器
举例
使GPIOE的第5管脚输出低电平,使GPIOE端口的第11管脚输出高电平
如果使用端口输出数据寄存器GPIOE_ODR,按照“读出—修改—写回”策略,其语句为:
GPIOE_ODR &=~(1uL<<5);
GPIOE_ODR |= (1uL<<11);
位输出问题
对输出数据寄存器某位写入时
• 要考虑其他位的状态,不能任意改变
需要首先读出输出数据寄存器的内容
• 修改相应位再写入(读出-修改-写回)
GPIO的输出数据寄存器ODR可以读出
• 用以支持位输出控制
GPIO的位控制器
每个端口有两个位控寄存器
• 只能写入、不能读出
• 某位写入1实现I/O引脚复位或置位
• 写入0对I/O引脚无影响(作用)一个是位置位/复位寄存器BSRR
• 高16位控制引脚为低电平(复位BR:Bit Reset)
• 低16位控制引脚为高电平(置位BS:Bit Set)
一个是位复位寄存器BRR
• 低16位控制引脚为低电平(复位BR:Bit Reset)
举例
使GPIOE的第5管脚输出高电平:
GPIOE_BSRR=(1uL<<5);
使GPIOE端口的第11管脚输出低电平:
GPIOE_BSRR = (1uL<<11)<<16;
GPIO的锁定寄存器
端口配置锁定寄存器GPIOx_LCKR(32位)
• 用于冻结配置寄存器对I/O引脚功能的设定
当对端口执行了写入锁定序列后
• 被锁定引脚配置的工作模式不能再改变
• 直到下次复位后才被解锁
锁定功能可以防止程序随意改变GPIO配置
举例
要锁定GPIOE端口的第5脚和第11脚的配置,
则使用以下语句:GPIOE_LCKR = (1uL<<16) | (1uL<<11) | (1uL<<5);
GPIOE_LCKR = (1uL<<11) | (1uL<<5);
GPIOE_LCKR = (1uL<<16) | (1uL<<11) | (1uL<<5);
GPIOE_LCKR = (1uL<<11) | (1uL<<5);
v1 = GPIOE_LCKR;
/*这里v1为无符号32位整型*/
标签:输出,引脚,寄存器,低电平,GPIOE,原理,GPIO From: https://www.cnblogs.com/wxk1213/p/17290192.html