频率2.097Mhz , TIM2定时1s触发一次中断" L; V9 W: N5 r* |8 k
1.TIM2初始化9 C5 \+ n( { k' t! E
HAL_TIM_Base_Init>HAL_TIM_ConfigClockSource>HAL_TIMEx_MasterConfigSynchronization' S c4 M5 _$ E$ P6 Q7 c
# @" P' J2 C& w- O
- /**
5 f- X( _9 @5 X- _3 Y* @5 p - * @brief TIM2 Initialization Function
+ W# N" T' y I: y2 V - * @param None7 V+ O* q. o/ d9 p' c) o1 m
- * @retval None, Z. J [' Y1 T( u
- */4 P- O0 }; y- `9 u5 \/ C+ {
- TIM_HandleTypeDef htim2;
! w! a; @4 T* Z2 d4 V - void MX_TIM2_Init(uint16_t time)
5 I' A2 u7 B7 d3 s - {5 m! L t; ^8 o+ z7 e8 D8 b
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};0 ^1 L5 Z6 r+ |8 F* `
- TIM_MasterConfigTypeDef sMasterConfig = {0};
% k" n5 b6 J/ F, Q; N, M6 Z; r* G - 3 J3 F6 K9 M8 N7 Y3 v v; f' X
- htim2.Instance = TIM2;# M. ~( a& b) ]. h2 J X
- htim2.Init.Prescaler = 2000;. W/ T% h4 @) O) d4 Y. s9 M: k) U
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
+ D& z% D. m( x% J* z. r4 C1 ^0 { - htim2.Init.Period = time - 1;
3 u+ {3 D9 J4 v& Z; J - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
) X/ N! L6 Y3 i, [ - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;" Y+ P+ Y% q, X( @! _
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK): _& c @1 h6 b7 M0 r# k* m
- {
$ |$ Y( K" P+ U! ?6 @* y9 j* O - Error_Handler();
% e) y% s* i3 {6 I1 O - }
* n. W" u5 l0 \$ B - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;$ G# ]' G5 [. E
- if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
n: m0 K$ f- |# S; h+ f+ p - {
, @5 m" {, @( h. l: v - Error_Handler();
& C& t! g# c$ i0 x4 M( C - }. s8 ^: n4 E4 o5 Y% S
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;6 D& J* Z! ^! @, h) D0 X9 L
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
# ~. ?; E# e5 a) Q+ F' Y, G - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK); F* a5 n, x7 c1 l
- {
! K* l" Q. M% b6 x1 J - Error_Handler();' i/ m: c! e, Z
- }3 ?) q Q% |7 X
- }
复制代码
T: Q3 I" _5 O" ~2.TIM2 中断处理函数
" B( e1 S$ q. c. X- Z- /**, x: F& u7 f/ s3 _
- * @brief This function handles TIM2 global interrupt.
- ?$ F. g% o" j/ y - */) }9 r; r& H7 Z0 W U& J
- void TIM2_IRQHandler(void)* v l( @8 P) J! o) N3 a
- {
* ^ O$ p6 m1 b2 v h: G8 P4 c& |3 s- [ - HAL_TIM_IRQHandler(&htim2);# g5 D2 k) p1 F U T5 N2 @
- }
复制代码 9 d d& f/ i, F) f5 Z& k; Z, c$ t+ p) W
3.主函数main% o6 u( x/ M: S# R7 N7 J$ f- b/ G' W
- int main(void)4 M+ F/ g1 c/ N1 P7 H
- {2 H% ^% `$ p9 n7 J
- HAL_Init();
8 l+ z- F4 f. A) T+ A - /* Configure the system clock */
3 o& ]* k& ^$ t" J/ B2 F3 e0 E- n" ^ - SystemClock_Config();- m- l2 U+ a7 Y& V- n
- LED_Init();//LED初始化
9 v: }. t5 w" P% b% A, B8 d - MX_TIM2_Init(1001); //1s一次* y3 V$ B, ] ^) ?& V* M2 x- y8 v
- HAL_TIM_Base_Stop_IT(&htim2);
- u" S! V& l8 A$ e# F7 X - HAL_TIM_Base_Start_IT(&htim2);
A" x- j' Z" Q+ Y1 T* f
- f# I1 `9 q$ q$ n8 t ]- while(1)) ]) U; ?' L8 ~1 l! r( Q* R
- {}
3 J5 E. [: t# q - }
复制代码
) r, A: V& w; w F* ]5 E: {4.TIM中断回调处理函数8 Q4 ^+ ]3 {1 ]0 m6 I
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
8 I u L% @4 h" y - {: B4 W4 O, v1 R2 w7 ^+ k
- if(htim == &htim2) }' [- W8 C! g- f# |2 n
- {( O( r" ^/ A% _" c" E! D
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN8);
. q( W- T1 M( p, d A% {8 b9 { - }: L7 E: B$ X8 `9 r f) K
- }
8 m. d3 _+ }& V0 u% e
复制代码 2 i$ h4 B/ k% _& {$ k" ^9 O
|