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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:46
STM32H7时钟配置问题9 v9 F" g2 u5 {, ]& R; W* z
设备:stm32h735VGxxx
; x4 j3 Z, h% s3 c" t) T/ K' y7 {' A$ m8 h; ?9 J
问题:STM32时钟配置不正确,一直没法启动。  d( y7 y* H$ v

5 @, s! ]0 w  p; \$ Z解决:原因是配置时钟的一些参数超出的范围,所以配置导致不成功。: A& |$ ~8 U; |) L0 k9 ]5 K! a

! N- w8 C, g! {' j. k. F( p6 z/ f4 M下面是H735的时钟的一些解释,其中 Fvco 是有范围的,这边从文档上面查到,FVCO的最大配置值为836M,所以配置的时候一定要注意。
8 ?* K& [- ?' ?并且plln, pllm,pllp,pllq,这些都是有范围限制的,如果配置错误,那么芯片将不会正常运行8 e4 C3 g; B. d' P/ ]  w% ?+ p

; G; `8 c( @5 C3 j, l9 U' A
  1. /*
    4 a8 X$ g8 |# J' y/ h! J
  2. *  时钟设置函数3 G& A% m1 S# r& a8 X( T7 E* `- g
  3. *  Fvco: VCO 频率
    6 Y7 ]! ]% W. D0 v4 J. |
  4. *  Fsys: 系统时钟频率,也是 PLL1 的 p 分频输出时钟频率
    * ~1 e2 m# Z# Y7 @7 \
  5. *  Fq: PLL1 的 q 分频输出时钟频率
      c. f# V# M# o" `7 @  j( b4 [+ P
  6. *  Fs: PLL 输入时钟频率,可以是 HSI,CSI,HSE 等. 1 Z  v! r4 q' o( V; A
  7. *  Fvco = Fs *  (plln/pllm) = (Fs/DIVM)*DIVN;0 p$ S+ v8 z& q* |
  8. *  Fsys = Fvco/pllp = Fs * (plln/(pllm *  pllp));2 I3 u4 Z" L4 w
  9. *  Fq = Fvco/pllq = Fs * (plln/(pllm *  pllq));; t9 z( [: d5 E
  10. *
    1 j, b( W8 v6 ]8 n* M6 {9 I
  11. * ' r# ^# `- y- R1 X: L6 E
  12. *  plln: PLL1 倍频系数(PLL 倍频),取值范围:4~512.
      G. y& C! Y# w- N0 y
  13. *  pllm: PLL1 预分频系数(进 PLL 之前的分频),取值范围:2~56.6 `2 o* u4 \! L8 l! h
  14. *  pllp: PLL1 的 p 分频系数(PLL 之后的分频),分频后作为系统时钟,取值范围:2~128
      l1 }. ~. s8 w: S8 w) r
  15. *  pllq: PLL1 的 q 分频系数(PLL 之后的分频),取值范围:1~128.: Z$ x, j( n4 Y& Q2 X: Y% g, b# h
  16. *  CPU 频率(rcc_c_ck) = sys_d1cpre_ck = 400Mhz
    ) z$ N# i' O, w, i& s
  17. *  rcc_aclk = rcc_hclk3 = 200Mhz
    2 f4 T- |+ X( d: c
  18. *  AHB1/2/3/4(rcc_hclk1/2/3/4) = 200Mhz
    8 Z' O! W! z$ S2 B; y" v5 x$ s
  19. *  APB1/2/3/4(rcc_pclk1/2/3/4) = 100Mhz / C, O& Z9 @4 D0 t
  20. *  FMC 时钟频率  =pll2_r_ck=((25/25) * 512/2) = 256Mhz
    ' E" k5 j3 j$ p* r8 @
  21. *
    2 O1 I4 [5 _9 l$ J! x' _( Q. ]
  22. *  Example:$ Y6 D$ b6 M9 x* c6 s* N* e+ O6 o
  23. *      外部晶振为 25M 的时候,推荐值:plln = 160, pllm = 5, pllp = 2, pllq = 4.
    , f" }) R5 n! e: l9 d/ f9 c
  24. *      得到:Fvco = 25 * (160/5) = 800Mhz  z; \3 |% N& D. S( |! d2 f; H
  25. *      Fsys = 800/2 = 400Mhz
    ' d' H* H0 t" i4 Q; n
  26. *      Fq = 800/4 = 200Mhz5 D4 v! d+ F2 E* n
  27. */
    # F& h: e7 M2 m& P, A
  28. 4 _3 \) ~5 E1 @- n) O' Z6 w) h8 `5 ^
  29. #define PLL_N   160- H( s! E- @. o$ u8 h7 p
  30. #define PLL_M   57 F( p( U; \/ N8 m, a8 |: O6 ^
  31. #define PLL_P   22 ~8 d- d8 e" d& U7 G
  32. #define PLL_Q   4
    / C6 I5 w# p' Y7 E* Z
  33. 2 t+ p$ E) n5 `5 B  n% u
  34. // 时钟设置函数
      R  x- ~  V' U8 B, A0 e9 e
  35. static void SystemClock_Config(void). ]  L- Y6 |- E( F. D" W; B5 T+ A3 H
  36. {6 u( U; C& U" a( v  r* C; F# S
  37.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    / Z4 y3 A! B- f& ?% }! \
  38.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};0 V5 x5 v/ [3 }. w5 q
  39.   HAL_StatusTypeDef ret = HAL_OK;7 W1 Z, }0 x0 M/ |% _  G4 S

  40. ' N) Q; j$ ]: D9 I1 k. h
  41.   /*!< Supply configuration update enable */6 i; Q( V7 Z; T# z9 J" C
  42.   HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);$ O1 J% {1 ?1 f1 J

  43. 8 X: c' ]% c' y( R6 j$ \
  44.   /* The voltage scaling allows optimizing the power consumption when the device is
    ( y5 ]& b7 o, a5 d7 X
  45.      clocked below the maximum system frequency, to update the voltage scaling value
    : G6 [" z! q0 H; S5 J
  46.      regarding system frequency refer to product datasheet.  */
    , C; S1 B9 m$ O; H2 c
  47.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
    - P- ^+ F, o+ P
  48. ' u5 c( \, @2 W: ]7 C: g% W2 U  S, b
  49.   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}" ?. g8 J0 e, y$ E- R, h# q+ s% X
  50. ' Z- Q8 j  a; \1 W; N" G6 [
  51.   /* Enable HSE Oscillator and activate PLL with HSE as source */
    : [; ?3 C& x4 w4 B4 O3 L& E- e) h7 s
  52.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    7 m; p5 l8 H' M4 r4 A+ j6 c+ y8 e
  53.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    5 y* h2 U+ f* y' G% i
  54.   RCC_OscInitStruct.HSIState = RCC_HSI_OFF;1 M& k# a. t6 z1 B' u
  55.   RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
    ! c$ k: m1 ]1 ?& n/ ^) {% |
  56.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;1 Z! x/ H- m+ C( J! A6 ]
  57.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;+ B$ w' ?+ T, ^+ a1 P; l$ ^

  58. ' ?; D/ S6 i0 l
  59.   RCC_OscInitStruct.PLL.PLLM = PLL_M;' f7 T! Q% G. E8 V# h& l+ g
  60.   RCC_OscInitStruct.PLL.PLLN = PLL_N;/ K9 T- T4 o7 b5 c' X$ v1 ?1 s
  61.   RCC_OscInitStruct.PLL.PLLFRACN = 0;7 T0 V/ a" T5 j* h: N9 @
  62.   RCC_OscInitStruct.PLL.PLLP = PLL_P;+ B) j; X0 N. P5 B
  63.   RCC_OscInitStruct.PLL.PLLR = 2;
    ; H# K  P* |+ I, v4 J; @
  64.   RCC_OscInitStruct.PLL.PLLQ = PLL_Q;
    . E5 v  d8 J" x+ C

  65. / l, p* R! h0 N1 k* y. y. r
  66.   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;9 k7 Z; l3 n* L8 _, d2 n$ b
  67.   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
    0 l) b! v- A+ w3 [
  68.   ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);$ M7 i, q0 `) C" N8 P7 B4 I
  69.   if(ret != HAL_OK)/ d4 b! s, q3 J# e
  70.   {
    , P- g& z  g6 t6 S' T6 F; ?
  71.     while(1) {};( a3 O2 D$ k6 V
  72.   }
    : }, o$ G) n& \' y& _
  73. 0 \) E" g, }) H
  74. /* Select PLL as system clock source and configure  bus clocks dividers */  g, |& U8 U6 G' e0 t7 w
  75.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \- I+ ?. {9 P/ [2 j+ {
  76.                                  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);9 S" s+ B9 T. w
  77. % A1 F8 B( m* @
  78.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;0 i9 e: K/ H8 B* b3 m3 j1 c% a3 G# A
  79.   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
    7 |+ L: z: I2 `. B$ K9 _
  80.   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;) v. G: S8 a8 w4 H% z: e
  81.   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
    2 D; D, @3 v& R
  82.   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
      O0 M! Z- I3 F8 R7 H' N9 t
  83.   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;3 Q1 K( q3 a2 C2 T- I. R8 C- F
  84.   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;: D5 m/ w7 S$ F4 W8 p2 x) Z
  85.   ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
    , o& [4 A) }" F+ T6 o
  86.   if(ret != HAL_OK)" R$ ^( O4 i  V: ~- b0 U
  87.   {- M+ i% Z' ~$ S: o6 b# M8 e9 u
  88.     while(1) {};
    ! t9 g3 V4 j5 b% E3 d+ h4 t
  89.   }% E. Q* O: c, @8 Q
  90. 5 ~" p/ i; C" m  G% F) d2 P
  91. }$ a3 m5 Q+ u1 d# b7 B3 d8 ^7 M
复制代码

3 S: p$ H) u: G
* L; I. v3 f# |8 Z8 @+ g1 n
收藏 评论0 发布时间:2021-12-22 13:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

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