频率2.097Mhz , TIM2定时1s触发一次中断9 |8 W1 i! T1 a' [7 u. A
1.TIM2初始化
7 N; g5 P, A% N" JHAL_TIM_Base_Init>HAL_TIM_ConfigClockSource>HAL_TIMEx_MasterConfigSynchronization
0 P9 _+ Y7 ]" X# G& K! Z3 k4 C2 _1 Y4 V
2 [# s) h/ {( B! N7 w- ^( V$ d M- /**
! x. X" l4 [% H& @7 P( F% I - * @brief TIM2 Initialization Function# }! F9 f) r+ E9 s4 @( r1 ?: e' t
- * @param None
' H. c0 b0 B/ s - * @retval None! f: O) v6 |- V3 c' k
- */% g/ d2 R- }3 l2 {
- TIM_HandleTypeDef htim2;( m$ {. {$ |' y. R3 _* T$ B. @2 P
- void MX_TIM2_Init(uint16_t time)
& n# ]. V# N& @4 q - {! c' n; B! }) I k
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
! |- f" v2 M: H: c - TIM_MasterConfigTypeDef sMasterConfig = {0};$ E$ q( n% `5 F. R$ V0 l5 d Q: p
9 V3 D. z; n$ c: n- htim2.Instance = TIM2;
% I7 O. q; t( O8 Y$ ? - htim2.Init.Prescaler = 2000;0 u9 o' y v8 |/ D; }7 ?; g
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
) k) U- l3 y" P - htim2.Init.Period = time - 1;8 v2 F3 [5 u! e; O" }
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
$ A; q5 L K' W - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;1 `7 k' s" ^' g1 b1 _ x1 O
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
/ e) q5 ?# B+ [5 u( w; ~9 A - {
8 }# _- X) [6 T, T9 C" _6 ]2 x# y - Error_Handler();
$ B7 g. i U3 O9 i: h - }
|0 T5 S9 e" _3 }$ D9 G - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;0 u9 n, f c7 [) b* w9 F4 ^1 R
- if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)# M; k( I9 l/ r# C
- {9 K* ~) g2 x, f' p* d
- Error_Handler();8 e. h( K; v" I; }2 k& m. a" t9 A
- }
$ a9 J4 ?4 p) q+ j - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
( I" j+ E r! g$ x9 L - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; O1 m; r1 p2 P! M- @" u
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)+ M k: N7 ~6 V& F+ L4 ~
- {3 v. h0 g" L. {8 y2 G! R
- Error_Handler();
' z, r% J& ?) _# \0 \* T2 P, k - }* C6 @$ M3 D3 _* P- b
- }
复制代码
, q+ S X2 |' E4 V) Z2 z. k2 c' A2.TIM2 中断处理函数
. N% f2 A9 _% b( @ J4 G5 l- /**3 Q: W# E) ~1 c" O! s
- * @brief This function handles TIM2 global interrupt.. \' T- L' B: L) |% N) |
- */
3 Z$ K' u! t3 t }/ W& z7 ^. ~6 ]* B8 b - void TIM2_IRQHandler(void)$ \0 b6 H* I. w5 P: w% z4 J! z
- {
* p, f1 _ J/ Z. Y$ ]4 z/ b) E - HAL_TIM_IRQHandler(&htim2);
2 p- a/ o3 G4 X" A3 y- W - }
复制代码
6 F5 J6 x7 a) r+ p$ a2 K% n$ F0 M3.主函数main+ Y) [# e! I7 O- R& q+ E Q
- int main(void)
* [) q' v' S! t8 {. Y& Z - {
( R2 V" F, I$ f0 g% M3 M: _ - HAL_Init();
/ K1 |3 }/ d5 i$ V - /* Configure the system clock */
3 k! C9 O) t8 l, @- n* k - SystemClock_Config(); X3 i! L9 k% x# m w
- LED_Init();//LED初始化
, w3 r9 U: {4 }" _& ^ - MX_TIM2_Init(1001); //1s一次. ^4 x/ Y1 i9 [' e$ O) [
- HAL_TIM_Base_Stop_IT(&htim2);
. u; S9 L [1 v$ [7 O& E - HAL_TIM_Base_Start_IT(&htim2);
! f% P9 z- N1 H5 h: U M" x - " n3 R8 w) |+ h) q1 l# X
- while(1)$ C$ p# d& w) w( J. { P- \
- {}6 W) j+ \3 M, e A
- }
复制代码
" t0 M) {2 X' d5 |0 m" r1 }4 c! D- H9 i4.TIM中断回调处理函数
8 ]: p9 z2 v% y( ?. |4 M- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
1 j; f% q' V+ \- | O: o - {
8 ^& j; x0 T! [2 N+ m% a1 \7 u- D8 s - if(htim == &htim2)0 i% O) }) G- e2 A6 _& P/ [
- {
0 T) K' q& u; e - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN8);2 f; e) K% v) {6 t, T/ w8 u
- }; m- R9 ^+ O8 D1 [3 {
- }
- ?& P* Y+ X! `4 L9 f( s
复制代码
' s9 u- b3 [) X$ I |