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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:46
STM32H7时钟配置问题3 E% S. g/ ^; _; ~+ _, t
设备:stm32h735VGxxx
* y2 q4 Z3 x7 b* L: m# v5 S8 o' Y# @9 p4 N5 @; w
问题:STM32时钟配置不正确,一直没法启动。5 |( d6 _: Y5 d! J; S7 b1 l

# L, H' x0 Z. w- |: V' Z: r解决:原因是配置时钟的一些参数超出的范围,所以配置导致不成功。
  ?$ X3 f' [) t9 {3 K- J# q
- K/ v1 ^& Q( c8 S# u8 {" v下面是H735的时钟的一些解释,其中 Fvco 是有范围的,这边从文档上面查到,FVCO的最大配置值为836M,所以配置的时候一定要注意。) b7 h$ [  i1 o& }! `
并且plln, pllm,pllp,pllq,这些都是有范围限制的,如果配置错误,那么芯片将不会正常运行# x# |" \! y0 ^' P
$ F/ V$ |$ F, @9 w8 i4 l
  1. /*
    . F( v  U* ^" \% v9 P
  2. *  时钟设置函数
    % _* m1 M# t! |' |
  3. *  Fvco: VCO 频率
    2 D9 E9 k% R. y& ^
  4. *  Fsys: 系统时钟频率,也是 PLL1 的 p 分频输出时钟频率: V  C7 }7 b( V) C
  5. *  Fq: PLL1 的 q 分频输出时钟频率
    $ \0 O7 I, w# \8 L
  6. *  Fs: PLL 输入时钟频率,可以是 HSI,CSI,HSE 等.
    * m8 v) q# J3 Z) U
  7. *  Fvco = Fs *  (plln/pllm) = (Fs/DIVM)*DIVN;
    6 n. g  k# ?; X
  8. *  Fsys = Fvco/pllp = Fs * (plln/(pllm *  pllp));
    $ `1 R, s7 p/ w1 Y
  9. *  Fq = Fvco/pllq = Fs * (plln/(pllm *  pllq));% Z- [5 w+ j- q, B4 l
  10. *
    * O5 L$ e. _$ ?: R% m4 R) Y
  11. *
    / e$ w" A2 o6 U) @
  12. *  plln: PLL1 倍频系数(PLL 倍频),取值范围:4~512.
    / x) r) l3 T1 `; ?6 e
  13. *  pllm: PLL1 预分频系数(进 PLL 之前的分频),取值范围:2~56.! x! M5 N+ E6 g$ S' `% y
  14. *  pllp: PLL1 的 p 分频系数(PLL 之后的分频),分频后作为系统时钟,取值范围:2~128
    9 d4 ^- E0 m8 G! Z
  15. *  pllq: PLL1 的 q 分频系数(PLL 之后的分频),取值范围:1~128.) ^$ U% _6 n* o7 P/ H
  16. *  CPU 频率(rcc_c_ck) = sys_d1cpre_ck = 400Mhz * B4 T; |% J% E" A9 _
  17. *  rcc_aclk = rcc_hclk3 = 200Mhz
    $ v$ p' C8 B6 h+ l$ V  a: {; b
  18. *  AHB1/2/3/4(rcc_hclk1/2/3/4) = 200Mhz + @( M! N" C. D; c- J
  19. *  APB1/2/3/4(rcc_pclk1/2/3/4) = 100Mhz 5 ?+ e; r$ R; P7 Z/ E8 c) |
  20. *  FMC 时钟频率  =pll2_r_ck=((25/25) * 512/2) = 256Mhz
    ' s) S/ M& p* q
  21. * - R* K( \: X' B( R( }- u9 k0 x
  22. *  Example:
    + H+ y1 ^7 s) T. R  }
  23. *      外部晶振为 25M 的时候,推荐值:plln = 160, pllm = 5, pllp = 2, pllq = 4.5 B3 }. ]9 m: I5 r3 c
  24. *      得到:Fvco = 25 * (160/5) = 800Mhz0 ]6 @; \9 A7 H. S. w6 z2 `' g
  25. *      Fsys = 800/2 = 400Mhz$ {) o) c( b' @( q
  26. *      Fq = 800/4 = 200Mhz
    ' P4 |- b/ T; N# u) ?
  27. */4 y6 w7 H7 U  D+ ]
  28. 2 w' W; c) N5 _- L3 j9 g8 N
  29. #define PLL_N   160' ?8 H4 O$ C: Q
  30. #define PLL_M   5
    9 z* b; [( K2 `. o. h0 X
  31. #define PLL_P   22 G" U' [: @" n$ N  i$ f
  32. #define PLL_Q   4: c5 }4 N% S8 n6 L5 u, ^/ {0 j
  33. - C( H9 k2 _* r8 F4 X8 k5 M' B
  34. // 时钟设置函数
    9 h8 u5 }. A" z. R; K
  35. static void SystemClock_Config(void)
    9 o6 I8 @8 U; V8 S' J
  36. {, h9 E) [8 L+ ]$ L- p
  37.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    ; x1 c! z- j  Q
  38.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};: G$ d+ o$ @+ Z3 e
  39.   HAL_StatusTypeDef ret = HAL_OK;0 p- d6 h3 S$ o4 I  O4 V. n- X
  40. 4 w- l" C0 x8 a
  41.   /*!< Supply configuration update enable */
    2 \2 ?; p5 R7 S7 x
  42.   HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);/ p. Y! |# g& m
  43. 0 k+ _: `4 B+ ]& X; g% X5 Y0 j  I
  44.   /* The voltage scaling allows optimizing the power consumption when the device is
    , x* ~( v7 F4 ?. z* h, X7 D
  45.      clocked below the maximum system frequency, to update the voltage scaling value
    1 j# \6 ^; X) j8 B
  46.      regarding system frequency refer to product datasheet.  */
    4 a+ e9 ^3 z4 r6 ^
  47.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);. N! S" x6 j5 r  N+ R- W
  48. : L1 |# v6 v9 O; S0 E8 P
  49.   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}3 t4 |/ N( W1 L( i: t& I. W
  50. # z3 Y9 e( [. C% q' Q
  51.   /* Enable HSE Oscillator and activate PLL with HSE as source */
    , _4 s8 u- {8 [) [; r! |1 D( {- I
  52.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;( o( g8 x+ J5 g
  53.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;- g- X2 M8 l, \3 m* \/ Z( Q
  54.   RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
    , O1 [7 ?5 {; A; g
  55.   RCC_OscInitStruct.CSIState = RCC_CSI_OFF;
    ( k0 ~3 a1 l9 U$ }4 ]
  56.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    : X7 r% y9 }$ y  _- Q0 ]; J* F0 b; l
  57.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    ) w7 x( F5 V8 w! ]
  58. ) s& ]+ ]9 f2 q, e2 c
  59.   RCC_OscInitStruct.PLL.PLLM = PLL_M;8 d8 v2 z& t& }5 {9 o0 P
  60.   RCC_OscInitStruct.PLL.PLLN = PLL_N;
    + E' A+ z) P: g8 V$ g- P
  61.   RCC_OscInitStruct.PLL.PLLFRACN = 0;
    1 O# }5 s5 G! j" t9 G
  62.   RCC_OscInitStruct.PLL.PLLP = PLL_P;0 E4 Q8 l- F  F& s4 @" x, R" y
  63.   RCC_OscInitStruct.PLL.PLLR = 2;% `# n  z8 e# Z
  64.   RCC_OscInitStruct.PLL.PLLQ = PLL_Q;; f! Q4 @, W- Z+ v2 g

  65. 3 v+ X% f) N7 H* n+ C
  66.   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
    / q4 T9 R6 o1 c
  67.   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;- T5 S$ F; s" i" Y
  68.   ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);
    4 y$ F/ ^: s' w$ B
  69.   if(ret != HAL_OK); r/ O% c( D/ A6 q4 c& c2 G  b  f
  70.   {# O4 {9 a/ A& y/ ?* N" |* h
  71.     while(1) {};0 R; B9 u0 N0 w& d9 u. m4 u
  72.   }
    " n9 ~, c( w! ~5 [
  73. 3 L% Z; P+ `" r# \
  74. /* Select PLL as system clock source and configure  bus clocks dividers *// e5 H0 X9 z/ y2 x: e' ?
  75.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \
    8 q' E* ~: `! N2 D
  76.                                  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);
    7 d  t% h* T- j9 n+ M
  77. / o- Q% J5 F, ?2 V- d$ n! N8 }
  78.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    8 C: s0 P. j8 d; L; z# B
  79.   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
    0 ?+ w7 @1 F. ]% X5 d! u' ~8 `8 C
  80.   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;' a' u. }3 T& X  U# c
  81.   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
    ' p$ r( h; \; m
  82.   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
    0 O. `5 c0 v' m
  83.   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
    ( z+ `, v7 h9 T0 w2 O# w; p: T
  84.   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;8 o! e& j3 D2 G7 \
  85.   ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
    2 h; y% A5 D6 ~
  86.   if(ret != HAL_OK)0 e2 ?" \6 q% A9 ?% o
  87.   {) F! }# v- V1 r. {1 B# A
  88.     while(1) {};, Z& a- Q0 n  J1 [' N) p# l
  89.   }: s! F3 a, N1 ~  c  V1 E
  90. 1 s: c7 {# z& M# k; I( q( P9 k
  91. }
    * k  ^% R4 R( I% ]) v7 [
复制代码
; F. J/ D4 l% o7 N' `3 ~5 Q% Q5 k" O

/ a. u2 L) B$ y; g7 V1 ]5 v7 X
收藏 评论0 发布时间:2021-12-22 13:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

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