MCU为stm32l0系列,时钟配置如下:
/ p% Q. K, g& p* ^% @7 Q( _4 Y" x3 m# A: i" N: z6 ^' Y' @) P
' ~3 q, @; V6 x: M& K/ ^
& q n1 H& O/ G5 l: k( ~9 J
, C- |( Z! T: I# U3 Z' y, J) f
; Q2 M, U/ S, X2 x1 O- //时钟系统配置函数4 c7 [- p) w$ B' ~' Z" ~
- //SYSCLK=Fs*PLLMUL/PLLDIV;7 M+ ^" J: ~ k) Q& H2 m
- //
3 ]& {7 `( x8 _ - //Fusb=Fvco/pllq=Fs*(plln/(pllm*pllq));
1 T& |& K" [- H/ m4 g1 n - //SYSCLK =
! N$ k+ n9 N7 g - //Fs 8M
8 i2 c% T' W1 a V) T - //Fvco: 8M2 B4 X. V( u# n0 l* y' @) o
- //SYSCLK: 系统时钟频率 8*8/2=32) h3 Z: P8 O8 n& @8 s2 `
- //PLLMUL:倍频 83 R4 H ^; _" [# j h
- //PLLDIV:分频系数 2 ; |. u+ x( W: K- m( _& t, o
- $ t- W4 b4 Z& E3 p0 Y$ ]
- void SystemClockConfig( void )8 o! z0 x) T8 I1 I0 c7 P
- {2 m; D6 [( w( L3 t$ w5 m( p
- RCC_OscInitTypeDef RCC_OscInitStruct;5 h' p9 L& [ Y6 h
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
0 q$ C4 }7 q# @9 a1 W - % j e8 d' G5 g. M/ v$ T2 {
- __HAL_RCC_GPIOH_CLK_ENABLE();7 q, r' ~9 r- `# E6 k n; o1 k
- __HAL_RCC_PWR_CLK_ENABLE( );
; I) T9 d1 Z; L1 E! q8 e- t5 m
5 C2 {7 I& u/ o- m0 D* a- __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 );
2 i2 ]! o: }8 F; J - , p2 c3 o+ N- j. ~2 ^
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; //高速外部时钟 8M
8 S# }% {+ H1 ` - RCC_OscInitStruct.HSEState = RCC_HSE_ON; //打开HSE
3 E& W7 H5 }1 D/ f - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; //打开PLL
]/ z" B: p W# x - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; //设置PLL时钟源
" S2 Z- v+ N2 A - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; //8倍频3 [- d0 Y ]- l, l2 P, [+ j: L% [1 O
- RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2; //PLL VCO输入时钟的分频系数( i4 s3 w, [: d, X
- if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK )
" r6 p" _ I! P+ d - {4 A0 B2 U9 N% W& \; C+ ]- s
- assert_param( FAIL );
! d0 g( ^- ~+ Y7 I' r# d( R; O - }
8 h* p% O: Z9 o
% ?( @/ ^( Z7 i) W" i" S- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
% B3 [! {: Q$ C" @8 K - RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
: Y) f0 T2 @! M! i# h
$ y0 Q6 d! b4 |# X- @$ F3 h& {- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; //设置系统时钟源
3 x, V h3 A8 f9 @6 m2 c, B - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; //AHB分频系数为1 32
+ @5 Y+ \" M' f4 R$ m m - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV8; //APB1分频系数为8 4
# \2 t" M' T! c% N! H& F2 W8 { - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; //APB2分频系数为1 32: b& v) ~! h; Q: |$ A* n: [
- if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK ). g* ~9 f- l" v7 A# Z9 I4 a7 p
- {" T7 V& r9 p' o- U. M7 I
- assert_param( FAIL );
- A1 M0 F, ]0 L5 A/ x# ]9 X - }) E/ O" u3 U3 Y8 Q" h+ X. ^
- ( W. L2 g7 f8 Q2 d6 b
- HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );
5 w- e. E8 |) I0 {; ~ - HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );5 d4 q) D5 N+ A6 ~3 J
- HAL_NVIC_SetPriority( SysTick_IRQn, 1, 0 );
4 T) p' `$ f4 I: O# t3 b- _3 _: V: A - HAL_NVIC_EnableIRQ(SysTick_IRQn);8 T- n: t1 w/ C3 V
- }
复制代码 9 j! x3 s8 l& A# f/ @
( c d6 C4 c" d/ p' \3 I3 i7 ^- I+ \1 }$ j& I1 C; h
|