频率2.097Mhz , TIM2定时1s触发一次中断
. |: c- z( b! `7 ^9 V1 \1.TIM2初始化/ C7 n) M& @1 P4 U% @. B1 m
HAL_TIM_Base_Init>HAL_TIM_ConfigClockSource>HAL_TIMEx_MasterConfigSynchronization+ H4 H' t# H$ s* `( e' K3 A
- z+ c* P: y; Y. B5 ~6 z+ j
- /**
/ s1 o7 G9 b% `% }! Z - * @brief TIM2 Initialization Function+ Z! |: R1 w5 A! F
- * @param None3 R- q+ w) C4 ~8 k. k/ }: n5 o, A
- * @retval None6 \3 b9 M# n; j! W z* g
- */
4 Q9 l0 Q! a, i% N. O3 h j - TIM_HandleTypeDef htim2;2 i1 M1 Y0 ^! W
- void MX_TIM2_Init(uint16_t time)% b |5 h- Y+ c: W
- {6 l0 M: H, A& @# f: [% J4 i7 B
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};) h' V n7 _- |$ D# E
- TIM_MasterConfigTypeDef sMasterConfig = {0};5 B& E- ]/ P9 ?$ K9 A ~% g
a; l9 k$ ?: F l, W, [3 H' W8 y- htim2.Instance = TIM2;3 F( f. |5 k( C) h. V# n
- htim2.Init.Prescaler = 2000;
& `. D1 X+ |: S, ? - htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
' x: a N4 z" e+ T - htim2.Init.Period = time - 1;1 C/ x% d2 i/ v7 j2 Z2 C
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
* o+ d! R x4 C# V+ X% q - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
: l. Z4 M% `% G9 t! g4 z - if (HAL_TIM_Base_Init(&htim2) != HAL_OK)7 U" V/ Z1 z0 R* O3 i3 @& s2 ?5 `
- {
" h6 A; A1 A# U& j4 s2 K W - Error_Handler();/ q& N5 y4 I5 g+ h4 ~* W# w7 D
- }
$ O& L8 S# `. p* S - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
, q- M) [7 N3 j0 s5 ` - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)/ Z O* G+ O& y8 ?% `
- {
- J$ R J: Z6 r U - Error_Handler(); q% h- H' x8 c f+ n
- }
9 P( Z: q* C6 R3 W0 [( I - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;* u! l; R: ?# G. ^& R
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;: W8 ]2 X2 S3 ]' j4 j5 i8 W1 m
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)8 T& l# Q7 S4 K3 n/ n
- {
7 c! q3 d! r* Q& ?; R# i - Error_Handler();
' A+ [8 |6 T1 d0 p% I5 z - }9 g7 n" z" V# S- E8 d! M5 f
- }
复制代码 + g; V0 ?, b/ y6 H
2.TIM2 中断处理函数$ K9 n9 x ^6 ^" n5 I4 f
- /**
5 [/ o: m/ u5 [$ J - * @brief This function handles TIM2 global interrupt.3 C7 o. \+ |; \8 M4 Y2 ^$ _$ o
- */
, h' H; B2 d; o; n - void TIM2_IRQHandler(void)) N4 m3 [$ A" L( U' m
- {6 h" J0 i( f3 i9 S: h; |2 b9 t
- HAL_TIM_IRQHandler(&htim2);
6 o/ r; e! U) Z) R2 N - }
复制代码 7 e3 M- M0 N) @- v) G. ~
3.主函数main
' E9 ~0 P: C7 O) I- int main(void)
) g8 v+ a: R5 G! O - {' L( I# P3 r+ r- @$ x9 B
- HAL_Init();: j$ g) J! g8 e' l1 H" Y, Q4 N
- /* Configure the system clock */
: \$ N) \ k" c8 {: O1 E% B* d; \ - SystemClock_Config(); F* i% C7 G! @% s
- LED_Init();//LED初始化' w4 L S2 L2 z: [+ O* @5 M \
- MX_TIM2_Init(1001); //1s一次
) {- Q* a( S3 z" } p( s - HAL_TIM_Base_Stop_IT(&htim2);7 J+ {: K: m( y/ j1 i+ ^
- HAL_TIM_Base_Start_IT(&htim2);
1 r( H/ Z4 v1 D% [- I5 m5 d - 4 ^( H% |6 A7 M% k+ C( v2 O
- while(1)$ p7 H, X3 x* N7 B. z
- {}
2 [1 j& m: K9 i( ?* a; U - }
复制代码
5 p% B3 P! I$ q3 K4.TIM中断回调处理函数9 c6 Z1 p* X1 U
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim), n) b/ A5 o4 d# g0 k2 _7 k
- {" I+ w) ?7 D" i8 \9 _( F' @/ o$ U
- if(htim == &htim2)
# N- p( s. L$ w/ W B* C) t - {7 m% y/ a9 h/ Y6 _) O
- HAL_GPIO_TogglePin(GPIOB,GPIO_PIN8);
) f8 p- g; r! l - }
3 x2 H. F" e8 h& Q - }
- ?) k# n# ]0 R
复制代码 2 f2 T* W5 @3 z9 S' `) `
|