时序在数字电路中的作用,就像通信中用到的载波,载波并不起眼,但是很重要。时钟也一样,现象上只是某种频率波峰波谷跳动,一成不变。但是有了它,就像人类的历史有了时间轴一样,什么时候该干什么事才有了可能。程序中发生的事件,能够按照自己的意愿发生。下面就以STM32开发板中最常见的STM32F103系列芯片的时钟为例,介绍一下STM32中的时钟。
时钟作用
说到时钟,你一定会问,这是用来计时的吗?没错,是用来计时的,但这只是它在STM32中的一项功能而已,下面就为你列出了时钟的具体功能。
计时作用(供给某些计数器统计时间);
控制时序(串口数据的传输,只能一位一位的传输);
控制信号(将时钟的上升下降沿作为独特的控制标志)。
STM32时钟模型
STM32内部时钟树
时钟源
时钟源就是产生时钟的电路啦,我们来一起看一下,什么样的电路可以产生时钟。
STM32中的时钟源分为以下五种:
低速内部时钟LSI:频率为40kHz ;
高速内部时钟HSI :频率为8MHz ;
低速外部时钟OSC_32:频率为32.7678kHz ;
高速外部时钟OSC:频率范围4-16MHz ;
时钟输出MCO:为其他设备提供时钟源。
在对时钟频率要求不高的情况下,我们可以选择内部RC振荡器时钟作为单片机工作的时钟源。如果对时钟精度要求较高,我们要选择外部石英晶体振荡器(晶振),作为单片机的时钟源,因为内部时钟用的是模拟电路组成的振荡器,误差较大,在实时性要求比较高的场合(串口通信、IIC通信等)容易造成不可预知的错误。
时钟相对复杂的意义主要是为不同外设提供合适的时钟频率,主要目的是为了节能、低功耗。
高速时钟:用于高速外设I/O、串口通信、SPI等等;
低速时钟:用于低速外设RTC看门狗 ;
倍频器:时钟与外设进行时钟适配。
相关寄存器讲解
PLLSRC
锁相环倍频器时钟源选择
内部高速时钟2分频
外部高速时钟
PLLMUL
锁相环时钟倍频器
将PLLSRC选择的时钟进行倍频,最大不能超过72MHz
PLLXTPRE
锁相环时钟选择
选择外部时钟作为锁相环倍频器时钟源
选择外部时钟2分频后作为锁相环倍频器时钟源
SW
系统时钟选择
选择内部高速时钟作为系统时钟
选择锁相环倍频时钟作为系统时钟
选择外部高速时钟作为系统时钟
AHB
系统时钟分频器
CSS
时钟安全监测单元
当外部时钟意外故障,CSS在短时间内切换到内部高速时钟使单片机工作不中断
RTCCLK
实时时钟时钟源选择
选择锁相环倍频器时钟源128分频作为实时时钟时钟源
选择外部低速时钟作为实时时钟时钟源
选择内部低俗时钟作为实时时钟时钟源
MCO
时钟输出控制
锁相环时钟2分频输出
内部低俗时钟输出
内部高速时钟输出
系统时钟输出
关于APB1、APB2时钟
STM32单片机外设挂接在APB1、APB2两个桥上,但两个桥允许的始终最大频率不相同,APB2最大允许72MHz,APB1最大只允许36MHz,在使用外设时应格外注意时钟,例如串口一挂接在APB2上,其余串口挂接在APB1上,在串口配置时应注意失踪频率的不同造成的波特率配置问题(库函数开发忽略此项内容)。
外部时钟晶体振荡器最好选择8MHz晶振,无论是库函数,还是Keil默认配置启动文件时钟配置均是按照外部晶体振荡器8MHz来进行的配置,系统时钟72MHz,如果采用其他型号的晶体震荡器振还需要自己配置时钟树,对于新手来说可能存在一定的困难。
来源: 无线电杂志