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

stm32l053的RCC时钟

[复制链接]
强仔00001 发布时间:2015-1-7 01:30
本帖最后由 强仔00001 于 2015-1-13 18:43 编辑
+ ^) K% R7 y& `' I: f2 }  g$ E6 b$ g' N9 S' g
转载自:http://bbs.eeworld.com.cn/thread-452537-1-1.html  
! ]; ~+ I- s0 n% |6 W2 ^今天我跟大家探讨一下STM32L053R8的时钟系统。今天看芯片的参考手册,发现STM32L053R8的时钟系统很强大也比较复杂。
- f" ?1 L& m9 S8 y- \8 [在STM32L053R8这款芯片中的时钟源选择有5个,如下图:6 O$ {/ O2 C1 Z+ V) {9 B# `" F& |; a/ N0 Y
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个,如下图:
( t& b4 h, f( H+ w3 l
QQ截图20141126010400.png
整个芯片的时钟树如下图:
QQ截图20141126010553.png
关于时钟树这里我就不多说了,大家可以参考f10xx或者f4xx,值得注意的是用内部HSI和外部HSE时,或者经过PLL产生的系统时钟最大频率只能是32M。如下图:
QQ截图20141126011606.png
QQ截图20141126012033.png
下面我就用自己建的模板,使用内部的HSI然后通过PLL产生的时钟通过MCO1的PA8脚输出,通过示波器观察系统时钟的频率。
; e8 \) l" \: Y( n6 k  \
代码如下:
  1. #include "stm32l0xx.h"
    0 a! b8 }1 y% Q: r. M

  2. 6 U8 W# m- m1 s5 X2 R
  3. void LED_Init()
    6 y# B: y, ^+ U7 t$ Z$ m9 C+ m
  4. {
    0 W/ k8 `/ z9 O) _
  5.         GPIO_InitTypeDef  GPIO_InitStruct;! `! I8 Y$ D$ p  H8 w
  6.   __GPIOA_CLK_ENABLE();2 U% D5 |# M8 u# s1 s
  7.         
    - `+ I' a2 d$ V' R' b
  8.         GPIO_InitStruct.Pin = (GPIO_PIN_5);
    5 ^  F( j0 ?  }  l) e
  9.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    ; w; r5 Q* r9 M( i. O2 w/ r* K' x; e
  10.   GPIO_InitStruct.Pull = GPIO_PULLUP;7 S! |# \, x" J7 w% l; g% W
  11.   GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
    9 d8 S' o# O8 F; o
  12.   $ K9 k+ J3 A( f4 Q2 l% n+ A
  13.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); % a" S2 R) u6 T: u$ m. C0 k) |* N
  14.           / O; L; ?, i/ T1 f' @5 u2 S
  15. }$ @, @, ^9 k# f' i; `
  16. - J1 O$ ]- Q  c' E6 W" R0 h
  17. static void Error_Handler(void)
    9 A6 H4 {# K% u* Y1 `1 U7 i8 Z% @8 O
  18. {
    6 l: X: E) K0 U% ]$ m1 A5 G
  19.   /* Turn LED2 on *// O+ u/ x" s2 p$ C! h
  20.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
    6 P9 T+ Q) Q) p. L8 ]  j& @
  21.   
    * {+ X, b8 v/ U! }
  22.   while(1); Y& Y/ X! ~: q4 c
  23.   {
    . u0 C* w4 H7 i/ R4 ?
  24.   }+ D1 g7 N4 Z/ j% p% V6 \- ~; l7 j; f
  25. }2 p; F; g) q& R& p8 H
  26. void LSE_Init()
    ( r& {1 Q3 x! ?7 g* E0 T
  27. {
    5 ]8 V9 G$ N( w3 q6 @3 j6 s( O* R
  28.   RCC_OscInitTypeDef RCC_OscInitStruct;
    7 F! ?' h+ v4 v' d  ?% f3 q; c
  29.   RCC_PeriphCLKInitTypeDef  PeriphClkInitStruct;/ y* U/ C/ g3 A- \% Y

  30. 1 j# b; L- k# P7 t+ W3 k% c
  31. $ {" T/ z% r) k& n. X: Z5 y1 Z1 A
  32.   RCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
    7 G( a% O. F) b; {
  33.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;% g8 a: o# C5 J: B4 W
  34.   RCC_OscInitStruct.LSEState = RCC_LSE_ON;
    8 ?, S9 C' y5 ~( s5 j* V+ N
  35.   RCC_OscInitStruct.LSIState = RCC_LSI_OFF;  _! N- W) n  O; Y9 {* Y/ q
  36.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    : ^$ L( Q: Y  p3 ^
  37.   { " f+ l' G7 C5 c, o7 W" [
  38.     while(1)
    ! ?1 c- L- l+ P! M5 n* Z
  39.     {
    " M1 A  w2 a+ {2 p
  40.                                 Error_Handler();
    ( v* _6 a5 C. q- y
  41.     }
    ( C3 ]. [* ~2 U! z: p: C, N
  42.   }2 C# L3 _1 k# L1 M. [% C
  43. - h, X; u2 C' v! I3 G1 n/ P6 n
  44.   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;/ M* i1 F# d+ p7 B
  45.   PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;- R/ u1 z2 M2 h0 ?$ T
  46.   if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)( y7 V+ k% _: @: r
  47.   { 7 s' |8 q6 o' m
  48.                         Error_Handler();
    ( W- p' z5 [" P, ~  L# j
  49.   }
    & Z" ^% ]2 P$ i9 A/ p
  50. }
    . V! S9 W8 Y; H
  51. 2 @! H! N7 Q+ s  i0 y* P
  52. void LSI_Init()# z! Q3 v. L: w; b$ i$ p: d. S5 t, Z
  53. {
    9 d- p4 ~& l" t9 v6 A
  54.   RCC_OscInitTypeDef RCC_OscInitStruct;+ u2 I0 p# B8 Y) X( L& C* J
  55.   RCC_PeriphCLKInitTypeDef  PeriphClkInitStruct;3 A6 s: Q" k5 g7 t
  56. ) o/ z, p. J. c, ?2 ?

  57. 5 A  ?& T. m6 ]+ \
  58.   RCC_OscInitStruct.OscillatorType =  RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
    3 q8 _$ S( J% A, A+ r7 C, l, D
  59.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;# x4 u4 R) \! p" E% [4 j8 `
  60.   RCC_OscInitStruct.LSEState = RCC_LSI_ON;
    # `. v' y. f2 H1 }
  61.   RCC_OscInitStruct.LSIState = RCC_LSE_OFF;
    # ~$ p# y" F, ^6 @1 l, X$ y
  62.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)3 p1 U( M  B8 @' C( B
  63.   { % j: B, G# Y4 Y& l$ ]
  64.     while(1)5 x# K& ~' K+ v
  65.     {, {& r* w+ K5 ^+ N9 P7 F
  66.                                 Error_Handler();0 m0 o$ m" V  p+ v/ z
  67.     }
    ( G- A0 }5 r+ @/ n
  68.   }# Q/ [# C1 X- \& ~/ _" J

  69. 2 g1 _9 q4 Y# [4 Q# y  A% G
  70.   PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
    # Z% Z9 q9 u, ?
  71.   PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
    7 ?! M) L6 y$ R7 [: F- b, ~5 j
  72.   if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)( u. {1 q( y* V( w- |4 T
  73.   {
    : B% h! G  h5 [/ ~- \* t
  74.                         Error_Handler();) i; n! e: F) P9 T$ R" m3 N- @
  75.   }
    # d% N- }; ~- x4 O9 `0 w
  76. }1 A* F! X0 v% c5 F* B

  77. 1 I' R* [; D$ e- M, V( K0 V' s
  78. 0 G9 d; k: |; k
  79. void HSI_Init()4 e% s: Z1 a+ L$ R: `# a
  80. {
    ' \) n& O. k3 g$ ]% K
  81.   RCC_OscInitTypeDef RCC_OscInitStruct;2 `' R, ?. {: |4 U
  82.         RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;4 y' ?9 D0 |# B& N+ c
  83.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;; B$ k3 U& c4 K
  84.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    ' \' W0 T* Z2 X' O3 V
  85.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;# n9 z/ a/ \% z6 A/ z
  86.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6;  z) @; W3 ^' s, {' @3 p
  87.   RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_4;
    7 i  N8 A9 a0 x1 l* I6 [
  88.   RCC_OscInitStruct.HSICalibrationValue = 0x10;# d/ g: p; f( p4 A, E, m
  89.   
    & ~8 y; d1 }* I4 J
  90.   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)4 M/ k" b& e- q
  91.   {
    5 a2 |9 R# j$ F
  92.     /* Initialization Error */
    ' e) R  v, F0 p8 A, |! W  x
  93.     Error_Handler();
    8 ~6 U* g0 X6 z; ?
  94.   }( E9 H6 J4 j2 L& F& @
  95. }- d9 f4 P5 h$ ~7 f  u8 D6 _

  96. # X5 J- H$ [) ?$ D: [
  97. void PLL_Init()
    2 |6 k. i- ^# S+ m5 I9 s  S
  98. {$ }2 c. ?" S) z7 b, |% i: P- |
  99.         RCC_ClkInitTypeDef RCC_ClkInitStruct;- ~9 Z- @- R! k. F5 }8 D
  100.         
    5 s2 K9 u, q, |/ k: k
  101.         RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);* |# V$ b- o; @& }/ Z
  102.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;  //RCC_SYSCLKSOURCE_PLLCLK
    ( C" x  m  M( c% E
  103.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    : h. z1 j. W9 X0 j0 s& c7 ^  Z- E8 ~+ V9 W2 e
  104.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;  
    0 \8 j+ i/ |9 ]) [. u
  105.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;  
    , _6 N3 G& u/ s# o5 R
  106.   if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
    0 S7 @7 Q- U# d- l0 V3 q1 P
  107.   {
    - ~$ I7 z( j3 O2 H1 I5 c+ U1 J
  108.     Error_Handler();
    5 L) b. R9 T9 ^% j" t$ E
  109.   }
    / n( L7 t4 H! T+ g6 K
  110. }* z! Q: w8 x7 J1 r/ f4 w+ {
  111. 4 u5 {2 `! M3 m4 s8 F! p

  112.   I2 ?( D* i) @& ^) W( ], m% r6 \  P7 s
  113. " T; t# v6 X7 Y; F6 O9 R
  114. int main()* M: {& u3 q) x2 k- D) n3 H
  115. {/ O* n  y5 l8 O( R0 H" L
  116. 3 }5 r& U9 W8 J2 X
  117.         LED_Init();
    8 g( R+ q8 \$ y6 n
  118.   __PWR_CLK_ENABLE();& Y6 N# T  G# e2 U
  119.         ( l0 s* e+ Y0 x0 j7 Y9 e
  120.         - j6 V8 n4 |$ K" y- a4 E" V' H6 t
  121.         //LSE_Init();
      }! g: U) L8 O& E1 A% K) a- [
  122.         HSI_Init();* i" i( V7 \- U
  123.   PLL_Init();
    " l8 }* `1 R% x3 y5 U6 c
  124.         
    ( R0 R' q3 `7 c/ @$ S; V$ w
  125.         //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_LSE, RCC_MCODIV_1);        //LSE频率输出: H4 x- z- l) F6 B! x0 r) T, |
  126.         HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1);        //PLL输出
    & ^/ d: L. P6 B7 Y: a, n
  127.         
    / [/ X$ }# L+ I, D* V
  128. ' q9 W3 [- `# W8 Z! S
  129.         while (1)
    0 b0 k. {3 x: h; z% i
  130.   {( f/ |( {: t0 P2 U, e/ [
  131.     HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5,1);
    1 x! y& b" l. j" ~
  132. 7 J, `0 _; Z& }4 O2 [5 X
  133.   }; M/ t9 X3 S, E2 F/ o5 h
  134. }
    1 K- n3 I9 R+ Z. l8 }' Y
复制代码
效果如下图:
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:063 ~' u3 F3 f* _& g# Y& u
不错强仔  支持  学习啦
9 N, @4 s/ ]0 I5 \, m/ o! C4 @
你也在这里
flintlovesam 回答时间:2015-1-7 16:56:49
强仔00001 发表于 2015-1-7 15:101 g$ y8 A4 p# S" @: [' B
你也在这里

' I1 I3 D4 ?; o+ O" O哈哈  嗯啊  在这里看看你发的帖子  学习学习
强仔00001 回答时间:2015-1-7 16:57:47
与非朋 发表于 2015-1-7 16:564 f2 q' s! O% ]/ M4 E8 A1 {
哈哈  嗯啊  在这里看看你发的帖子  学习学习

; }( v) o" S/ s0 n; k1 R# O+ S( e谢谢支持
coolblood 回答时间:2015-1-7 17:00:28
不错   学习学习
强仔00001 回答时间:2015-1-7 17:01:19
coolblood 发表于 2015-1-7 17:002 |" y  Y; E9 ]
不错   学习学习
; D: C/ e0 h7 I0 }& [
这个功能还不错,可以直观看到时钟多少
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版