环球报道:MCU的时钟树讲解

2023-06-21 11:05:15 来源:学嵌入式的钉子君

各位朋友在使用MCU进行开发时,是否有遇到过以下现象:将两份同样的程序下载到两块相同的MCU,最终运行时,发现其中一块时序正常,而另一块时序异常,无论是采用定时器延时 或 使用通信接口通信,都会发现时钟速度不正常。别担心,通过本次的学习,也许能解决问题!


(相关资料图)

本文将讲解MCU中的时钟树,通过分析一款具体型号的MCU手册,来说明MCU中的时钟的来源以及其作用,分析时钟树对于编程的影响。

以下内容,只表示个人观点,不一定完全正确,但欢迎大家指正错误和提出建议,必有重谢。

Part 1

时钟树介绍

单片机中的时钟树是什么?有什么作用?

笔者认为,时钟树是关注单片机的时钟源和时钟的流向的树状结构。单片机开发工程师通过分析一款单片机芯片的时钟树,可以获取到这款芯片中的时钟数目以及各时钟作用。当芯片工作时序紊乱时,结合时钟树分析以及使用示波器等工具,就可以排查出问题的根源。

Part 2

STM32F4xx时钟树分析

本例以STM32F407ZG芯片为例来分析时钟树,此款芯片正常工作时主频率为168MHz。打开此款芯片的参考手册,找到时钟树的图片。

Step1,找出此款STM32芯片中5个时钟源:低速内部时钟LSI,低速外部时钟LSE,高速内部时钟HSI,高速内部时钟HSE,锁相环路时钟PLL。找出他们后,关注这5个时钟的来源和流向。

Step2,在图中标注这5种时钟源的来源和流向。

Step3,对于每个时钟源逐个分析,逐个击破!

LSI,低速内部时钟(位于图片上方,用蓝线标记),时钟来源是MCU内部的RC振荡电路,频率为32KHz。

作用:驱动独立看门狗, 也可以驱动RTC(实时时钟,本质还是一款定时器,一般不用LSI驱动RTC)

2.LSE,低速外部时钟(位于图片上方,用绿线标记),时钟来源是MCU的OSC32IN和OSC32OUT连接晶振电路提供的时钟信号,在本开发板使用的32.768kHz(LSE一般也使用32.768kHz)。

作用:驱动RTC(一般用LSE驱动RTC,因为RTC内部可以达到32768分频,故产生的计数频率为1Hz)

补充:LSE的时钟可以通过MCO1引脚输出,用于测试外部低速晶振电路是否正常。

3.HSI,高速内部时钟(位于图片中心,用紫线标记),时钟来源是MCU内部的RC振荡电路,频率为16MHz。

作用:提供芯片的主频(16MHz), 也可以为PLL提供时钟输入。

补充:HSI的时钟可以通过MCO1引脚输出,用于测试内部高速振荡电路是否正常。

4.HSE,高速外部时钟(位于图片左下,用粉线标记),时钟来源是MCU的OSC_IN和OSC_OUT连接晶振电路提供的时钟信号,在本开发板使用的25MHz。

作用:驱动RTC , 提供芯片的主频(25MHz) ,也可以为PLL提供时钟输入。

补充:HSE的时钟可以通过MCO1和MCO2引脚输出,用于测试外部高速晶振电路是否正常。

5.PLL,锁相环路时钟(位于图片左下,用红线标记),时钟来源是HSI或HSE。

作用:放大时钟来源的频率,提供芯片主频(又称系统时钟SYSCLK)。

Part 3

MCU系统时钟(主频)的计算

考虑到常规使用STM32时,不会直接使用HSI和HSE作为芯片的主频(数值较小),一般都是用HSE作为PLL的时钟输入,再用PLL时钟输出作为MCU的主频。

结合上图左下角PLL部分框图中出现的系数,可以得到MCU主频为:

f ~ SYSCLK~ = (f ~ HSE ~ / M) * (N/P); //单位MHz

故说明MCU的主频受到外部晶振电路的频率以及PLL时钟电路中的M、N、P的影响。笔者以自己使用的开发板(信盈达公司的STM32F407ZG开发板)为例,做进一步的说明。

电路上,用于连接HSE的晶振电路是25MHz,如下图所示。

故公式中f ~ HSE~数值为25MHz,另外三个参数M、N、P是通过编程配置的,定义于文件system_stm32f4xx.c中(这个文件是由STM32厂商提供,是建立工程的必要文件之一)。

可以看到其中M为25,N为336,P为2。代入公式

f ~ SYSCLK~ = (f ~ HSE~ / M) * (N/P); //单位MHz

计算出芯片的主频为168MHz。如果开发板上使用的外部晶振电路被替换为8MHz,则需要更改程序中出现的PLL_M的值,将它由25修改为8后,才可以保证MCU继续维持168MHz的主频。

总结:一款MCU的主频的设置取决于两方面:硬件电路设计(特别是MCU外部的晶振电路)和软件设计(关于PLL时钟相关的分频和倍频系数,通过程序设置)。但这一切归根结底,还是在于能否正确理解一款芯片时钟树!

留给读者的思考,下图为STM32F1xx时钟树,找出它的各个时钟源的来源和流向,分析各自的作用。并思考STM32F1xx系列芯片在时钟上和STM32F4xx系列芯片有何不同。

标签:

上一篇:使用STM32单片机点亮LED
下一篇:最后一页