STC32G12K128单片机的时钟包括系统时钟、USB时钟、PWM时钟(SPI时钟)、RTC时钟。其中,系统时钟是核心工作时钟,是必不可少的,其为单片机的CPU和除USB时钟、PWM时钟(SPI时钟)、RTC时钟外的外设系统提供时钟源。系统时钟有5个时钟源可供选择,即内部高精度IRC、内部IRC(32kHz,误差较大)、外部晶振、内部PLL输出时钟及内部48MHz时钟源。
如图3.2所示为STC32G12K128单片机的时钟框图,从框图可知,时钟的管理比较复杂。初学者学到此处时不必力求面面俱到,而应循序渐进,首先了解系统时钟的选择和设置就行。默认状态下,系统时钟的时钟源是内部高精度IRC,在下载程序前,只需要在STC-ISP中的“输入用户程序运行时的IRC频率”中下拉选择或直接输入单片机所需的系统频率值即可。如图3.3所示,选择系统(工作)频率是24MHz。
图3.2 STC32G12K128单片机的时钟框图
图3.3 内部IRC时钟的选择
默认状态下,系统时钟的时钟源为内部高速IRC,当需要选用其他类型的时钟源时,需要在用户程序中进行设置。无论选用何种时钟源,都必须先使能选用的时钟源,然后检测该时钟源的稳定标志,当稳定标志为1时,再切换时钟源。与STC32G12K128单片机系统时钟相关的特殊功能寄存器(SFR)和扩展特殊功能寄存器(XFR)如表3.9和表3.10所示。
表3.9 与系统时钟相关的SFR
表3.10 与系统时钟相关的XFR
1.主时钟MCLK时钟源的选择
从图3.2可以看出,系统时钟SYSCLK是主时钟MCLK的分频信号,主时钟MCLK的时钟源由时钟选择寄存器CLKSEL中的B3、B2(MCK2SEL[1:0])和B1、B0(MCKSEL[1:0])进行控制。MCK2SEL[1:0]和MCKSEL[1:0]的设置与主时钟源的关系分别如表3.11和表3.12所示。
表3.11 MCK2SEL[1:0]的设置与主时钟源的关系
表3.12 MCKSEL[1:0]的设置与主时钟源的关系
2.系统时钟与主时钟
系统时钟SYSCLK是主时钟MCLK的分频信号,由时钟分频寄存器CLKDIV进行控制,分频关系如表3.13所示。
表3.13 系统时钟与主时钟的分频关系
3.主时钟的对外输出
1)主时钟输出引脚的选择
主时钟输出引脚的选择由系统主时钟输出控制寄存器MCLKOCR的B7(MCLKO_S)进行控制。当MCLKO_S=0时,主时钟信号经分频后输出到P5.4;当MCLKO_S=1时,主时钟信号经分频后输出到P1.6。
2)主时钟输出频率的控制
主时钟MCLK经时钟分频寄存器CLKDIV分频后,称为系统时钟SYSCLK,再通过主时钟输出控制寄存器MCLKOCR的B6~B0(MCLKODIV[6:0])进行控制,其控制关系如下:当B6~B0均为0时,禁止输出主时钟;当B6~B0均为非0值时,主时钟输出引脚输出的时钟频率为系统时钟/B6~B0表示的数值。
4.内部高精度IRC的使能与稳定
当要使用内部高精度IRC时,首先要使能该模块并待其稳定后才能使用,该模块由内部高精度IRC控制寄存器(HIRCCR)进行控制。
(1)当HIRCCR.7(ENHIRC)=0时,关闭内部高精度IRC;当HIRCCR.7(ENHIRC)=1时,使能内部高精度IRC。
(2)HIRCCR.0(HIRCST)为内部高精度IRC的频率稳定标志位(只读位)。当内部的IRC从停振状态开始使能后,必须经过一段时间,振荡器的频率才会稳定。当振荡器的频率稳定后,时钟控制器会自动将HIRCST位置位。
5.外部振荡器的控制与管理
外部振荡器的控制与管理由外部振荡器控制寄存器(XOSCCR)实现,具体情况如下:
(1)当XOSCCR.7(ENXOSC)=0(或1)时,关闭(或使能)外部晶体振荡器。
(2)当XOSCCR.6(XITYPE)=0,外部时钟源是外部时钟信号(或有源晶振),信号源只需要连接单片机的XTALI(P1.7);当XOSCCR.6(XITYPE)=1,外部时钟源是晶体振荡器。信号源连接单片机的XTALI(P1.7)和XTALO(P1.6)的电路示意图如图3.4所示。
图3.4 信号源连接单片机的XTALI(P1.7)和XTALO(P1.6)的电路示意图
(3)当XOSCCR.5(GAIN)=0时,关闭振荡增益(低增益);当XOSCCR.5(GAIN)=1时,使能振荡增益(高增益)。
(4)XOSCCR.3、XOSCCR.2(XCFILTER[1:0])为外部晶体振荡器抗干扰控制寄存器。当外部晶体振荡器频率在12MHz及以下时,选择XCFILTER[1:0]=1 x ;当外部晶体振荡器的频率在12~24MHz(含)时,选择XCFILTER[1:0]=01;当外部晶体振荡器的频率在24~48MHz(含)时,选择XCFILTER[1:0]=00。
(5)XOSCCR.0(XOSCST)为外部晶体振荡器频率稳定标志位(只读位)。当外部晶体振荡器从停振状态开始使能后,必须经过一段时间,振荡器的频率才会稳定。当振荡器的频率稳定后,时钟控制器会自动将XOSCST标志位置位。所以,当用户程序需要将时钟源切换到外部晶体振荡器时,首先必须设置ENXOSC=1,使能振荡器,然后一直查询振荡器的稳定标志位XOSCST,直到标志位变为1时,才可进行时钟源切换。
6.内部32kHz低速IRC的使能与稳定
当要使用内部32kHz低速IRC时,首先要使能该模块并待其稳定后才能使用,该模块由内部32kHz低速IRC控制寄存器(IRC32KCR)进行控制。
(1)当IRC32KCR.7(ENIRC32K)为0(或1)时,关闭(或使能)内部32kHz低速IRC。
(2)IRC32KCR.0(IRC32KST)为内部32kHz低速IRC的稳定标志位。
7.内部48MHz高速IRC的使能与稳定
当要使用内部48MHz高速IRC时,首先要使能该模块并待其稳定后才能使用,该模块由内部48MHz高速IRC控制寄存器(IRC48MCR)进行控制。
(1)当IRC48MCR.7(ENIRC48M)为0(或1)时,关闭(或使能)内部48MHz高速IRC。
(2)IRC48MCR.0(IRC48MST)为内部48MHz高速IRC的稳定标志位。
8.锁相环(PLL)时钟的控制管理
(1)锁相环(PLL)的输入必须为12 MHz,通过USB时钟控制寄存器(USBCLK)的B6、B5(PCKI[1:0])根据选择的时钟源进行设置,设置关系如下:当PCKI[1:0]=00时,不分频;当PCKI[1:0]=01时,2分频;当PCKI[1:0]=00时,4分频;当PCKI[1:0]=00时,8分频。
(2)锁相环(PLL)时钟倍频由USBCLK.7(ENCKM)控制。当ENCKM=0时,禁止PLL倍频;当ENCKM=1时,使能PLL倍频。
(3)锁相环(PLL)输出的选择由CLKSEL.7(CKMS)控制。当CKMS=0时,PLL输出96MHz;当CKMS=1时,PLL输出144MHz。
9.内部高精度IRC频率的调整 *
STC32G12K128单片机内部集成了1个高精度IRC。在使用ISP下载软件对用户程序进行下载时,ISP下载软件会根据用户所选择/设置的频率进行自动调整,调整后的频率在全温度范围内(-40~85℃)的温漂不超过-1.35%~1.30%。
STC32G12K128单片机的内部IRC有4个频段,各频段的中心频率分别为6MHz、10MHz、27MHz和44MHz,每个频段的调节范围约为±27%。内部IRC的频率调整主要由IRC频段选择寄存器(IRCBAND)、内部IRC频率调整寄存器(IRTRIM)、内部IRC频率微调寄存器(LIRTRIM)和时钟分频寄存器(CLKDIV)这4个寄存器控制,详见STC32G系列单片机技术手册。
特别提示: 对于一般用户,可以不用关心内部IRC的频率调整,因为频率调整工作在进行ISP下载时已经自动完成了。若用户不需要自行调整频率,那么IRC频段选择寄存器(IRCBAND)、内部IRC频率调整寄存器(IRTRIM)、内部IRC频率微调寄存器(LIRTRIM)和时钟分频寄存器(CLKDIV)这4个寄存器的值也不能随意修改,否则可能会导致工作频率变化。
USB时钟的时钟源有3种:内部48MHz高速IRC(IRC48M)、PLLCLK/2、系统时钟,由IRC频段选择寄存器(IRCBAND)进行控制,默认时钟源为内部48MHz高速IRC。
IRCBAND.7(USBCKS)、IRCBAND.6(USBCKS2)为USB时钟的时钟源选择控制位。
当USBCKS/USBCKS2=0/0时,时钟源为PLLCLK/2;当USBCKS/USBCKS2=1/0时,时钟源为内部48MHz高速IRC;当USBCKS/USBCKS2=x/1时,时钟源为系统时钟。
1.时钟源的选择
高速外设时钟指PWM时钟和SPI时钟,其时钟源包括内部锁相环时钟(PLL)和主时钟(MCLK)两种,由CLKSEL.6(HSIOCK)控制。当HSIOCK=0时,主时钟MCLK为高速外设时钟源;当HSIOCK=1时,PLL输出的PLLCLK(96MHz或144MHz)为高速外设时钟源。
2.高速外设时钟的分频输出
高速外设时钟的分频由高速外设时钟分频寄存器(HSCLKDIV)控制,其分频关系如表3.14所示。
表3.14 高速外设时钟的分频关系
如图3.2所示,STC32G12K128单片机的RTC时钟是32kHz的,可以由内部提供,也可由外部晶振提供,由RTCCFG.RTCCKS控制,详见STC32G技术手册RTC实时时钟部分。