概述* j$ _- v: G( v9 E/ x! w STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,也是为了降低整个芯片的耗能。 系统时钟,是处理器运行时间基准(每一条机器指令一个时钟周期)- }' Y; s2 |) E4 p2 _ T" U/ | 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。, I* ~7 N5 n: a t; P 一个单片机内提供多个不同的系统时钟,可以适应更多的应用场合。 不同的功能模块会有不同的时钟上限,因此提供不同的时钟,也能在一个单片机内放置更多的功能模块。 对不同模块的时钟增加开启和关闭功能,可以降低单片机的功耗' C& c* g( i! m+ W& s" f STM32为了低功耗,他将所有的外设时钟都设置为disable(不使能),用到什么外设,只要打开对应外设的时钟就可以, 其他的没用到的可以还是disable(不使能),这样耗能就会减少。 这就是为什么不管你配置什么功能都需要先打开对应的时钟的原因 1 @8 @6 U. Y: n) ^) Z: q ! U, u- Q: i' x& c% y 各个时钟源 (左边的部分)+ T1 P5 ~! j" T STM32G0有4个独立时钟源:HSI、HSE、LSI、LSE。0 [$ N" A: e# Q+ t) Y+ c0 H0 h ①、HSI是高速内部时钟,RC振荡器,频率为16MHz,精度不高。- _ e( Y) t$ C6 I- ]2 i4 Z ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~48MHz。6 r6 P- |1 e6 `" w' i ③、LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。 $ Z/ B0 F7 N6 Y; I7 D; o0 O9 a" O ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。$ e7 C: H2 a5 |1 E& `7 N! e. o! d- D 其中LSI是作为IWDGCLK(独立看门狗)时钟源和RTC时钟源 而独立使用 ) ]4 m- |& l# o 而HSI高速内部时钟、 HSE高速外部时钟、 LSI低速内部时钟,这三个经过分频或者倍频 作为系统时钟来使用0 V. m2 N- p1 r5 J# s 4 `* x" v4 K( d" p PLL为锁相环倍频输出,基于HSI16或基于HSE的时钟的频率相乘,以产生三个独立的时钟输出。允许的输入频率范围是2.66至16 MHz。分频因子可从1到8进行编程 ' `2 Y* m: K8 m D 时钟分析8 s- N! @) D. o- T3 J& K LSI(低速内部时钟) 作为IWDG(独立看门狗)和RTC的时钟源,单独使用。 1 u$ D& f% N: }+ Z% G3 ^ LSE(低速外部时钟) 可以为RTC、CEC、SYSCLK提供时钟源。& c1 N& A4 K5 X3 E HSE(高速外部时钟)) t! p2 e' b* l6 E * Z' ^+ i, j6 j+ f1 ?7 B 可以为RTC、SYSCLK、PLL提供时钟源。$ |' A9 [" E# ^' ^5 h 4 t) N: ]6 p( X0 ` HSI(高速内部时钟) p9 V; i/ P8 f) G( p, R- g& O 可以为PLL、HSISYS提供时钟源,HSISYS再为SYSCLK提供时钟源3 D# J9 K% r1 M3 _( \ PLL(锁相环倍频输出) 7 r+ R: m! E( Y2 g# B 由HSE、HSI输入,经过分频倍频后提供SYSCLK,还用两组时钟分别提供给TIM1/TIM15/RNG和ADC/I2S1。' W# o" U$ Y3 v2 P: Q1 g8 J 其他时钟源分析 HSISYS ; O4 X8 }) c; t {, _+ C+ `. ~9 b 从HSI16通过除以1到128的可编程因子得到的时钟) l8 e2 Q) `0 ~8 E: i1 z 9 w: x- g& }* q& j PLLPCLK,PLLQCLK,PLLRCLK& Y C2 s7 B- P) h3 B 从PLL模块输出的时钟% a9 [0 g, T% u( l* }, b SYSCLK & C" |/ j5 R2 Y7 {( P 通过选择LSE,LSI,HSE,PLLRCLK和HSISYS时钟之一获得的时钟,是整个系统时钟基准。G0系列频率最高到64MHz。( x6 ~" n- P1 W$ j- c2 v* ^ - c6 C4 n3 J1 H$ F HCLK 由SYSCLK通过除以从1到512可编程的因子得出的时钟 2 c" \' @. w) @- n' | HCLK8 % A+ Z* x7 o. [: ?. O5 l 由HCLK八分频得出的时钟 PCLK 1 _ ~1 f- H3 Q1 R2 y( ? 从HCLK的时钟通过除以从1到16可编程的因子得出的时钟 $ y& a5 C [8 l" q2 n2 |, k' i TIMPCLK7 Z$ o- B. z4 e' [! ` o) w5 {; d C3 L0 V 从PCLK派生的时钟,如果APB预分频器分频因子设置为1,则以PCLK频率运行,否则,以PCLK频率的两倍运行& j+ \4 b+ a( G3 } LPTIMx_IN 8 A( u0 y) M/ } LPTIMx_INx引脚提供的时钟,可为LPTIM外设选择1 C& T( v) m& k3 G% f5 I 9 u% L1 |. A/ F MCO(微控制器时钟输出) 微控制器时钟输出(MCO)功能允许将时钟输出到外部MCO引脚。 可以选择以下之一作为MCO时钟:) q( V; w. U, B4 d; W9 f' T& i; B' M • LSI • LSE • SYSCLK: L; E) z$ m4 ~3 i% {( y7 x- V • HSI16 • HSE$ h$ a# E! m F; R • PLLRCLK6 s6 D3 N6 L, u' s- H6 `6 p CSS(时钟安全系统) P0 v9 l+ h/ V# t( J6 E 时钟安全系统可以通过软件激活。一旦检测到HSE时钟故障,则系统时钟将自动切换到HSISYS,并且禁用HSE振荡器。如果HSE时钟也是PLL的时钟来源,并且发生故障时将PLLRCLK用作系统时钟,则PLL也被禁用。 通过CubeMX配置时钟树 新建工程,并且开启SWD调试 - S' }% {1 n5 p6 m/ J& S8 C 通过在引脚视图界面,配置PC6为GPIO_Output;$ _; @/ U8 L# S( H% A1 e 在Pinout&Configuration中选中"RCC",在配置栏High Speed Clock(HSE)下拉菜单中选中"Crystal/Ceramic Resonator" 6 b5 O- V4 O/ [, Y" j 在Clock Configuration中 ,按下图配置,在HCLK框中输入最大64MHz,回车。cubemx软件会自动计算系数,而不用手动填写。保持激活CSS。 ?8 l# V$ Q$ r$ Z, x% N6 ^ 8 m% l% b: P7 o- I0 ]$ I9 P) M1 U { 然后在Project Manager中,设置好参数信息。2 h; h! d' a5 m5 ]" \, {$ U" T ! ?0 T/ v& P I# s1 b; E7 j 9 j5 D { K: t g6 d: Z; ^ 最后点击GENERATE CODE,生成工程文件。 打开工程项目,进入到MDK软件( B1 _8 B2 b# ^( v7 c# \5 x# c5 s @; q% Y2 \8 i1 Y/ P' U 打开魔术棒工具-Debug-Settings-Flash Download,勾上"Reset and Run",最后就可以编写代码,自由发挥吧。2 ^6 k* ?# B- }" W 3 ?, G) g* o: s& I* I/ J $ s5 j& W" x+ p# C8 @ ' k( ]: v8 C R: o% ^4 S+ w |