目录
为何每次使用STM32相应的功能,都要是使能一下相应的时钟?
GPIO基础知识
为何每次使用STM32相应的功能,都要是使能一下相应的时钟?
在学51单片机的时候,基本上接触不到I/O方向和外设时钟的概念,I/O想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。这样在初学时的确方便了很多,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。
可是随着电子产品集成度越来越高,功耗和发热越来越严重,芯片厂商非常无奈也在开始想办法避免这个问题,而最直接的思路当然就是用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。如果不用的就完全关闭,尽可能降低芯片功耗,所以就出现了这么多的时钟和IO配置。说白了,时钟的功能就好像是一个小开关,你要用什么寄存器就先对应的打开开关,即:使能对应的时钟。
在时序逻辑电路中,时钟信号是驱动模块工作的动力来源。时钟信号是时序逻辑的基础,用于决定逻辑单元中的状态何时更新,也就说时钟信号的有无决定了相应的模块是否正常工作,时钟信号的频率周期特性决定了模块工作的周期。
开漏输出与推挽输出的不同之处
推挽输出
推挽电路是两个参数相同的三极管或 MOSFET, 以推挽方式存在于电路中, 各负责正负半周的波形放大任务, 电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
举例说明:
如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经 VT3 拉出。这样一来,输出高低电平时,VT3 一路和 VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使 RC 常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。
推挽的缺点
一条总线上只能有一个push-pull输出的器件。
推挽的优点
电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。
开漏输出
开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma 以内).
开漏的弊端
开漏Pin不连接外部的上拉电阻,则只能输出低电平。当输出电平为低时,N沟道三极管是导通的,这样在Vcc'和GND之间有一个持续的电流流过上拉电阻R和三极管Q1。这会影响整个系统的功耗。采用较大值的上拉电阻可以减小电流。但是,但是大的阻值会使输出信号的上升时间变慢。即上拉电阻R pull-up的阻值 决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小。反之亦然。
开漏的优点
很好的一个优点是通过改变供上拉电源的电压,便可以改变传输电平。而且利用外部电路的驱动能力,减少 IC 内部的驱动。当 IC 内部 MOSFET 导通时,驱动电流是从外部的VCC 流经 R pull-up ,MOSFET 到 GND。IC 内部仅需很下的栅极驱动电流。
GPIO的8中输入输出模式
144个引脚中只有112个引脚有输入输出功能,但是他们虽然均为IO引脚,他们所能识别的电压最大值,即电压容限却不同,一般IO引脚承受/所能识别的最大电压为3.3V,特殊的IO引脚承受。所能识别的最大电压为5V,区分如下:
带有FT标识的为能最大承受/识别电压为5V的IO引脚。
GPIO模式的英文名称 |
8中IO模式 |
GPIO_Mode_AIN |
模拟输入 |
GPIO_Mode_IN_FLOATING |
浮空输入 |
GPIO_Mode_IPD |
下拉输入 |
GPIO_Mode_IPU |
上拉输入 |
GPIO_Mode_Out_OD |
开漏输出 |
GPIO_Mode_Out_PP |
推挽输出 |
GPIO_Mode_AF_OD |
复用开漏输出 |
GPIO_Mode_AF_PP |
复用推挽输出 |
GPIO的基本构造以及模式工作的基本原理
浮空输入的基本原理
我们看到这里的浮空输入无任何上拉下拉电阻,在浮空时输入信号仅仅取决于外部的输入信号,在未接收确定信号时,我们不清楚输入电压是高电平还是低电平。此外,TTL施密特触发器是用来将输入模拟量转化为精准的高低电平用的,原理如下图所示:
输入上拉模式
我们看到输入上拉与输入浮空最大的区别在于,输入上拉有了上拉电阻,这样在引脚不用时,引脚拥有确定的状态,这样可以避免外界向引脚传入不可预测的电磁干扰所导致的误操作。
输入下拉模式
工作原理与输入下拉模式一样,只不过在引脚未使用时,引脚电平处于低电平状态。
模拟输入
模拟输入就是我们所说的“模拟量数字量转换(ADC)”,系统读取模拟输入量不是为了将其转换为高低电平,而是为了根据参考电压将模拟量转化为数字的形式。
开漏输出
注意:这里的输出控制电路只向N-MOS管传递信号,因为开漏输出只有两个状态“低电平/高阻态”。
当内部电路向IO口写入一个高电平时,以N载流子为注主的沟道形成,最终N-MOS管导通,IO口钳位至Vss低电平状态,但当IO口写入一个低电平时,电压不足以形成可以导通的N沟道,因此N-MOS管不导通,IO口的电平状态取决于IO口外接电压的水平。
开漏复用输出模式
复用功能说白了就是这个管教除了可以作为IO使用,也可以作为其他功能使用,比如串口功能……等。其原理和开漏输出模式一样,不同点在于向IO口传递信号的模块不同了,不再是IO操作模块了,可能是串口操作模块……等等。
复用功能是指用户共享公用信道的一种机制,单个信号传递通道不止一种用处。
推挽输出模式
与开漏输出最大的不同在于:输出控制电路将信号传递给P-MOS和N-MOS两个场效应管。我们应该了解过功率放大器(数字电子技术基础中有讲解),咱们以三极管的弊端为例讲述MOS管构成推挽电路的优点:
我们看到如果不将正半部分与负半部分分开,那么加在晶体管两端的直流电压调整范围就会很小,而且如果不分开,我们必须保证直流量在合理范围内,这样才不会产生信号失真,但是直流量大了会导致晶体管消耗能量过多,因此我们采用N-MOS与P-MOS构成推挽输出电路用来分离正负半轴信号以控制流经管子的等效直流量尽可能的小。
推挽复用输出模式
推挽复用输出模式与前面的推挽输出模式差不多,区别就在于内部向引脚传递的信号不同。
顺便提一下:顺便提一下:多路复用选择器(multiplexer或mux)能从多个模拟或数字输入信号中选择某个信号并将其转发,将不同的被选信号输出到同一个输出线路中。说白了就是当你输入多个信号时,只有一个有效信号会被传输至输出端,其余会被屏蔽掉。