MCU为stm32l0系列,时钟配置如下:
" X& k' V% N3 C$ g3 `; o2 r" H1 o* M2 V& C2 J/ V/ c
- ~3 j1 S0 ], c+ Z: n; m) k' `7 n9 X9 p$ y6 c
3 ^# B3 H3 n+ B% r* W; b
) d+ x6 U g9 p
- //时钟系统配置函数/ q! k5 O7 P( D; ]( }$ U
- //SYSCLK=Fs*PLLMUL/PLLDIV;* \5 s0 d* r7 N
- //
- X1 X& Z) v) ^9 I( R - //Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));9 Y! n/ E! L. \9 J# P
- //SYSCLK = ) s! x/ @' g4 g% m
- //Fs 8M
; Y! ]+ K, S/ G) k5 }6 G2 s$ B - //Fvco: 8M
! m1 M1 z' g2 K s6 }3 w( j - //SYSCLK: 系统时钟频率 8*8/2=32
& h# T9 X! m4 s( C; p& k; s. ? - //PLLMUL:倍频 8 G3 G. M. z# e' C3 K% L
- //PLLDIV:分频系数 2
, g; v0 t" W- c" t9 b$ |* N% g9 h - ( R U9 U. ]! x
- void SystemClockConfig( void )" X1 N6 u6 D" Z, ~* R; a
- {
# D0 D7 i$ K# h: y s" n+ n2 i - RCC_OscInitTypeDef RCC_OscInitStruct;4 E8 u/ z. i' p4 B+ s+ v# T" u
- RCC_ClkInitTypeDef RCC_ClkInitStruct;9 [( S1 q8 V x Q0 Z
?0 P: F( A7 {" w8 V/ C* S- __HAL_RCC_GPIOH_CLK_ENABLE();! z9 V9 P/ Z4 E. s6 B B( B
- __HAL_RCC_PWR_CLK_ENABLE( );
' S. H* v9 F3 C7 u& M! ] - ( |8 [: h3 \7 w! D2 e: E3 t8 @
- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 ); / V. ?# A% K! t2 H' \1 c
- 1 i- O) L+ N. K5 _ c7 m+ ^' R$ U% R
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; //高速外部时钟 8M k" l+ c/ A* G0 ^% u# Y
- RCC_OscInitStruct.HSEState = RCC_HSE_ON; //打开HSE
& V+ l& A/ K+ Z- t7 n' @ - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; //打开PLL
0 ~5 O% L; @4 n4 x9 s - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; //设置PLL时钟源
( _) K8 F9 X: @ - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; //8倍频4 Y, j: \6 `! r5 H! x) F3 D
- RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2; //PLL VCO输入时钟的分频系数% {, N, |/ d# }8 T0 r) d/ E
- if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK )
! y0 ^" m/ I" @+ v0 m - {% c, k- s8 L: x \2 x( X
- assert_param( FAIL );6 G3 n5 j, ^$ n7 |
- }+ r, f' r! y0 z! U1 L1 |$ y
4 ~2 B/ L; \# G( y* i# a9 F0 C- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
" g: T! l, G0 v) ] - RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
5 \* f1 M* O8 {/ y. M - 9 ?/ q; X/ Q, ^5 X# B) W. e* x
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; //设置系统时钟源: r8 O9 R/ c" i' i: Q2 c
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; //AHB分频系数为1 32; J5 s' g4 M9 ]9 m9 R9 A0 l
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8; //APB1分频系数为8 4
$ M# {4 G& ^" F7 _. ~) | - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; //APB2分频系数为1 322 x" O3 l. B# B4 {/ {
- if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK )# f0 ~- V) {& E' `
- {
+ [, i# k) U1 T( x" ~: d& ]0 `- _ - assert_param( FAIL );- {6 ?" C" h: \5 k+ o/ Q" n
- }
, e+ Q5 M" m7 v; b. ~" o - 8 F/ q1 R0 C0 P
- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );; I9 o7 [2 o/ u; @6 H/ Y5 W
- HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );
- C) U& \+ q+ V/ L; p2 R, s: y" E - HAL_NVIC_SetPriority( SysTick_IRQn, 1, 0 );& ]0 C7 u4 |/ ^' ~- c6 O" o0 x7 C
- HAL_NVIC_EnableIRQ(SysTick_IRQn);) I& Z$ R6 x0 E0 o- K1 b2 Y
- }
复制代码
: o8 z* r6 w" ~ K5 _3 |( C; z+ |& G. }) U
7 `$ }0 |3 W" {5 e* E7 p
|