STM32时钟与GPIO工作模式
一、GPIO工作模式
GPIO端口的每个位(引脚)可以由软件分别配置成8种模式
模式名称 | 性质 | 特征 |
---|---|---|
浮空输入 | 数字输入 | 可读取引脚电平,若引脚悬空,则电平不确定 |
上拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平 |
下拉输入 | 数字输入 | 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平 |
模拟输入 | 模拟输入 | GPIO无效,引脚直接接入内部ADC |
开漏输出 | 数字输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS |
推挽输出 | 数字输出 | 可输出引脚电平,高电平为VDD,低电平接VSS |
复用开漏输出 | 数字输出 | 由片上外设控制,高电平为高阻态,低电平接VSS |
复用推挽输出 | 数字输出 | 由片上外设控制,高电平为VDD,低电平接VSS |
输出模式下可以控制端口输出高电平低电平,用于驱动LED,蜂鸣器等,如果是大功率器件(比如电机),还需要加上驱动器(小电流控制大电流)。
输入模式下可以读取端口的高低电平,用于读取外接按键,外接模拟信号的输入,ADC电压采集,模拟通信协议接受数据等。
1. 输出模式
推挽输出模式:
- 向设置/清除寄存器对应的设置位或清除位写1
- 或者输出寄存器对应位直接写1或0
- 工作时两个MOS管交替工作来驱动负载。输出1时,上部晶体管导通将电流推向负载;输出0时,下部晶体管导通将电流拉回地线。
(P-MOS管0导通,N-MOS管1导通。 以输出1为例,经过输出控制,电平反向变成0,P-MOS导通,VDD与IO引脚相连,输出1)
- 可以从输入寄存器读取引脚状态
开漏输出模式:
P-MOS永远关闭。 输出寄存器上的 0 激活N-MOS,使得输出0。要想输出1,需要在外部接入上拉电阻。
2. 输入模式
-
2个保护二极管的作用是保护我们的芯片不会由于电压过高或过低而烧毁。VDD是接电源(3.3V),VSS接地(0V)。如果IO引脚的输入电压高于VDD的值到一定程度,上方保护二极管导通,则引脚电压被拉低到VDD。如果IO引脚的输入电压(负电压)低于VSS到一定程度,则下方保护二极管导通,电压被拉高到VSS。
-
2个开关控制引脚在没有输入的时候是上拉,下拉还是浮空。当上面的开关闭合的时候,输入被拉高到高电平。当下面的开关闭合的时候,输入被拉低到低电平。如果两个都不闭合,输入就是悬空状态。两个同时闭合,就是费电了,不会这么做的。
-
施密特(肖特基)触发器是包含正反馈的比较器电路。可以对信号进行波形整形。
从施密特触发器出来的数据,进入到输入数据寄存器中,我们就可以从中读取数据了。
对于模拟输入,禁止施密特触发输入,弱上拉和下拉电阻被禁止。
二、时钟
1. 时钟树
在STM32中有3种不同的时钟源用来驱动系统时钟(SYSCLK):
(1)HSI振荡器时钟(High Speed Internal oscillator,高速内部时钟)
(2)HSE振荡器时钟(High Speed External(Oscillator / Clock),高速外部时钟)
(3)PLL时钟(Phase Locked Loop 锁相环/倍频器)
还有2种2级时钟:
(4)LSI时钟(Low Speed Internal,低速内部时钟)
(5)LSE时钟(Low Speed External oscillator,低速外部时钟)
之所以提供这么多的时钟,是为了节能,使高速设备接高速时钟,低速设备接低速时钟,可以最大程度的达到节能效果。
2. 时钟介绍
2.1 HSE时钟
高速外部时钟是由外部时钟源提供,目前几乎所有的STM32单片机的设计都是在外部接一个8MHz的晶振,经过PLL倍频(9倍频)后得到一个72MHz的系统时钟。我们系统默认就是这个时钟。
2.2 HSI时钟
HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。
可以在单片机刚开始启动时候作为系统时钟,等待外部时钟开启稳定后选用高速外部时钟作为系统时钟。
2.3 PLL时钟
内部PLL用来倍频HSI RC的输出时钟或HSE晶体输出时钟。PLL的设置必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。
PLL时钟一般都是对外部的8MHz的时钟信号经过9倍频后,得到72MHz的时钟频率,这是STM32F1系列允许的最高时钟频率。
2.4 LSE时钟
LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。
LSE是不能驱动系统时钟的。
2.5 LSI时钟
LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。LSI时钟频率大约40kHz(在30kHz和60kHz之间)。
LSI也是不能驱动系统时钟的。