MCU为stm32l0系列,时钟配置如下:% @6 L7 f; Q; n6 P5 E! x$ y: w) B
8 A8 W4 { O# f( x
" T5 O4 t7 s G; ?, u
. |- Q- s3 w4 h( M8 ], x0 _* T6 J; y- d; R
' S! }$ J3 d; F( [ ?" h g
+ D/ j5 t; M1 X3 P
- //时钟系统配置函数
K8 O5 f/ N7 {; _6 _ - //SYSCLK=Fs*PLLMUL/PLLDIV;# [+ E+ D, N/ g+ v% e
- //
5 J7 k8 `7 Z; R8 m' j - //Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));. w5 J9 V: I3 M
- //SYSCLK =
/ Y: j* [2 ^" u! C$ [9 M - //Fs 8M : Q/ g$ P9 s1 X3 R8 K
- //Fvco: 8M+ o: Z$ Q/ J* m. Z6 z& }9 r
- //SYSCLK: 系统时钟频率 8*8/2=32) D8 a2 b( i% I" E ?- R
- //PLLMUL:倍频 8# a( Y5 [; |7 H5 |. d; h. z. S
- //PLLDIV:分频系数 2 ) Z$ t# p8 b% u: t5 V& f
: n) V7 s6 r+ l8 f4 {8 w5 p) G5 p- void SystemClockConfig( void )8 N5 K; D/ q( i3 ]
- {
- l2 `* Q0 U1 L; t7 e - RCC_OscInitTypeDef RCC_OscInitStruct;2 K+ ^, W* d# j5 m) x4 f: }
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
# B7 b4 Q' r1 C3 a7 a, P - 5 p/ }! }/ j2 j) \8 A, g
- __HAL_RCC_GPIOH_CLK_ENABLE();
" s7 N: M& y, _/ _1 Z1 K2 J9 F - __HAL_RCC_PWR_CLK_ENABLE( );% t- l1 B! N& t* O- [
- % k( ~& P' ]) a! x
- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 ); 3 c: _. Y/ J2 Q4 B, c! ]
( W# C \5 c7 z6 |0 e; ?- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; //高速外部时钟 8M
& w5 s: ~# L" B: s3 Z6 { } - RCC_OscInitStruct.HSEState = RCC_HSE_ON; //打开HSE
& ]1 O, n6 d8 b! Y/ K - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; //打开PLL
; A6 q s: [- a1 C% j - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; //设置PLL时钟源
7 q3 M' [, ~( ~) G, v8 P - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; //8倍频
$ r5 E$ e- t' q# F5 r1 ?4 a# c+ H6 S - RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2; //PLL VCO输入时钟的分频系数
, c p5 i+ y6 l" o5 T0 y - if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK ) n9 [7 M# ]4 j' h4 L3 t
- {
5 b0 k. d( |( @# w) W" E - assert_param( FAIL );$ N- _+ C Z; `9 m' A/ t2 f7 J e
- }
9 L ]6 ] q( l% R7 p% N - 2 Z" a3 X/ m5 Q/ ]* Y; s9 p8 t
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |2 v& k' ]( A `
- RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
( c: Z- j. b: V - + b8 F8 j) }7 |4 W8 E
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; //设置系统时钟源( W/ v3 _/ [- f& z" A4 n
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; //AHB分频系数为1 32/ _ J2 e9 |6 |( o( `$ ]) K6 k* U
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8; //APB1分频系数为8 4
3 ~- i% n. V7 q# s0 d, l - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; //APB2分频系数为1 32
" N8 `# u) ?5 ~3 A3 T+ V/ C - if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK ), p+ s) O5 |9 J4 h
- {
: Z0 h7 \& ^1 } - assert_param( FAIL );
" S# s" v$ i; S' Q, `1 z - }
8 y% A7 C- }; @+ m- r/ O. D - & w" q4 Z) E9 H" g. i _! T ~
- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );
$ D; N" ^# E3 Y! z" { - HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );
7 \' @% y5 a# y% S - HAL_NVIC_SetPriority( SysTick_IRQn, 1, 0 );' Y# V' M1 w: C n
- HAL_NVIC_EnableIRQ(SysTick_IRQn);7 ^* f! W9 V; x/ [( Q! j" m
- }
复制代码 ! q: R# R* I% M( C' @/ y
. P# ?( s* O1 B$ S S0 k2 C n& A; g' @+ p+ r0 L% L3 D
|