首页 > 编程知识 正文

stm32单片机gpio配置模式,lm324芯片手册

时间:2023-05-04 04:46:23 阅读:108278 作者:1259

STM32F10X管脚在STM32F103ZET6上共有7组IO端口,每组有16个IO端口,分别为GPIOA~GPIOG,每组分别为PA0到PA16,STM 32 f 103 ref 它们分别是GPIOA到GPIOD,不同的是这种芯片,这就是一般的F1系列芯片引脚,其中大部分不仅可以作为GPIO使用,还可以作为串行引脚(USART、勤快哆啦A梦等外围功能引脚)进行复用

GPIO的基本结构和动作方式I/O端口位的基本结构

与51相比,STM32的IO端口非常复杂,因此使用起来也非常困难。 首先是STM32的IO端口

软件可以由以下八种模式组成:

(1) GPIO_Mode_IN_FLOATING输入浮动模式

)2) GPIO_Mode_IPU输入上拉模式

(3) GPIO_Mode_IPD输入下拉模式

(4) GPIO_Mode_AIN模拟输入模式

)5)打开/关闭GPIO_Mode_Out_OD输出模式

(6) GPIO_Mode_AF_OD开放泄漏复用输出模式

(7) GPIO_Mode_Out_PP推挽输出模式

(8) GPIO_Mode_AF_PP推挽复用模式

输入浮空模式

在这种状态下,I/O端口的电平信号进入输入数据寄存器。 此时的I/O电平信号不确定,完全由外部输入决定。 如果此管脚悬浮在空中(没有信号输入),则读取该端口的级别是不确定的。 电压有不确定性。

输入上拉模式

上拉是指将不确定的信号引入一定的值。 如上图所示,来自I/O端口的信号通过上拉电阻被引入VDD。 因此,与浮动输入相比,在I/O端口悬空的状态下,可以将输入端的电平保持为高电平。

输入下拉模式

下拉与上拉相同,通过I/O端口的信号被下拉电阻拉至VSS,在I/O端口悬空的状态下,可以将输入端的电平保持在低电平。

模拟输入模式

在模拟输入模式下,I/O端口模拟信号(电压信号而不是电平信号)直接模拟输入到片上外围模块,如ADC模块。

开路漏极输出模式

输出寄存器的‘0’激活N-MOS,输出寄存器的‘1’使端口进入高阻抗状态(P-MOS不被激活)。

N-MOS管,当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不会由输出的高低电平决定,而是由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平就是低电平。

因此,开路漏极输出只能输出强低电平,高电平必须通过外部电阻来提高。

开路漏极多路输出模式

开路漏极多路复用与开路漏极类似,只是电平信号的来源来自片上外围设备模块,而不是如图所示的CPU输出数据寄存器。

推挽输出模式

输出寄存器的‘0’激活N-MOS,输出寄存器的‘1’激活P-MOS。

P-MOS管和N-MOS管,当设置输出的值为高电平的时候,P-MOS管处于开启状态,N-MOS管处于关闭状态,此时I/O端口的电平就由P-MOS管决定:高电平;当设置输出的值为低电平的时候,P-MOS管处于关闭状态,N-MOS管处于开启状态,此时I/O端口的电平就由N-MOS管决定:低电平。

从而,推挽输出可以输出强高低电平,连接数字设备。

推挽多路输出模式

推挽复用类似于推挽,但电平信号的来源不是来自如图所示的CPU的输出数据寄存器,而是来自片上外围设备的模块。

GiO功能是漂浮在空中的总结,顾名思义是漂浮在空中。 上面用绳子拉会上升,下面用绳子拉会下沉。

进行泄漏是指输出端口上连接了NPN晶体管,且仅连接了e。 b. c极是开放的。 可以将电阻连接到3.3V,也可以将电阻连接到5V。 这样,输出1时既可以是5V的电压,也可以是3.3V的电压。 但是,不连接电阻上拉时,无法实现该输出高度。

推挽是指有推有拉,随时确定IO端口的电平,不需要上拉和下拉电阻。

推挽电路是两个参数相同的晶体管或MOSFET,以推挽方式存在于电路中,分别负责正负半周的波形放大。 电路工作时,对称的2根功率开关管一次只导通1个,因此导通损耗小,效率高。 输出既可以使电流通过负载,也可以从负载中引出电流。 推挽型输出级在提高电路负载能力的同时,提高开关速度。

开路漏极输出:的输出端相当于晶体管的集电极,需要上拉电阻才能获得高电平状态,适合电流型驱动,吸收电流的能力相对较高(通常在20ma以内)。

开路泄漏形式的电路具有以下特点。

利用外部电路的驱动能力,减少IC内部的驱动。 IC内部的MOSFET导通时,驱动电流从外部的VCC流向R pull-up,从MOSFET流向GND。 IC内部只需要非常低的栅极驱动电流。 一般来说,开路漏极用于连接不同等级的器件并匹配等级。 开路漏极引脚上不连接外部上拉电阻的话,只能输出低电平,所以需要同时具备输出高电平的功能时,需要连接上拉电阻。 具有通过改变上拉电源的电压,可以改变传输电平的优秀优点。 例如可以通过施加上拉电阻来提供

TTL/CMOS电平输出等。(上拉电阻的阻值决定了逻辑电平转换的沿的速度 。阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。)OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。可以将多个开漏输出的Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。这也是I2C,SMBus等总线判断总线占用状态的原理。补充:什么是“线与”?:
在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.
其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。

由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。
上拉输入/下拉输入/模拟输入:这几个概念很好理解,从字面便能轻易读懂。
复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)
最后总结下使用情况:
在STM32中选用IO模式
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
(2)带上拉输入_IPU——IO内部上拉电阻输入
(3)带下拉输入_IPD—— IO内部下拉电阻输入
(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)
STM32设置实例:
(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用带上拉输入_IPU和浮空输入_IN_FLOATING和开漏输出_OUT_OD;

GPIO寄存器说明

STM32的每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH;2 个 32 位的数据寄存器 IDR 和 ODR;1 个 32 位的置位/复位寄存器BSRR;一个 16 位的复位寄存器 BRR;1 个 32 位的锁存寄存器 LCKR。
CRL 和 CRH 控制着每个 IO 口的模式及输出速率。

参考资料:
《STM32不完全手册》-GPIO介绍
《STM32中文参考手册_V10》-第8章通用和复用功能IO(GPIO和AFIO )
https://blog.csdn.net/qq_38410730/article/details/79858906
http://www.openedv.com/posts/list/21980.htm

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。