你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32l053的RCC时钟

[复制链接]
强仔00001 发布时间:2015-1-7 01:30
本帖最后由 强仔00001 于 2015-1-13 18:43 编辑
* x; t% q% {9 z- F5 l* p2 ]0 C
# b5 {) H: b4 K) C2 E转载自:http://bbs.eeworld.com.cn/thread-452537-1-1.html  9 a4 s3 L1 W" q: _  R& Y9 y
今天我跟大家探讨一下STM32L053R8的时钟系统。今天看芯片的参考手册,发现STM32L053R8的时钟系统很强大也比较复杂。: J4 b+ ]; X% v
在STM32L053R8这款芯片中的时钟源选择有5个,如下图:
( e) i1 O" V$ T5 k9 w( J4 m% K6 _ QQ截图20141126010534.png
分别是:
HSI16 (high-speed internal) oscillator clock
HSE (high-speed external) oscillator clock
PLL clock
MSI (multispeed internal) oscillator clock
37 kHz low speed internal RC (LSI RC)
32.768 kHz low speed external crystal (LSE crystal)
其中能作为主系统时钟源的有4个,如下图:
5 p% M1 X, D) I
QQ截图20141126010400.png
整个芯片的时钟树如下图:
QQ截图20141126010553.png
关于时钟树这里我就不多说了,大家可以参考f10xx或者f4xx,值得注意的是用内部HSI外部HSE时,或者经过PLL产生的系统时钟最大频率只能是32M。如下图:
QQ截图20141126011606.png
QQ截图20141126012033.png
下面我就用自己建的模板,使用内部的HSI然后通过PLL产生的时钟通过MCO1PA8脚输出,通过示波器观察系统时钟的频率。
; X* u6 j. _3 T9 J& a+ }* R
代码如下:
  1. #include "stm32l0xx.h"4 U2 M; A/ y0 R: f
  2. 9 f0 w" c) T$ ?# [/ z: @8 p* U
  3. void LED_Init()
    8 E' {! s- ^% q  s* I- B2 R
  4. {: y8 a! I) _' U' D- h% A: a
  5.         GPIO_InitTypeDef  GPIO_InitStruct;
    6 D  W# l4 l! _8 G
  6.   __GPIOA_CLK_ENABLE();* n8 u7 W/ p) D
  7.         
      A1 U4 X" O0 c* H
  8.         GPIO_InitStruct.Pin = (GPIO_PIN_5);
      \8 k; {, s3 e/ r; w
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ! I9 L' o0 B1 l+ f# M! ?
  10.   GPIO_InitStruct.Pull = GPIO_PULLUP;
    ! s- O( b  a2 [( y% T9 \
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
      b8 @0 b7 w5 Q" h) f; _6 M! t
  12.   - n, x" V* u, U
  13.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    1 T1 l5 \: N% Z' C; W& C/ i
  14.           / o  t' K: G0 X4 U
  15. }" m  S0 ?% {* Z; t: R  i

  16. + O  L# v+ t- T: P
  17. static void Error_Handler(void)1 G% K  S. Y# I& r& i- K4 z
  18. {, |/ s. A1 o3 E% z9 I; B
  19.   /* Turn LED2 on */
    5 P. Q5 l3 E" o0 e1 s1 W- }( I, O
  20.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
    $ @$ n4 `5 d- a
  21.   
    2 a9 B2 x9 W6 Z: M4 |: D! [$ K
  22.   while(1)6 H, i1 X& \5 }0 |% ]
  23.   {
    " E! }, H6 X0 V: H- X4 m+ h! ?
  24.   }* F- Z5 l) M3 N3 C- z
  25. }/ S- M+ z" Y9 `% O8 ~
  26. void LSE_Init()
    , x4 L% }. L  \+ S3 y3 }
  27. {
    # s4 c/ }: g" r+ }* e# X
  28.   RCC_OscInitTypeDef RCC_OscInitStruct;
    . g0 @, U; Y+ U- X
  29.   RCC_PeriphCLKInitTypeDef  PeriphClkInitStruct;
    - L) f9 P* Z4 t% E3 K6 d7 p
  30. & N4 O' X$ O* `) Y! l  R: W" G; F) b

  31. 2 B$ S% }0 O" C& _+ ~
  32.   RCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
    + g* S) R2 v2 L
  33.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;' \+ m8 Q0 D; }7 o3 C
  34.   RCC_OscInitStruct.LSEState = RCC_LSE_ON;
    * B, `0 v# i4 ~$ i
  35.   RCC_OscInitStruct.LSIState = RCC_LSI_OFF;6 f+ a6 p4 f% t" N' _- S: q
  36.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)% U8 w3 a+ D1 K1 T
  37.   {
    2 A; Y, [) g; u& @3 S4 }
  38.     while(1)  j0 ]+ l8 f" E
  39.     {
    * p9 g4 I: N$ u5 A$ V
  40.                                 Error_Handler();, E: B; I+ l: b1 ?
  41.     }% n2 @# {9 J9 L* T! Z/ Q
  42.   }
    0 p- R9 e3 `, `0 E' B

  43. ' L( @0 `9 z1 g& A
  44.   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;0 c; B" @) w! T4 s  u& i2 ^" g/ z
  45.   PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;! \+ h4 Z0 c0 D
  46.   if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)5 ~+ O' T4 ^; }% i! Y
  47.   {
    ; q3 a; O' v5 e' |' _% f! |
  48.                         Error_Handler();. D* C! k9 y8 _* w5 }
  49.   }7 d6 U6 I; c; x( g* c: c
  50. }9 l! w9 P1 B$ H* F2 h4 [

  51. 4 Z3 B- S3 F3 N5 c/ @$ K
  52. void LSI_Init()
    9 ^- }' l3 R. {6 j2 p/ {
  53. {
    2 i3 g& ]7 r; g  Y
  54.   RCC_OscInitTypeDef RCC_OscInitStruct;
    / Y  ]4 g9 G5 K9 Y
  55.   RCC_PeriphCLKInitTypeDef  PeriphClkInitStruct;
    ( W$ L2 e# f, N

  56. ( M  Z; T3 M: z5 x+ w  ]+ N9 b

  57. " w- e5 d' Z& t+ m/ E- w
  58.   RCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
    * f! \7 c1 \7 V. X: H4 p
  59.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    # {' k/ l; E) H# |! d) E4 V# `
  60.   RCC_OscInitStruct.LSEState = RCC_LSI_ON;
    " K* w& |; ~- b  m5 k1 v
  61.   RCC_OscInitStruct.LSIState = RCC_LSE_OFF;/ O7 f, m% l: I6 ^. q
  62.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)( E6 M- ~$ _9 ~& C
  63.   { 9 t& P$ _/ l( y4 t8 T  D
  64.     while(1)1 h$ d- d: j7 Z& D5 c" x5 k/ s
  65.     {
    2 S) P) b6 Q! _2 y2 Y: T
  66.                                 Error_Handler();
    1 \6 \+ @5 q  E& P
  67.     }
    7 n! K# z* `& S& k) F
  68.   }
    4 B$ i# q# a5 H$ G. h" o/ I1 ^
  69. 1 a+ X6 q) P' W5 F* r! E  H
  70.   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;6 _9 n6 J' Q9 O8 {: J
  71.   PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
    3 A- a" `1 B( w2 N" z' t
  72.   if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    - d- f. s6 m  x5 P. r! @* v
  73.   { $ R7 H, Z9 g3 G9 t5 q7 {( }
  74.                         Error_Handler();" p, V% [4 M& W0 v" _
  75.   }
    + A7 D0 r: I& l+ s
  76. }
    1 e0 {  n2 c2 Y& }  Y5 c
  77. / g7 n. k2 F& S
  78. * f. F# i0 F/ W! A) D6 @
  79. void HSI_Init()
    4 A9 \/ L) q- i+ ?, Z6 T3 J
  80. {
    & O( H  m, z# G, X! x, p
  81.   RCC_OscInitTypeDef RCC_OscInitStruct;
    9 W; P( k  q% t! y$ k1 U
  82.         RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;2 `- ^- z( W' _% _5 q4 x" J
  83.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    4 h! j; k  W% v
  84.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    + M8 X% l- w, ^; [- r/ X5 o
  85.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;: c( \( u# D. Z7 ]7 U+ J* M
  86.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6;; |% C7 [7 x4 i; N( z6 ~
  87.   RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_4;
      L5 e; x* i& |9 l+ P1 A
  88.   RCC_OscInitStruct.HSICalibrationValue = 0x10;
    ' ]+ k7 r* C3 H# d" R! ]% x' U) P8 u
  89.   
    & O6 A7 _/ {$ Y5 h* q4 p9 Q! n
  90.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
      B) T* i9 |/ n0 l  @5 I# K+ R/ H6 o2 z+ ]
  91.   {3 |0 J, F5 ?. q2 K
  92.     /* Initialization Error */' f! l4 ?  r7 `( A/ r
  93.     Error_Handler();6 Q& T8 b# Y( V) X# B. S( p
  94.   }
    7 K. Q! f+ Q4 S1 B$ I# }
  95. }
    9 `  J+ k. g8 N7 M2 K

  96. $ U2 o0 }4 M! j9 ^# L% R0 |
  97. void PLL_Init()6 h7 i9 K7 }( y2 h% h5 G3 Y
  98. {
    " R7 Q& d, C2 f; i% S! L2 l
  99.         RCC_ClkInitTypeDef RCC_ClkInitStruct;
    0 D9 q. P! Q* z' B3 @0 v
  100.         " z9 F1 u* F6 o0 H( X
  101.         RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
    6 F4 e- o0 L/ g5 s0 t
  102.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;  //RCC_SYSCLKSOURCE_PLLCLK
    * Y" d) s- v. o2 W
  103.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    % }/ e0 j4 }: d- v/ X
  104.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;  # S6 A1 N. p! O7 P4 E
  105.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;  
    6 x5 P: ^/ h+ J6 r" x! b1 Q
  106.   if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
    " R2 I/ E+ S2 \8 l/ {. K
  107.   {0 C  z4 g' g. w) X8 j: _. |0 p; b% i
  108.     Error_Handler();
    4 S! M9 @1 R, M) n
  109.   }
    4 U% A# o1 D; ?+ ?- t. R
  110. }
    ; Z3 n& _3 O. [; |) E& N6 r
  111. 0 X# i  o9 A* [# e7 G
  112. 2 X6 t" w) _( T/ Z8 l# L% C

  113. / p  k  m- D7 T1 O7 m
  114. int main()
    % ?: O2 r! D% L! r& N! M7 Z5 W
  115. {
      \& a5 S! ]/ m

  116. ) Q' k- |& }" p# G9 a
  117.         LED_Init();
    ( a/ q0 q& x3 d3 f, M$ |: X' L
  118.   __PWR_CLK_ENABLE();
    . L: x4 }+ u3 o# L" N' q
  119.         
    ( y* P" L: S% d
  120.         / ~5 m9 f5 ?/ a7 d/ m
  121.         //LSE_Init();
    4 y2 \; L/ h/ p  T* w6 U' N- ~
  122.         HSI_Init();
    ! h$ u) A' {, j. D/ O0 l
  123.   PLL_Init();3 |& Q. l; q% c# k: X) i' y1 c3 n7 P
  124.         
    , d' K7 o6 f" d+ h' u4 L% q- A) I
  125.         //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_LSE, RCC_MCODIV_1);        //LSE频率输出* C, Q! O) \3 J' e: N& \
  126.         HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1);        //PLL输出
    $ v4 C" S; B( D- `; f
  127.         # u  f/ {. S) s2 f6 [% Z6 z0 V5 u

  128. * u5 ~$ t3 ^% N. l5 I4 Z
  129.         while (1)
    7 q3 P4 C. C9 u6 j, m) j
  130.   {
    4 ?/ E1 {' n: r! a1 K
  131.     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,1);
    7 [5 m5 Z9 Y! o$ l6 \9 j  t
  132. 6 r5 E0 U6 T- ^* o
  133.   }) \3 D9 a1 T& s  x2 J3 |1 v- ^4 U
  134. }6 u3 S* r7 U* g; u9 q( U
复制代码
效果如下图:
IMG_20141125_235019.jpg
IMG_20141126_000314.jpg
IMG_20141126_005345.jpg
附上源代码:
RCC_Test.zip (646.95 KB, 下载次数: 30)
收藏 评论7 发布时间:2015-1-7 01:30

举报

7个回答
iwqt1983 回答时间:2015-1-7 09:09:21
这芯片比较新,低功耗方面如何?有人测试过吗?
flintlovesam 回答时间:2015-1-7 11:06:33
不错强仔  支持  学习啦
强仔00001 回答时间:2015-1-7 15:10:39
与非朋 发表于 2015-1-7 11:065 K6 v. k# }. v5 Z" g
不错强仔  支持  学习啦

+ [+ U! `- W# S2 m- E2 ^你也在这里
flintlovesam 回答时间:2015-1-7 16:56:49
强仔00001 发表于 2015-1-7 15:103 c( k4 L& m8 W3 U, P% P; F7 D3 k/ V
你也在这里

$ x+ I" t& k' c$ w哈哈  嗯啊  在这里看看你发的帖子  学习学习
强仔00001 回答时间:2015-1-7 16:57:47
与非朋 发表于 2015-1-7 16:566 \9 c" W. H8 U6 T
哈哈  嗯啊  在这里看看你发的帖子  学习学习
: _9 F1 X$ W; _3 s6 H+ r5 j
谢谢支持
coolblood 回答时间:2015-1-7 17:00:28
不错   学习学习
强仔00001 回答时间:2015-1-7 17:01:19
coolblood 发表于 2015-1-7 17:00
& Z8 @$ B) ^8 U7 O1 Z不错   学习学习
8 e2 U/ l4 j& K( Y8 z9 Q
这个功能还不错,可以直观看到时钟多少

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版