MCU为stm32l0系列,时钟配置如下:
$ l- i6 N$ ~ }
4 X/ S* A7 x8 W3 g6 S. G
' Q/ p" ~- y, o7 w9 W' {
5 H, T4 o$ y( q" W! z5 f: O7 ^/ s8 [' R/ S5 W4 }" a" e; r6 _! M
8 C! w0 j1 j# q4 ?$ V: ~, | u
- //时钟系统配置函数
6 R; w8 r8 }7 |2 E' ~; v( w - //SYSCLK=Fs*PLLMUL/PLLDIV;3 T* @; c' D# k* Z/ {! n5 y. s( l
- //% }6 k7 ?2 |, ]
- //Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));' v9 P( e% ^+ P
- //SYSCLK = 5 |" n2 ^8 |' Q/ ?; \5 a
- //Fs 8M
: ^7 R' l: T8 I: s' o6 |" O - //Fvco: 8M, ?5 X# `, } Z! F- b
- //SYSCLK: 系统时钟频率 8*8/2=321 ?/ Q, l8 L2 M) d. V& U$ N) Z
- //PLLMUL:倍频 89 A; T) c) `% r1 B+ {/ W+ x' x( [
- //PLLDIV:分频系数 2 + A" N/ M# s6 X
- ' x Y* P; |& B/ \8 j$ e1 k
- void SystemClockConfig( void )
# j/ X/ A3 h& y3 Z - {! e+ w g& M7 r/ _/ W$ D. v5 I" N
- RCC_OscInitTypeDef RCC_OscInitStruct;
4 k; w! s$ K) ~, x+ D8 J6 G& [ - RCC_ClkInitTypeDef RCC_ClkInitStruct;4 D3 Z `! A3 ^4 y
- 5 H6 c8 t* a) l9 f1 G- }5 @* \
- __HAL_RCC_GPIOH_CLK_ENABLE();2 x! F* @+ L+ t% x7 V7 N! m
- __HAL_RCC_PWR_CLK_ENABLE( );4 g3 f3 q- @$ X- ]" m4 S
2 A9 q: L. _" ]; A- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 ); ' q+ r! _; F- y) ~9 }8 D
- 6 p3 r6 Y# P8 m1 o {7 U! R( [# [
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; //高速外部时钟 8M
! P5 N4 ^8 K. H5 I- f U, w" e - RCC_OscInitStruct.HSEState = RCC_HSE_ON; //打开HSE
' Z. @( x) A( h( q) O* i- \0 O. L - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; //打开PLL1 I% b; @0 J' t/ L% R" F, }
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; //设置PLL时钟源2 T- ]1 q" C0 d0 G8 X& m# r- q/ W1 z2 X
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; //8倍频$ L; J7 u# ? ^
- RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2; //PLL VCO输入时钟的分频系数! s, U+ L# C$ {+ j! _* O# F
- if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK )
V. k" v, I7 u& m K& N. p+ X - { \8 [9 S: ^5 {( i
- assert_param( FAIL );
+ e/ S z3 H3 q5 {7 N+ y, c - }5 P4 @* v4 a3 F3 T5 V+ O/ f
- 2 R0 |" M# _( x+ k m
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |& B- T0 K1 [( y
- RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
5 M1 j4 Y3 h2 @/ g
# y& z1 P- z v- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; //设置系统时钟源
1 y5 Q1 w. P2 {$ g5 P1 v! Z) E - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; //AHB分频系数为1 32
]/ k |/ @, Y1 q1 t - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8; //APB1分频系数为8 4
0 q" c! C5 q. t* M: `8 W: Z - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; //APB2分频系数为1 32! s/ s& N! g/ w; h
- if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK ) v0 o4 W7 _* I1 v, b
- {+ M, E( `9 P, j& I7 g* z
- assert_param( FAIL );
; g1 N, u) e: ?- G - }% l. M! W; f9 u0 M3 y: d
- ; A6 r5 m) h" q; B
- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );
9 R. \- y4 B' a- E* Y - HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );2 ?* A" Z& n9 U' ^' i3 s
- HAL_NVIC_SetPriority( SysTick_IRQn, 1, 0 );
8 Y' P4 v7 H" [' k - HAL_NVIC_EnableIRQ(SysTick_IRQn);* Y# G5 M+ ]6 E( h, h. g. f; i
- }
复制代码
2 Z3 k/ U. N( _4 X3 k8 @, l# w( i$ b% \5 z& e0 z6 D2 A
# O# x- x$ Y( h/ `/ u" p' q) {
|