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

【经验分享】STM32-STM32H7时钟配置问题

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:46
STM32H7时钟配置问题
* C% o+ f+ x9 f* s; d设备:stm32h735VGxxx8 Q# R! w8 G9 a2 `4 C/ r: g0 P
. Z) g4 E, i5 a+ }
问题:STM32时钟配置不正确,一直没法启动。
, c, c/ C# |3 h( e, [# P4 R7 b. P5 |, i' Q; J$ k
解决:原因是配置时钟的一些参数超出的范围,所以配置导致不成功。; X6 `; n4 ~  r

. E4 _9 z& u% Y8 b6 A下面是H735的时钟的一些解释,其中 Fvco 是有范围的,这边从文档上面查到,FVCO的最大配置值为836M,所以配置的时候一定要注意。
- V" i" O% \3 K' G0 T并且plln, pllm,pllp,pllq,这些都是有范围限制的,如果配置错误,那么芯片将不会正常运行
' o+ V! l+ B+ \6 P
$ y2 C7 b' S; ]+ o
  1. /*
      E6 |" ~1 a. \/ J1 B- ?
  2. *  时钟设置函数
    ! r+ g2 W% g3 e  a
  3. *  Fvco: VCO 频率2 e& W  t% }9 k6 L. S9 {' s
  4. *  Fsys: 系统时钟频率,也是 PLL1 的 p 分频输出时钟频率
      _! _# v" e4 I% |6 g
  5. *  Fq: PLL1 的 q 分频输出时钟频率$ h6 e! ~- R9 ?3 G
  6. *  Fs: PLL 输入时钟频率,可以是 HSI,CSI,HSE 等. 6 ^  Y6 \/ U- s/ g! @
  7. *  Fvco = Fs *  (plln/pllm) = (Fs/DIVM)*DIVN;2 o# {% ~* i5 i) a# u
  8. *  Fsys = Fvco/pllp = Fs * (plln/(pllm *  pllp));7 B1 l( S4 w9 A% \- c
  9. *  Fq = Fvco/pllq = Fs * (plln/(pllm *  pllq));
    5 J. \5 @0 V2 F' `" L, j: q4 W
  10. * 8 ~# y. W3 S; ?
  11. * - d8 H4 ]/ T  C- R. f& Q1 k
  12. *  plln: PLL1 倍频系数(PLL 倍频),取值范围:4~512.
    7 h' h6 ?' O2 T1 L- H  J
  13. *  pllm: PLL1 预分频系数(进 PLL 之前的分频),取值范围:2~56.
    9 z. @0 o& A; I# m8 Y# l: X
  14. *  pllp: PLL1 的 p 分频系数(PLL 之后的分频),分频后作为系统时钟,取值范围:2~1285 b: o% e8 i# {5 |  a
  15. *  pllq: PLL1 的 q 分频系数(PLL 之后的分频),取值范围:1~128.( C' N7 K6 P$ M3 G( U
  16. *  CPU 频率(rcc_c_ck) = sys_d1cpre_ck = 400Mhz ( R: G; T2 Q! K+ S  \
  17. *  rcc_aclk = rcc_hclk3 = 200Mhz3 C, t- D' K" p7 R% |
  18. *  AHB1/2/3/4(rcc_hclk1/2/3/4) = 200Mhz 3 P3 P5 [+ t' ]
  19. *  APB1/2/3/4(rcc_pclk1/2/3/4) = 100Mhz
    0 A( G1 H0 ~4 s! U) Y2 `6 i
  20. *  FMC 时钟频率  =pll2_r_ck=((25/25) * 512/2) = 256Mhz
    / b4 ^2 y/ g9 ]; N
  21. * 9 q+ e: T2 ?0 R1 M" @5 G
  22. *  Example:9 i4 M+ \# D5 r5 h
  23. *      外部晶振为 25M 的时候,推荐值:plln = 160, pllm = 5, pllp = 2, pllq = 4.
    ! A9 m! F0 h2 u7 ~
  24. *      得到:Fvco = 25 * (160/5) = 800Mhz
    + g, [0 |" F8 p9 ~
  25. *      Fsys = 800/2 = 400Mhz
    $ _% e' o1 ?1 w: R6 P) C2 Q
  26. *      Fq = 800/4 = 200Mhz
    + `  i) F  {8 z5 t
  27. */% ~8 h( V3 i1 X: P& M

  28. 3 [& e6 w3 _: G3 W
  29. #define PLL_N   160
    1 N+ K( h$ y  I
  30. #define PLL_M   5
    5 `1 W! C) q, R& Z! G  l- a
  31. #define PLL_P   2
    $ ~5 I, ~3 c+ f- q; r
  32. #define PLL_Q   4+ }* R+ A" z" P$ [1 V0 s4 Y

  33. 9 H6 Y( J, S' @9 [+ B1 [
  34. // 时钟设置函数
    3 W4 H" x4 `2 N* e# H
  35. static void SystemClock_Config(void)
    2 g! {( w2 X7 O' d( v1 e) i
  36. {7 ~1 l' Q/ F, t
  37.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    6 }2 p/ I  w7 f
  38.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};  T" @9 U& E! {* F& {" }
  39.   HAL_StatusTypeDef ret = HAL_OK;
    2 K; l: }2 U4 z3 g
  40. 8 s* I! y8 V+ `' Z7 R
  41.   /*!< Supply configuration update enable */: i' H* s% M0 x& b/ G: x
  42.   HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);
    9 ?. u+ V% F) d) s
  43. 3 [: g8 A$ T( P# j1 h
  44.   /* The voltage scaling allows optimizing the power consumption when the device is& b9 R, M3 r- s2 z
  45.      clocked below the maximum system frequency, to update the voltage scaling value
    ) p7 h  L" L5 X, `9 U- ]( A3 M
  46.      regarding system frequency refer to product datasheet.  */
    - w4 }9 Y6 K9 Z* B7 j4 }
  47.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
    . i& S' x" o: _1 r
  48. 8 r5 U* _: ?4 s# }' e& A* d  N4 j
  49.   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
    4 G( o/ C/ }+ E
  50. ( f4 V9 l( u' I" b
  51.   /* Enable HSE Oscillator and activate PLL with HSE as source */4 [5 H3 y  t2 u% x2 M7 H( g9 X
  52.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;1 `8 E. k  H2 X1 {  p
  53.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;6 H& v5 F& a) x* O1 B: J5 D0 v1 q1 h
  54.   RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
    + p. ?3 N$ ^* B5 k
  55.   RCC_OscInitStruct.CSIState = RCC_CSI_OFF;* ?) u; S4 Q& j( V3 a* W
  56.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;$ m; `9 A' S. S, T+ E4 W! U
  57.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;! T. R0 D, O5 j' f
  58. 9 M* L; s& a+ W
  59.   RCC_OscInitStruct.PLL.PLLM = PLL_M;
    6 I' q9 k  |( l/ u4 d
  60.   RCC_OscInitStruct.PLL.PLLN = PLL_N;
    * e3 C  g* A# a$ m2 l
  61.   RCC_OscInitStruct.PLL.PLLFRACN = 0;
    & ~- d+ e# _& s9 p  w5 c6 D) y/ G
  62.   RCC_OscInitStruct.PLL.PLLP = PLL_P;
    2 q( I; C4 }% ?$ B( N
  63.   RCC_OscInitStruct.PLL.PLLR = 2;
    ) x. }% h& b9 [: \; Z3 ^9 c6 d
  64.   RCC_OscInitStruct.PLL.PLLQ = PLL_Q;6 |( y( c, \! R; N( j

  65. 9 }6 K# F: A: v& Q8 ~
  66.   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;8 a' M* @2 u: _9 z) Q4 D7 U5 [6 R
  67.   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;2 g" t- g5 P! o7 n
  68.   ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);: J2 [: J* L7 D3 s6 k2 q+ \/ D
  69.   if(ret != HAL_OK)4 X% P* @- y# R. H+ O& _
  70.   {/ M: o% S# N! g
  71.     while(1) {};
    : @3 r- Z+ q; b* u9 t* D
  72.   }
    7 B0 G( L) w8 q8 _* Q
  73. : f; u/ ?: O; R2 F4 r# B3 F' C# s
  74. /* Select PLL as system clock source and configure  bus clocks dividers */
    4 ~- q8 W8 J6 z
  75.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \
    2 F5 Z( D, v+ A7 t6 Q
  76.                                  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);
    ' N) L2 i+ W5 }9 U/ N1 C. X

  77. ( _( n. @: m# _
  78.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    , t$ Q6 F. t. h+ C
  79.   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;! F2 i2 G' h* M2 G6 }0 R- e
  80.   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
    / G$ m) {( }1 P! J4 d3 b* A, _* _
  81.   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;: @8 e2 w% V. O. O3 C
  82.   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;& J' b2 V0 R7 [: N
  83.   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
    * W! }3 p. g  g+ O; g: C  ^
  84.   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
    ' r/ I1 \- m: l! y3 S& P, ]6 t
  85.   ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);% e& L: j, ~1 d3 E) R! ^* c& Y+ `8 R
  86.   if(ret != HAL_OK)5 M( Q# `; m5 C0 {5 k/ ?
  87.   {3 u9 q. _9 X- I, u) A
  88.     while(1) {};
    - {) Z9 n$ D5 |( Q! v; W1 q
  89.   }
    6 b( l+ J4 d# {& |) n! ?
  90. ( |2 X" M5 ]% |! _6 r: p
  91. }
    . @- i1 ?7 T" y9 ]3 n
复制代码
9 O4 Z; `' d+ i- U, R, G, _
0 u. D+ t. W4 f
赞 收藏 评论0 发布时间:2021-12-22 13:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版