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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:46
STM32H7时钟配置问题
+ z2 m$ B/ t# Q& T设备:stm32h735VGxxx
, ^' B% K9 d2 c  N- f* a) D, m
$ }& B. g5 N. W: V4 }8 K; ]问题:STM32时钟配置不正确,一直没法启动。# k# R; Q; Q+ `) j7 n
( g. _7 o" M) B6 @/ s
解决:原因是配置时钟的一些参数超出的范围,所以配置导致不成功。4 b5 Z) }1 |3 [
3 l* `' w' s$ H7 R
下面是H735的时钟的一些解释,其中 Fvco 是有范围的,这边从文档上面查到,FVCO的最大配置值为836M,所以配置的时候一定要注意。, U; B2 S& G3 M
并且plln, pllm,pllp,pllq,这些都是有范围限制的,如果配置错误,那么芯片将不会正常运行7 _4 [6 c4 p7 b, ?3 p9 r
* B8 Z" c! I' a  q$ l
  1. /*
    - T  E$ \1 w2 _4 S+ ^
  2. *  时钟设置函数
    ! z, I- Y( ]% b8 B
  3. *  Fvco: VCO 频率% d( Z( k# s( M  v; N) [) M
  4. *  Fsys: 系统时钟频率,也是 PLL1 的 p 分频输出时钟频率
    # A4 W' ~3 Q3 N( m9 S( @
  5. *  Fq: PLL1 的 q 分频输出时钟频率3 ~1 d* P2 e! J8 _- s  P8 R
  6. *  Fs: PLL 输入时钟频率,可以是 HSI,CSI,HSE 等.
    8 Q% l3 n$ j  f/ F6 _
  7. *  Fvco = Fs *  (plln/pllm) = (Fs/DIVM)*DIVN;) B/ q( T6 O" F/ S  X* K$ y
  8. *  Fsys = Fvco/pllp = Fs * (plln/(pllm *  pllp));
    3 N" {/ ?3 @3 e, P
  9. *  Fq = Fvco/pllq = Fs * (plln/(pllm *  pllq));. d3 h9 B8 k, O% E9 [$ [
  10. * $ K5 w2 o- K; m; Z% B2 P1 V
  11. * $ a" C9 n3 a" K' j; j5 M
  12. *  plln: PLL1 倍频系数(PLL 倍频),取值范围:4~512.
    $ ]6 S1 i) G- I: {, `% _! S
  13. *  pllm: PLL1 预分频系数(进 PLL 之前的分频),取值范围:2~56.! [: e* x9 E/ I, j
  14. *  pllp: PLL1 的 p 分频系数(PLL 之后的分频),分频后作为系统时钟,取值范围:2~128+ n" I+ g7 g/ n
  15. *  pllq: PLL1 的 q 分频系数(PLL 之后的分频),取值范围:1~128.: C9 t" o) J( Q1 [, R- B. _
  16. *  CPU 频率(rcc_c_ck) = sys_d1cpre_ck = 400Mhz 9 n) @) Z. M. N& |& i; h& n* d4 p
  17. *  rcc_aclk = rcc_hclk3 = 200Mhz
    8 g& x- J- k1 d" q. J  [" x
  18. *  AHB1/2/3/4(rcc_hclk1/2/3/4) = 200Mhz
    $ W& P3 h  t$ m9 a# u- k- J
  19. *  APB1/2/3/4(rcc_pclk1/2/3/4) = 100Mhz 9 H7 `! z& {$ K" @9 l  ]
  20. *  FMC 时钟频率  =pll2_r_ck=((25/25) * 512/2) = 256Mhz
    " G* p3 k$ q+ w( D1 o$ Z
  21. * % A; P( y2 |; E2 O8 r
  22. *  Example:
    0 b4 G) S0 N( V7 x; t
  23. *      外部晶振为 25M 的时候,推荐值:plln = 160, pllm = 5, pllp = 2, pllq = 4.
    , g- l2 O9 U. b2 P. c
  24. *      得到:Fvco = 25 * (160/5) = 800Mhz" [- B& _( R" Q( `) h
  25. *      Fsys = 800/2 = 400Mhz
    1 m% p  d# }. M  P  \: h0 x, ]
  26. *      Fq = 800/4 = 200Mhz! P, [9 g6 y4 J' L! |8 R( B$ |
  27. */
    0 V: w- O" C1 W& }) Y; }" g

  28. 3 E* ?! I2 l2 [! O7 n& I
  29. #define PLL_N   160
    8 A( m/ u1 I- \
  30. #define PLL_M   5
    " E( S. G) I  ?7 N
  31. #define PLL_P   2% Q7 {8 X$ b: b: W3 O. P
  32. #define PLL_Q   4
    # Q, k5 Q7 C% @, h

  33. ) m  d2 I( n( `
  34. // 时钟设置函数6 H* B% G; l# a- O9 b% H% l
  35. static void SystemClock_Config(void)
    8 O' {7 q/ G* a7 m3 h
  36. {* ^3 K" P0 o$ `
  37.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};3 |( `* X- ~5 C2 W& {
  38.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};( R2 {: J) N0 Q% Z- k
  39.   HAL_StatusTypeDef ret = HAL_OK;
    " S* Z6 V* a8 t2 m4 `+ R" v

  40. ( `5 K8 b3 w! `' y) A
  41.   /*!< Supply configuration update enable */0 C' Q4 J7 H* y5 ?3 j4 Q
  42.   HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);
    $ Z; j9 o( v3 P6 x9 K

  43. 3 P1 q6 r4 ^+ Y6 m8 S# H: J6 S
  44.   /* The voltage scaling allows optimizing the power consumption when the device is
    ( j) p. S. {( }. [- v- d% e
  45.      clocked below the maximum system frequency, to update the voltage scaling value' C7 ?$ F# F; i
  46.      regarding system frequency refer to product datasheet.  */4 F" z: A9 s  F% E' W% d
  47.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);
    ' P& @, w( d/ x6 G  H& G' Q

  48. * u7 L& b; y+ g$ T- Y$ P: i$ f
  49.   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}6 h9 ]  z/ o! l+ R

  50. 2 Y4 m7 K3 @3 k
  51.   /* Enable HSE Oscillator and activate PLL with HSE as source */
    6 t, y2 Q, o. |; s
  52.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;, }- {% q$ ^5 l6 T2 D
  53.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;% G$ M% b6 r+ U5 Q1 ]" q
  54.   RCC_OscInitStruct.HSIState = RCC_HSI_OFF;. U2 a. ~- H( t8 {2 A. @8 j
  55.   RCC_OscInitStruct.CSIState = RCC_CSI_OFF;# i& `3 h  {# g; b
  56.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    9 G  f' i) _5 [- V
  57.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;  g# D- A0 F7 y! u

  58. $ x8 r" E8 z- }
  59.   RCC_OscInitStruct.PLL.PLLM = PLL_M;( p' b6 f9 M9 Z( b
  60.   RCC_OscInitStruct.PLL.PLLN = PLL_N;
    8 m5 q3 D8 r4 S6 K0 P4 B
  61.   RCC_OscInitStruct.PLL.PLLFRACN = 0;
    $ r: ^+ R' Y. ^/ c0 R0 J9 T
  62.   RCC_OscInitStruct.PLL.PLLP = PLL_P;
      u' Y  K5 r  h! T
  63.   RCC_OscInitStruct.PLL.PLLR = 2;
    & ?$ P9 \% J% S- V( I
  64.   RCC_OscInitStruct.PLL.PLLQ = PLL_Q;
    $ W  Q) T% f" j- p- q
  65. + f' t' y% C6 T# o! S+ E& X# d) \& J
  66.   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;) V( B$ Z; V, D9 y+ ], N% Z
  67.   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;) B4 |) R* g1 W" j
  68.   ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
    * I7 J& U" w0 y- D- [# W  y5 {0 q7 m5 t
  69.   if(ret != HAL_OK)
    ' |; Q+ b0 }# l
  70.   {0 w! x2 @  x% O; p# Y0 `6 n, l
  71.     while(1) {};! d8 X2 m) n# j
  72.   }; a. J: p6 L) L7 O

  73. $ i. t3 U! q( g2 t* S
  74. /* Select PLL as system clock source and configure  bus clocks dividers */( {7 [6 }7 l5 z  ^, Y5 \. \
  75.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \' Q# ^! U. x& v
  76.                                  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);0 T& ?$ ?2 a, Q. @/ |$ q
  77. 8 R  `2 D5 _: E/ f/ V9 s
  78.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;. j4 ]0 u% O; n& m5 f
  79.   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;, G) Y( j0 m# P3 y+ Y4 \
  80.   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;# J3 W& P/ S* r
  81.   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
    " G! g+ g9 ?' P; Q
  82.   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;! H% P3 p: M' t' d6 H# m  N
  83.   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;4 u9 ]. \) l: Y; V' Z
  84.   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;7 x- h, _2 L# e1 i' B; Q& S" h
  85.   ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);2 v& W' S$ Z/ z. G0 U  d: s' T
  86.   if(ret != HAL_OK)1 e, E9 o8 ~7 z9 o" _4 d
  87.   {2 N" w( s) U4 N2 }  X
  88.     while(1) {};# T) z8 U$ \- {% g/ m* S8 {! Q
  89.   }
    ; y3 m# Q+ g- A1 h8 w! g
  90. $ V) X/ R+ i2 D7 G
  91. }
    & A" E! W( W& J) C) |
复制代码

2 ?2 C$ E$ c3 T, I
& n8 i0 b8 @7 u7 C, f9 U* o( I- M/ l
收藏 评论0 发布时间:2021-12-22 13:46

举报

0个回答

所属标签

相似分享

官网相关资源

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