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

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

[复制链接]
STMCU小助手 发布时间:2021-12-22 13:46
STM32H7时钟配置问题5 L5 q8 B2 h$ S$ r7 }, c
设备:stm32h735VGxxx
% D8 L- f3 Z" A7 t5 z; x2 k
( W" D1 m6 [% w8 c& }问题:STM32时钟配置不正确,一直没法启动。6 K( y; A- l! p: ]8 Q' X
+ n* p8 E3 I0 B+ c7 K
解决:原因是配置时钟的一些参数超出的范围,所以配置导致不成功。
4 L1 \4 \5 W* @. \$ K& I- U* }' T2 {# Z3 L
下面是H735的时钟的一些解释,其中 Fvco 是有范围的,这边从文档上面查到,FVCO的最大配置值为836M,所以配置的时候一定要注意。
# \7 _3 F; n2 n1 b并且plln, pllm,pllp,pllq,这些都是有范围限制的,如果配置错误,那么芯片将不会正常运行5 H4 J* I+ B1 u, w. c+ y

9 i. o) ?4 w9 N/ }% r4 z
  1. /*+ p& ^- s" \$ j8 v3 Y
  2. *  时钟设置函数6 n' g0 u- U& [! o4 y
  3. *  Fvco: VCO 频率
    3 X- ^) @/ S0 h7 `& g% L+ X
  4. *  Fsys: 系统时钟频率,也是 PLL1 的 p 分频输出时钟频率: N+ {/ l" t5 W- w
  5. *  Fq: PLL1 的 q 分频输出时钟频率
    & L' M! h3 L% b9 o% v. S5 G, d
  6. *  Fs: PLL 输入时钟频率,可以是 HSI,CSI,HSE 等.
    , @! M# d& |" w/ d8 F* b, |, K
  7. *  Fvco = Fs *  (plln/pllm) = (Fs/DIVM)*DIVN;
    ; o2 w+ O$ V2 Y! b7 d7 A9 k
  8. *  Fsys = Fvco/pllp = Fs * (plln/(pllm *  pllp));
    6 A& ^# C9 ]1 M0 L  E+ P7 i% Q
  9. *  Fq = Fvco/pllq = Fs * (plln/(pllm *  pllq));
    5 Z' q% q, P% D. F$ s# f/ z/ t  O
  10. * / w1 f* c* f: q3 O2 i2 L
  11. * + S7 _( V) X& h, E% ?( n% c
  12. *  plln: PLL1 倍频系数(PLL 倍频),取值范围:4~512.
    : a" ~6 D( \9 }9 n8 h
  13. *  pllm: PLL1 预分频系数(进 PLL 之前的分频),取值范围:2~56.  ?0 B2 `* \6 v; N3 a% f
  14. *  pllp: PLL1 的 p 分频系数(PLL 之后的分频),分频后作为系统时钟,取值范围:2~128
    $ y" e! U0 s0 v& e
  15. *  pllq: PLL1 的 q 分频系数(PLL 之后的分频),取值范围:1~128.
    ! t9 \5 j% L4 H& x7 |" l
  16. *  CPU 频率(rcc_c_ck) = sys_d1cpre_ck = 400Mhz & V8 F: F; T9 Z: @5 g
  17. *  rcc_aclk = rcc_hclk3 = 200Mhz( i4 ]8 I4 k" E* D1 x2 G! ^
  18. *  AHB1/2/3/4(rcc_hclk1/2/3/4) = 200Mhz
    8 }" K- t% a3 z! Z: x, x! U$ V% g% `
  19. *  APB1/2/3/4(rcc_pclk1/2/3/4) = 100Mhz % Q3 Y  m, T9 E/ K6 s
  20. *  FMC 时钟频率  =pll2_r_ck=((25/25) * 512/2) = 256Mhz$ G" _6 w/ d; O) x. A: h
  21. * " e  k; B! I+ Y8 @  H9 T, w
  22. *  Example:
    : D' h0 y$ c! n" a% A3 }* l) d+ j; x
  23. *      外部晶振为 25M 的时候,推荐值:plln = 160, pllm = 5, pllp = 2, pllq = 4.
    $ m! T- G8 m! H7 L
  24. *      得到:Fvco = 25 * (160/5) = 800Mhz
    3 _1 U. x! W3 T: K$ c; p
  25. *      Fsys = 800/2 = 400Mhz9 B& n" O% m1 `1 r" P; C6 q
  26. *      Fq = 800/4 = 200Mhz# _" R3 L  v) z, y& R- x4 g: u) z1 `' _
  27. */
    ) Q  p+ a' C1 X  _5 t

  28. ( y- {4 E; U9 l2 T, w! C- {: I
  29. #define PLL_N   160
    ! l/ l3 Y- W( W
  30. #define PLL_M   54 S" I/ b4 k5 q! ]. e
  31. #define PLL_P   2
    ( Y2 `! i, F/ V! }
  32. #define PLL_Q   47 ~+ L) d1 q  |, Y
  33. ! d1 D( N) ?+ C
  34. // 时钟设置函数
    $ K7 e. ^4 D' R; m6 `; J. q
  35. static void SystemClock_Config(void)# |* S6 z; \6 }# Y  ?
  36. {$ ^/ ^' C! z, w+ w
  37.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};. D7 d, P! f# }. g# ^7 [% \8 Y/ U
  38.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};4 @; C" w9 k' r
  39.   HAL_StatusTypeDef ret = HAL_OK;
    2 c" k, e$ ~+ P& p" g8 g' x* x
  40. 3 D: q3 X8 \  P3 C
  41.   /*!< Supply configuration update enable */3 d3 }4 j7 L5 w1 R6 a* U
  42.   HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY);4 f( m) M7 m# m- W6 \: }7 r6 f( z

  43. 8 S! f# [* a$ Q! P1 R" E. K7 z- y
  44.   /* The voltage scaling allows optimizing the power consumption when the device is
    & X4 o" W2 _8 i% Q) a' B0 w
  45.      clocked below the maximum system frequency, to update the voltage scaling value
    5 l. K  F; t; C2 y4 c
  46.      regarding system frequency refer to product datasheet.  */8 \  |$ K% G9 `/ `$ j) N
  47.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0);# l* Z; f3 ~6 N, i5 I' p1 u( n

  48. $ L" ]( W1 M" t( _/ _) U' o" D
  49.   while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
    ' |1 g: J2 o6 ?. ]5 c0 T

  50. ) R0 t4 g1 E! T2 n7 G" g
  51.   /* Enable HSE Oscillator and activate PLL with HSE as source */
    7 _. q& v& X- N9 Y
  52.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;$ x- g; u8 Y9 m$ b
  53.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    , n- O9 N& f# M
  54.   RCC_OscInitStruct.HSIState = RCC_HSI_OFF;6 E1 ^( M5 M% K0 m/ ~  ?
  55.   RCC_OscInitStruct.CSIState = RCC_CSI_OFF;; P. d6 j# |, o/ q" x
  56.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    0 f. d7 I$ v  E9 L. V6 R" O5 B
  57.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;8 W7 d2 O8 S5 R# p, H1 [& T+ l0 o
  58. " D( o, q" {7 I/ S( o  I" P6 s
  59.   RCC_OscInitStruct.PLL.PLLM = PLL_M;) G# P! ~6 C6 f
  60.   RCC_OscInitStruct.PLL.PLLN = PLL_N;1 ]* k, C# A0 N
  61.   RCC_OscInitStruct.PLL.PLLFRACN = 0;
    1 i8 M+ C/ d0 J  ~
  62.   RCC_OscInitStruct.PLL.PLLP = PLL_P;
    ! y- K: }5 x4 p/ p
  63.   RCC_OscInitStruct.PLL.PLLR = 2;9 C/ i1 a! N, p, c. G+ C
  64.   RCC_OscInitStruct.PLL.PLLQ = PLL_Q;" `, X$ n; b5 l5 y# K) n
  65. 3 Y2 I: x5 m7 j0 K; L+ j% Z
  66.   RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;# z# B( b; m" E* c3 }' g7 ]
  67.   RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
    8 g3 E  D) a  |4 N- M. O( n1 l
  68.   ret = HAL_RCC_OscConfig(&RCC_OscInitStruct);- p2 e- M  T) {
  69.   if(ret != HAL_OK)9 m* z/ A( k" C$ @6 o/ v6 w) ?9 C
  70.   {
    $ \" |- U" g9 E$ o4 y( Y4 r
  71.     while(1) {};
    ! S5 m0 J) Z) w: U5 D6 _
  72.   }
    7 k+ B& c& P; [" ?* V, g" k  f6 u
  73. 2 E7 T7 G9 o( M5 s9 v6 r! z- w
  74. /* Select PLL as system clock source and configure  bus clocks dividers */' c2 t1 ?* y. U: f4 X! ^
  75.   RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \+ ~6 a% A, j: i; d" J2 }& w( M- E
  76.                                  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1);$ y& P7 B  D) e: q* q9 ]

  77. $ [& k& _7 n5 i; u
  78.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;1 f: h3 @; H. ^' _, ^8 `
  79.   RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
    ; x& q5 o, h. M* I9 `4 I
  80.   RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;9 c/ C. T% |: k
  81.   RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;' a  ~0 F# u4 ?2 {! D& K* O3 W" v
  82.   RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;, j9 Q3 M1 v  q4 ?/ R8 ^# F; ^( O8 _
  83.   RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;, A# P4 j& G4 ?: s3 W
  84.   RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;3 R$ I% E) V% ~1 ~2 \# n. C8 v
  85.   ret = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);3 S0 u+ w1 J! o% I3 v7 {
  86.   if(ret != HAL_OK)8 {. Q' f0 f  X8 v# Z( s7 n& A
  87.   {
    $ B$ H0 S9 N& D( Z' m
  88.     while(1) {};0 ]9 I* p% Z  p; n; L9 W" b( D
  89.   }
    + ?. F0 ?3 ^) m: W5 W8 Z+ R- m
  90. , {5 Z* |0 ]! W; C& {) Z0 i- x7 b
  91. }
    $ M4 z6 k) z0 T9 g
复制代码

+ D7 }. G$ u. ~" o, {
6 ~. }0 j! ~3 @( T3 ?! B1 g
收藏 评论0 发布时间:2021-12-22 13:46

举报

0个回答

所属标签

相似分享

官网相关资源

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