STM32输入输出模式理解
STM32的IO口的八种模式
STM32的IO口的八种模式STM32的IO口可以由软件配置成如下8种模式:1、输入浮空2、输入上拉3、输入下拉4、模拟输入5、开漏输出6、推挽输出7、推挽式复用功能8、开漏复用功能每组IO口包含7个寄存器。
分别是-GPIOx_CRL:端口配置低寄存器-GPIOx_CRH:端口配置高寄存器-GPIOx_IDR:端口输入寄存器-GPIOx_ODR:端口输出寄存器GPIOx_BSRR:端口位设置/清除寄存器GPIOx_BRR:端口位清除寄存器GPIOx_LCKR:端口配置锁存寄存器-注:x表示A-G前四个重要一点,是要记住的!!每个GPIO有16个IO口,每四位配置一个IO口的工作模式,因此需要64位来控制GPIO。
而STM32是32位的,所以需要两个寄存器来来一起控制。
例如CRL和CRH,CRL控制低八位,CRH控制高八位。
GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集,即所谓的I/O端口。
类似51单片机的P0~P3,但与51单片机不同的是,对stm32的GPIO来说,使用前需要设置其工作方式。
STM32的每个IO端口都有7个寄存器来控制其工作方式,而每一个寄存器都需要用32bit来控制。
在STM32中,一组GPIO有16个IO口。
每个引脚用4位来配置,高两位是CNF、低两位是MODE.要先看低两位MODE,先看工作模式是输入还是输出。
再看高两位CNF,看是那种模式。
这样就可以通过四位来配置八种工作模式里的一种了,有点绕,但是很好理解哈。
该寄存器的复位值为0X44444444,复位值其实就是配置端口为浮空输入模式。
从上图还可以得出:STM32的CRL控制着每组IO端口(A~G)的低8位的模式。
每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。
这里我们可以记住几个常用的配置,比如0X0表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二功能,50M速率)。
STM32的8种输入输出方式
如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。
这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。
又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。
因此,推拉式输出级既提高电路的负载能力,又提高开关速度。
开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).开漏形式的电路有以下几个特点:1. 利用外部电路的驱动能力,减少IC内部的驱动。
当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up,MOSFET到GND。
IC内部仅需很下的栅极驱动电流。
2. 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。
比如加上上拉电阻就可以提供TTL/CMOS电平输出等。
(上拉电阻的阻值决定了逻辑电平转换的沿的速度。
阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。
)3. OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。
因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。
所以如果对延时有要求,则建议用下降沿输出。
4. 可以将多个开漏输出的Pin,连接到一条线上。
通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。
这也是I2C,SMBus等总线判断总线占用状态的原理。
补充:什么是“线与”?:在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑.其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。
stm32引脚高低电平电压
stm32引脚高低电平电压STM32是一种广泛应用于嵌入式系统的微控制器系列,它有多个引脚用于输入输出功能。
在STM32中,引脚的高低电平电压是控制和判断信号状态的重要指标。
本文将围绕这一主题展开,介绍STM32引脚高低电平电压的特点和应用。
在STM32中,引脚的高低电平电压可以分为两种情况:输出模式和输入模式。
在输出模式下,STM32的引脚可以向外部设备输出电压信号;在输入模式下,STM32的引脚可以接收来自外部设备的电压信号。
首先我们来了解一下在输出模式下STM32引脚的高低电平电压。
在STM32中,高电平电压通常是指引脚输出的电压接近于VDD(供电电压)的情况,而低电平电压则是指引脚输出的电压接近于GND(地)的情况。
具体来说,对于大多数的STM32系列,高电平电压一般在2.4V至VDD之间,而低电平电压一般在0V至0.4V之间。
需要注意的是,具体的数值可能会因不同的STM32型号而有所差异,因此在使用时需要参考相应的数据手册。
在实际应用中,输出模式下的高低电平电压可以用来控制外部设备的开关状态。
例如,我们可以将STM32的引脚连接到LED灯上,通过控制引脚输出的高低电平电压来控制LED的亮灭。
当引脚输出高电平时,LED灯会点亮;当引脚输出低电平时,LED灯会熄灭。
通过改变引脚输出电压的高低状态,我们可以实现对LED等外部设备的控制。
接下来我们来了解一下在输入模式下STM32引脚的高低电平电压。
在STM32中,输入模式下的高低电平电压是指外部设备给引脚输入的电压信号的高低状态。
一般情况下,STM32将大于0.6VDD的电压认为是高电平,而将小于0.3VDD的电压认为是低电平。
需要注意的是,这里的VDD指的是STM32的供电电压,具体数值需根据实际情况确定。
在实际应用中,输入模式下的高低电平电压可以用来判断外部设备的状态。
例如,我们可以将STM32的引脚连接到按钮开关上,通过读取引脚输入的高低电平电压来判断按钮的按下与否。
STM32的8种GPIO输入输出模式详细分析
STM32的8种GPIO输入输出模式详细分析浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了。
开漏,就等于输出口接了个NPN三极管,并且只接了e,b。
c 极是开路的,你可以接一个电阻到 3.3V,也可以接一个电阻到5V,这样,在输出1的时候,就可以是5V电压,也可以是3.3V 电压了。
但是不接电阻上拉的时候,这个输出高就不能实现了。
推挽,就是有推有拉,任何时候IO口的电平都是确定的,不需要外接上拉或者下拉电阻。
(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_Mode_AF_PP 复用推挽输出推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
推拉式输出级既提高电路的负载能力,又提高开关速度。
开漏输出:输出端相当于三极管的集电极。
要得到高电平状态,需要上拉电阻才行。
适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。
开漏形式的电路有以下几个特点:1、利用外部电路的驱动能力,减少IC内部的驱动。
当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。
IC内部仅需很下的栅极驱动电流。
2、一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。
STM32的SPI中的NSS详细解释
stm32 SPI NSS的解释这个NSS到底是怎么作用呢?回答是片选。
主设备和从设备在进行SPI通信的时候,从设备都有个CS片选信号,低电平有效,我们通常都要用这个NSS连到从设备的CS上。
但是这里只是大体让大家大体明白怎么回事,东西很多,关于这个NSS,还有很多东西呢,下面让我娓娓道来。
先看输入输出模式.对于每个SPI的NSS可以输入,也可以输出。
所谓输入,就是NSS的电平信号给自己,所谓输出,就是将NSS的电平信号发送出去,给从机。
配置为输出,还是不输出,我们可以通过SPI_CR2寄存器的SSOE位。
当SSOE为1时,并且SPI处于主模式控制时,NSS 就输出低电平,也就是拉低,因此当其他SPI设备的NSS引脚与它相连,必然接收到低电平,则片选成功,都成为从设备了。
NSS的输出就介绍到这里下面介绍NSS的输入。
我们都知道NSS输入又分为硬件输入和软件控制输入两种模式,那么就从这两种模式入手,来揭开它的面纱吧。
先说软件模式吧。
1 对于SPI主机来说,需要设置SPI_CR1寄存器的SSM为1和SSI位为1,SSM为1是为了使能软件管理。
,NSS有内部和外部引脚。
这时候,外部引脚留作他用(可以用来作为GPIO驱动从设备的片选信号)。
内部NSS引脚电平则通过SPI_CRL寄存器的SSI位来驱动。
SSI位为1是为了使NSS内电平为高电平。
这时候,不免产生疑问,为什么主设备的内部NSS 电平要为1呢?STM32手册上说,要保持MSTR和SPE位为1,也就是说要保持主机模式,只有NSS接到高电平信号时,这两位才能保持置1.也就是说对于STM32的SPI,要保持为主机状态,内部输入的NSS电平必须为高。
当然这里在硬件模式下也是如此。
2 对于SPI 从机来说主机自己的内部NSS高电平解决了,那么SPI从机的NSS片选低电平也得解决啊。
如果从机选择STM32的一个SPI,譬如主机选为SPI1,从机选为SPI2,则要按照以下操作手册说,NSS引脚在完成字节传输之前必须连接到一个低电平信号。
STM32单片机的八种IO口模式解析
STM32单片机的八种IO口模式解析
STM32八种IO口模式区别
(1)GPIO_Mode_AIN模拟输入
(2)GPIO_Mode_IN_FLOATING浮空输入
(3)GPIO_Mode_IPD下拉输入
(4)GPIO_Mode_IPU上拉输入
(5)GPIO_Mode_Out_OD开漏输出
(6)GPIO_Mode_Out_PP推挽输出
(7)GPIO_Mode_AF_OD复用开漏输出
(8)GPIO_Mode_AF_PP复用推挽输出
以下是详细讲解
(1)GPIO_Mode_AIN模拟输入
即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)
(2)GPIO_Mode_IN_FLOATING浮空输入
浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的
(3)GPIO_Mode_IPD下拉输入GPIO_Mode_IPU上拉输入
一般来讲,上拉电阻为1K-10K,电阻越小,驱动能力越强
电阻的作用:防止输入端悬空,减少外部电流对芯片的干扰,限流;,增加高电平输出时的驱动能力。
上拉输入:在默认状态下(GPIO引脚无输入)为高电平
下拉输入:在默认状态下(GPIO引脚无输入)为低电平
(4)GPIO_Mode_Out_OD开漏输出
开漏输出:输出端相当于三极管的集电极。
要得到高电平状态需要上拉电阻才行。
适合于做电流型的驱动,。
STM32GPIO输入输出模式的理解
STM32GPIO输⼊输出模式的理解
四种输出模式:
1、推挽输出
所谓推挽输出模式是根据两个MOS管的⼯作⽅式命名的。
功能:推挽输出可输出⾼电平,可输出低电平。
应⽤:⼀般应⽤在输出电平为VSS和VDD,⽽且需要⾼速切换开关状态的场合。
在STM32的应⽤中,除必须使⽤开漏模式的场合,我们都使⽤推挽输出模式。
2、推挽复⽤模式
应⽤于内容来⾃STM32⽚上外设。
即GPIO被⽤作复⽤功能时使⽤。
3、开漏输出
功能:只能输出低电平,如需输出⾼⾼电平,需外接电路(单⽚机输出3.3V时,外接电路为3,3V时,输出3.3V.外接5V时,可输出5V)。
应⽤:⼀般应⽤在输出电平在IIC、SMBUS通信等需要"线与"功能的总线中。
除此之外,还⽤在电平不匹配的场合,如需输出5伏的⾼电平,就可以外部接⼀上拉电阻,上拉电源为5伏。
并且把GPIO设置为开漏模式,当输出⾼阻态时,由上拉电阻和电源向外输出5伏的电平。
4、开漏复⽤
四种输⼊模式:
1、上拉输⼊
在没有输⼊信号的时候,输⼊端默认输⼊⾼电平(由上拉决定)。
2、下拉输⼊
如上拉输⼊
3、浮空输⼊
浮空输⼊的电平是不确定的,完全由外部的输⼊决定。
应⽤:⼀般⽤于接按键。
4、模拟输⼊
⽤于ADC采集。
推荐-第4章 stm32单片机通用输入输出GPIO 精品
为了使不同器件封装的外设IO功能的数量达到最优,可以把一些复用 功能重新映射到其它一些引脚上,这可以通过软件配置相应的寄存器 来完成。
USART3_TX 的默认引出脚是 PB10, USART3_RX 的默认引出脚是 PB11;重映射 后,USART3_TX 的引出脚为 PD8,变更 USART3_RX 的引出脚为PD9
STM32 引脚
PC口 16脚 PD口 3脚
PA口 16脚
PB口 16脚
STM32F103RBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 51个I/O管脚: PA口 16脚+ PB口16脚+ PC口16脚+ PD口3脚。
4.1 STM32F10x的输入/输出基本结构
4.2 GPIO相关功能寄存器
STM32单片机 最多有7个16位的并行 I/O端口: PA、PB、PC、PD、PE、PF、PG。
STM32F103Cx、103Rx单片机 只有4个16位的 并行 I/O端口:PA、PB、PC、PD。
STM32 引脚
PC口 3脚 PD口 2脚
PA口 16脚
PB口 16脚
STM32F103CBT6 包含4个端口: PA口 、PB口、PC口、PD口,共有 37个I/O管脚: PA口 16脚+ PB口16脚+ PC口3脚+ PD口2脚。
STM32F10x处理器的每个GPIO端口都对应有: 2个32位配置寄存器(GPIOx-CRL,GPIOx-CRH) 2个32位数据寄存器(GPIOx-IDR,GPIOx-ODR) 1个32位置位/复位寄存器(GPIOx-BSRR) 1个16位复位寄存器(GPIOx-BRR) 1个32位锁定寄存器(GPIOx-LCKR)
STM32 GPIO速度,模式等理解
STM32 GPIO速度,模式等理解一、</>GPIO模式配置1、输入/输出模式(参考stm32手册)2、GPIO输出模式下,几种速度的区别:(1). GPIO 引脚速度:GPIO_Speed_2MHz (10MHz, 50MHz) ;又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
)可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。
(如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。
失真因素?)如果信号频率为10MHz,而你配置了2MHz的带宽,则10MHz的方波很可能就变成了正弦波。
就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行,如果超过设计时速就会颠簸,甚至翻车。
关键是:GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。
带宽速度高的驱动器耗电大、噪声也大,带宽低的驱动器耗电小、噪声也小。
使用合适的驱动器可以降低功耗和噪声比如:高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。
当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。
比如:</>①</>USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小。
</>②</>I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度。
</>③</>SPI接口,若使用18M或9M波特率,需要选用50M的GPIO的引脚速度。
(2). GPIO的翻转速度指:输入/输出寄存器的0 ,1 值反映到外部引脚(APB2上)高低电平的速度.手册上指出GPIO最大翻转速度可达18MHz。
STM32系列单片机原理及应用-C语言案例教程 第3章 通用输入输出的端口(GIPO)
高低由外部电路决定。
第3章 通用输入/输出(GIPO)
3.2 STM32的GPIO 工作原理
3.2.2 GPIO 口输入/输出模式
STM32的I/O有以下八种配置方式,其中1~4为输入类型,5~6为输出类型, 7~8为复用输出。
第3章 通用输入输出的端口
第3章 通用输入Βιβλιοθήκη 输出的端口3.1 GPIO 概述
GPIO是微控制器数字I/O(输入/输出)的基本模块,借助 GPIO,STM32可以对外围设备进行(如按键等)最简单、最直观 的监控。还可用于串行和并行通信、存储器扩展等。
STM32的GPIO最多有7组I/O端口:A、B、C、D、E、F、G, 每组端口16个外部引脚。每组端口都具有通用I/O、单独位设置 /位清除、I/O 中断/唤醒、复用(AF)、软件重新映射、I/O复 用与GPIO锁定机制功能。在运用这些功能时,会涉及寄存器的 操作。
高电平。当输出为“1”时,VO口的状态上拉为高电平,I/O 口由外部电路决定。 ➢ 推挽输出_OUT_PP:I/O输出0接GND, I/O输出“1”接VCC,读输入值是未知的。 ➢ 复用功能的推挽输出_AF_PP:片内外设功能(I2C的SCL、SDA)。 ➢ 复用功能的开漏输出_AF_OD:片内外设功能(TX1、MOSI、MISO、SCK、SS)。
第3章 通用输入/输出(GIPO)
3.2 STM32的GPIO 工作原理
使用GPIO主要是对相应的寄存器进行操作,每个GPIO端口具有 7组寄存器: ➢ 2 个 32 位配置寄存器(GPIOx_CRL,GPIOx_CRH ); ➢ 2 个 32 位数据寄存器(GPIOx_IDR,GPIOx_ODR ); ➢ 1个32位置位/复位寄存器(GPIOx_BSRR ); ➢ 1个16位复位寄存器(GPIOx_BRR ); ➢ 1个32位锁定寄存器(GPIOx_LCKR)
stm32 计数器模式——输出比较模式强置输出模式PWM输入模式输入捕获模式
输入捕获模式库函数例程位置:STM32F10x_StdPeriph_Lib_V3.3.0\Project\STM32F10x_StdPeriph_Examples\TIM\InputCaptur e在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。
当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。
在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。
PWM输入模式库函数例程位置:STM32F10x_StdPeriph_Lib_V3.3.0\Project\STM32F10x_StdPeriph_Examples\TIM\PWM_Input该模式是输入捕获模式的一个特例例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值)●选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。
●选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿有效)。
●选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。
●选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。
●选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。
●配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。
●使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。
由于只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。
STM32通用输入输出之GPIO(STM32神舟I号开发板)
表 3:端口 C GPIO 管脚描述 描述
通用输入/输出 PC1 到 PC12 通用输入/输出 PC13 到 PC15 的 I/O 口功能有限制(同一时间内只有 一个 I/O 口可以作为输出,速度必须限制在 2MHZ 内,而且这些 I/O
口不能当作电流源(如驱动 LED))
管脚名称 PD[1:0]
6.1 通用输入/输出(GPIO) ............................................................................................1 6.1.1 管脚特性...........................................................................................................1 6.1.2 GPIO应用领域 .................................................................................................1 6.1.3 管脚分配...........................................................................................................1 6.1.4 GPIO管脚内部硬件电路原理剖析..................................................................2 6.1.5 STM32 的GPIO管脚深入分析 ........................................................................5 6.1.6 在STM32 中如何配置片内外设使用的IO端口............................................10 6.1.7 例程 01 单个LED点灯闪烁程序 ..................................................................11 6.1.8 例程 02 LED双灯闪烁实验 ........................................................................14 6.1.9 例程 03 LED三个灯同时亮同时灭 ............................................................16 6.1.10 例程 04 LED流水灯程序 ...............................................................................17
stm32GPIO的输入输出模式
stm32GPIO的输⼊输出模式stm32的GPIO结构图1 四种输⼊模式1.1 GPIO_Mode_AIN 模拟输⼊模拟输⼊模式(GPIO_Mode_AIN )则关闭了施密特触发器,不接上、下拉电阻,经由另⼀线路把电压信号传送到⽚上外设模块。
如传送⾄给ADC模块,由ADC采集电压信号。
所以使⽤ADC外设的时候,必须设置为模拟输⼊模式。
1.2 GPIO_Mode_IN_FLOATING 浮空输⼊浮空输⼊模式(GPIO_Mode_IN_FLOATING)在芯⽚内部既没有接上拉,也没有接下拉电阻,经由触发器输⼊。
配置成这个模式直接⽤电压表测量其引脚电压为1点⼏伏,这是个不确定值。
由于其输⼊阻抗较⼤,⼀般把这种模式⽤于标准的通讯协议如I2C、USART的接收端。
1.3 GPIO_Mode_IPD 下拉输⼊结构图的上半部分为输⼊模式结构。
接下来就遇到了两个开关和电阻,与VDD相连的为上拉电阻,与VSS相连的为下拉电阻。
再连接到施密特触发器就把电压信号转化为0、1的数字信号存储在输⼊数据寄存器(IDR)。
我们可以通过设置配置寄存器(CRL、CRH),控制这两个开关,于是就可以得到GPIO的上拉输⼊(GPIO_Mode_IPU ) 和下拉输⼊模式(GPIO_Mode_IPD )了。
1.4 GPIO_Mode_IPU 上拉输⼊2 四种输出模式2.1 普通推挽输出(GPIO_Mode_Out_PP):使⽤场合:⼀般⽤在0V和3.3V的场合。
线路经过两个P_MOS 和N_MOS 管,负责上拉和下拉电流。
使⽤⽅法:直接使⽤输出电平:推挽输出的低电平是0V,⾼电平是3.3V。
2.2、普通开漏输出(GPIO_Mode_Out_OD):使⽤场合:⼀般⽤在电平不匹配的场合,如需要输出5V的⾼电平。
使⽤⽅法:就需要再外部接⼀个上拉电阻,电源为5V,把GPIO设置为开漏模式,当输出⾼组态时,由上拉电阻和电源向外输出5V的电压。
单片机常见输入输出模式
单片机常见输入输出模式单片机(Microcontroller,简称MCU)是一种集成电路,集中了处理器、内存、输入输出接口和定时器等功能模块,广泛应用于各种电子设备中。
输入输出(Input/Output,简称I/O)是单片机与外部环境进行信息交互的重要方式。
本文将介绍单片机常见的几种输入输出模式。
1. 并行输入输出模式并行输入输出模式是最常见的单片机与外设进行数据交互的方式。
在并行输入输出模式下,单片机与外设之间通过多个数据线同时传输多位数据。
这种模式的好处是传输速度快,但需要较多的引脚资源,适用于对传输速度要求较高的应用。
2. 串行输入输出模式串行输入输出模式是一种将数据逐位进行传输的方式。
在串行输入输出模式下,单片机与外设之间通过单个数据线逐位传输数据。
这种模式的好处是占用较少的引脚资源,适用于空间有限且对传输速度要求不高的应用。
3. 通用异步收发器模式通用异步收发器(UART)是一种单片机常用的输入输出模式。
UART内部有一个缓冲区,可以接收和发送数据。
在使用UART进行数据传输时,单片机通过配置相关寄存器的参数来设置波特率、数据位数、停止位等通信参数,然后可以通过读写缓冲区来进行数据的收发。
4. 并行输入捕获/输出比较模式并行输入捕获(Input Capture)和输出比较(Output Compare)是单片机中常用的定时器功能模式。
在这种模式下,单片机可以通过定时器模块捕获外部信号的边沿触发事件,并记录下触发事件的时间戳。
同时,单片机还可以通过定时器模块产生输出信号,并与外部信号进行比较。
这种模式适用于需要对时间进行精确控制的应用,如测量脉冲宽度、频率测量等。
5. 脉冲宽度调制模式脉冲宽度调制(Pulse Width Modulation,简称PWM)是一种将数字信号转化为模拟信号的技术。
在PWM模式下,单片机通过定时器模块产生周期固定的脉冲信号,并通过改变脉冲的占空比来模拟出不同的电平信号。
stm32的IO模式具体意义
stm32的IO模式具体意义
Ⅰ、写在前面
在开发STM32的时候,都需要对IO的模式进行配置(GPIO_InitStructure. GPIO_Mode = xxx)。
但是,你们都知道各种模式的具体意义吗?
有的人问:IO口输出可以上拉吗?开漏输出是干什么用的?
其实这些问题并不难,只要你了解到每一种模式的真正意思,相信这些问题都不会难道你。
本文的内容比较基础,也比较实用,希望对你有所帮助。
关于本文的详细内容请看下面章节
Ⅱ、模式说明
STM32芯片的IO有8中模式:
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_Out_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出
四种输入模式+ 四种输出模式
上面IO结构图来自STM32F1参考手册,从图中可以看得出来IO口大致的结构,也能反映出各种模式。
代码中常见的一些配置:。
最全的STM32八种IO口模式讲解
最全的STM32八种IO口模式讲解STM32是一种基于ARM Cortex-M处理器的微控制器系列,具有强大的性能和广泛的应用领域。
而IO口是STM32微控制器中常见的功能之一,它允许我们与外部设备进行通信和数据交换。
在STM32中,IO口有八种不同的模式,本文将逐一进行讲解。
1. 输入浮空模式(Floating Input)输入浮空模式是IO口的默认模式。
在这种模式下,IO口既不输出也不输入电平信号,它的电平状态由外部电路决定。
这种模式非常适用于连接外部传感器或其他输入设备。
2. 模拟输入模式(Analog Input)模拟输入模式是用于连接模拟传感器的模式。
在这种模式下,IO口被配置为模拟输入引脚,可以读取来自传感器的模拟电压值。
3. 输出推挽模式(Push-pull Output)输出推挽模式是最常用的IO口模式之一、在这种模式下,IO口既能输出高电平,也能输出低电平。
它能够驱动较大负载,并且在输出状态下具有较低的电平谐波失真。
推挽输出模式常用于控制LED灯、继电器和其他外部设备。
4. 输出开漏模式(Open-drain Output)输出开漏模式也被称为开漏输出模式。
在这种模式下,IO口只能输出低电平,而不能输出高电平。
当IO口输出低电平时,它会与外部上拉电阻连接,使得整个电路可以实现低电平输出。
开漏输出模式常用于I2C总线和其他需要共享信号线的应用。
5. 复用推挽模式(Push-pull Alternate Function)复用推挽模式是IO口的特殊模式之一、在这种模式下,IO口既可以用于通用IO功能,也可以用作一些外设的引脚。
复用推挽模式常用于USART、SPI和I2C等串行通信接口。
6. 复用开漏模式(Open-drain Alternate Function)复用开漏模式也是IO口的特殊模式之一、在这种模式下,IO口可以用作一些外设的引脚,并且只能输出低电平。
复用开漏模式常用于I2C总线和其他需要共享信号线的应用。
STM32--输入捕获和输出比较
STM32--输⼊捕获和输出⽐较概述⾸先,明确⼀点对⽐AD的构造,stm32有3个AD, 每个AD有很多通道(⼀个外设可以有多个中断通道,但是每个中断通道只有⼀个外设),使⽤哪个通道就配置成哪个通道(只设置⽤⼀个就可以),这⾥定时器也如此,有很多定时器TIMx,每个定时器有很多CHx(通道),可以配置为输⼊捕捉-------测量频率⽤,也可以配置为输出⽐较--------输出PWM使⽤输⼊捕获输⼊捕捉:可以⽤来捕获外部事件,并为其赋予时间标记以说明此事件的发⽣时刻。
外部事件发⽣的触发信号由单⽚机中对应的引脚输⼊(对应的引脚设置成输⼊)(具体可以参考单⽚机的datasheet),也可以通过模拟⽐较器单元来实现。
时间标记可⽤来计算频率,占空⽐及信号的其他特征,以及为事件创建⽇志,主要是⽤来测量外部信号的频率。
1.1、朋友,可以解释⼀下输⼊捕获的⼯作原理不?很简单,当你设置的捕获开始的时候,cpu会将计数寄存器的值复制到捕获⽐较寄存器中并开始计数,当再次捕捉到电平变化时,这是计数寄存器中的值减去刚才复制的值就是这段电平的持续时间,你可以设置上升沿捕获、下降沿捕获、或者上升沿下降沿都捕获。
它没多⼤⽤处,最常⽤来测频率。
1.2、计数寄存器的初值,是⾃⼰写进去的吗?是的,不过默认不要写⼊(即计数寄存器为零)1.3、我如果捕获上升沿,两个值相减,代表的时两个上升沿中间那段电平的时间。
对不?是的1.4、timer1有五个通道(对应五个IO引脚),在同⼀时刻,只能捕获⼀个引脚的值,对不?那是肯定的,通道很像ADC通道,是可以进⾏切换的。
输出⽐较输出⽐较:定时器中的计数寄存器在初始化完后会⾃动的计数,从bottom计数到top,并且有不同的⼯作模式。
另外,还有个⽐较寄存器。
⼀旦计数寄存器在从bottom到top 计数过程中与⽐较寄存器匹配(在计数的过程中进⾏⽐较,不单指bottom或top)则会产⽣⽐较中断(⽐较中断使能的情况下),这⾥的匹配指的是计数寄存器的值与⽐较寄存器的值相等。
stm32输入配置有上拉,下拉,浮空三种模式
stm32输 入 配 置 有 上 拉 , 下 拉 , 浮 空 三 种 模 式
stm32输入配置有上拉,下拉,浮空三种模式
配置输入的时候有你说的三种模式外还有模拟输入。上拉输入模式:区别在于没有输入信号的时候默认输入高电平(因为有弱上拉)。下拉 输入模式:区别在于没有输入信号的时候默认输入(因为有弱下拉)。对于浮空输入模式顾名思义也就是输入什么信号才是什么信号,对于 浮空
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32输入输出模式理解最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多:(1)GPIO_Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD 开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8)GPIO_Mode_AF_PP 复用推挽输出对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。
因此,在这里做一个总结:推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。
高低电平由IC的电源低定。
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
推拉式输出级既提高电路的负载能力,又提高开关速度。
详细理解:如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。
对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。
当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。
这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。
又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。
因此,推拉式输出级既提高电路的负载能力,又提高开关速度。
开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 开漏形式的电路有以下几个特点:1.利用外部电路的驱动能力,减少IC内部的驱动。
当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。
IC内部仅需很下的栅极驱动电流。
2.一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。
比如加上上拉电阻就可以提供TTL/CMOS 电平输出等。
(上拉电阻的阻值决定了逻辑电平转换的沿的速度。
阻值越大,速度越低功耗越小,所以负载电阻的选择要兼顾功耗和速度。
)3.OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。
因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。
所以如果对延时有要求,则建议用下降沿输出。
4.可以将多个开漏输出的Pin,连接到一条线上。
通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。
这也是I2C,SMBus等总线判断总线占用状态的原理。
补充:什么是“线与”?:在一个结点(线)上,连接一个上拉电阻到电源VCC或VDD和n个NPN或NMOS晶体管的集电极C或漏极D,这些晶体管的发射极E或源极S都接到地线上,只要有一个晶体管饱和,这个结点(线)就被拉到地线电平上.因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),晶体管就会饱和,所以这些基极或栅极对这个结点(线)的关系是或非NOR逻辑.如果这个结点后面加一个反相器,就是或OR逻辑.其实可以简单的理解为:在所有引脚连在一起时,外接一上拉电阻,如果有一个引脚输出为逻辑0,相当于接地,与之并联的回路“相当于被一根导线短路”,所以外电路逻辑电平便为0,只有都为高电平时,与的结果才为逻辑1。
关于推挽输出和开漏输出,最后用一幅最简单的图形来概括:该图中左边的便是推挽输出模式,其中比较器输出高电平时下面的PNP三极管截止,而上面NPN三极管导通,输出电平VS+;当比较器输出低电平时则恰恰相反,PNP三极管导通,输出和地相连,为低电平。
右边的则可以理解为开漏输出形式,需要接上拉。
浮空输入:对于浮空输入,一直没找到很权威的解释,只好从以下图中去理解了由于浮空输入一般多用于外部按键输入,结合图上的输入部分电路,我理解为浮空输入状态下,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;通常有5种方式使用某个引脚功能,它们的配置方式如下:1)作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。
2)作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。
3)作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。
4)作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。
5)作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。
注意如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。
比如要使用STM32F103VBT6的47、48脚的USART3功能,则需要配置47脚为复用推挽输出或复用开漏输出,配置48脚为某种输入模式,同时使能USART3并保持I2C2的非使能状态。
如果要使用STM32F103VBT6的47脚作为TIM2_CH3,则需要对TIM2进行重映射,然后再按复用功能的方式配置对应引脚。
======================================================================================= 一、GPIO模式配置1、输入/输出模式(参考stm32手册)2、GPIO输出模式下,几种速度的区别:(1). GPIO 引脚速度: GPIO_Speed_2MHz (10MHz, 50MHz) ;又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。
)可理解为: 输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。
(如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。
失真因素?)如果信号频率为10MHz,而你配置了2MHz的带宽,则10MHz的方波很可能就变成了正弦波。
就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行,如果超过设计时速就会颠簸,甚至翻车。
关键是: GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。
带宽速度高的驱动器耗电大、噪声也大,带宽低的驱动器耗电小、噪声也小。
使用合适的驱动器可以降低功耗和噪声比如:高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。
当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。
关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。
比如:①USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小。
②I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度。
③SPI接口,若使用18M或9M波特率,需要选用50M的GPIO的引脚速度。
(2). GPIO的翻转速度指:输入/输出寄存器的0 ,1 值反映到外部引脚(APB2上)高低电平的速度.手册上指出GPIO最大翻转速度可达18MHz。
@通过简单的程序测试,用示波器观察到的翻转时间: 是综合的时间,包括取指令的时间、指令执行的时间、指令执行后信号传递到寄存器的时间(这其中可能经过很多环节,比如AHB、APB、总线仲裁等),最后才是信号从寄存器传输到引脚所经历的时间。
如:有上拉电阻,其阻值越大,RC延时越大,即逻辑电平转换的速度越慢,功耗越大。
(3).GPIO 输出速度:与程序有关,(程序中写的多久输出一个信号)。
2、GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。
3、在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。
4、所有端口都有外部中断能力。
为了使用外部中断线,端口必须配置成输入模式。
5、GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。