频率2.097Mhz , TIM2定时1s触发一次中断
( N$ F5 a6 b+ S/ X- J! V1.TIM2初始化
" n. \# \8 t) J% |HAL_TIM_Base_Init>HAL_TIM_ConfigClockSource>HAL_TIMEx_MasterConfigSynchronization) M; W! e2 D' t2 c/ X6 h
& Y) [$ P- q1 \
- /**# O- H0 z( |! g( Z
- * @brief TIM2 Initialization Function6 Q4 u2 o8 S7 K9 ^5 U" d8 d9 u* o
- * @param None
- l3 R; Z* X) K - * @retval None
' N7 _ V( m7 x+ x) r% F2 q - */
| [+ J- F1 d* \! \ - TIM_HandleTypeDef htim2;
7 h4 S0 T+ Y* h0 C- @ @ - void MX_TIM2_Init(uint16_t time)( h. p E& Y# f$ ?* W6 {
- {
w2 i" q+ |1 a, h9 k - TIM_ClockConfigTypeDef sClockSourceConfig = {0};9 ^! K6 ^; H! F; J1 s2 i
- TIM_MasterConfigTypeDef sMasterConfig = {0};7 E4 W1 t$ a% E$ ]6 _; X# D
; G# c$ @7 V5 N5 r' p# d' }- htim2.Instance = TIM2;0 s; Y! b% a3 y0 v/ O
- htim2.Init.Prescaler = 2000;4 o9 x1 Z: |6 l, w$ o
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;. J& w* D9 z. o, r8 J
- htim2.Init.Period = time - 1;0 e7 s1 G' L2 c& {& R7 ^4 H/ D8 S
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
' E/ \3 o$ G6 }4 q) E+ W/ t1 v - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;' x8 f/ j2 B% o# [; x8 x
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
, W- G* c- f. M - {
6 x. X y+ e y1 ` - Error_Handler();. @( y: |9 [4 p' d9 b6 p) T
- }
6 A7 O- j. @. Y3 u7 ~ _! S1 |. C4 q - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
# E+ B9 l2 [6 e5 v, S3 }5 \ - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
* L5 h/ j( z; m- `* L' N8 g& y - {
! s( t4 b! K, \ - Error_Handler();0 E+ L: u, C% B1 v6 d
- }9 @! ]. |. s) u
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
5 J0 A2 d% S A, P0 j - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
# d6 _ {$ H5 e) Y - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK); p( Q+ i( r7 c5 R! u$ {3 T
- {
* S5 V! S) V3 N) ~% V1 \4 |8 I4 h1 B - Error_Handler();
* A8 V& O: M' o Q: V; v! z) P - }
0 H# w4 ?0 L8 |# m1 g - }
复制代码
: D5 ^1 D4 s: Q6 h2.TIM2 中断处理函数
; u0 R+ q: X* _' N- /**
' i6 C3 q+ l3 |8 g0 v; R - * @brief This function handles TIM2 global interrupt.
) V& v7 T, q& A+ v( S( z8 C - */
j# N+ o5 _9 t9 @- r - void TIM2_IRQHandler(void)
3 w1 ^/ J. d2 V8 ?; a" } r* V5 j3 w! x - {$ t8 K( S5 c8 _6 [7 s
- HAL_TIM_IRQHandler(&htim2);; c* h/ I1 _0 `9 Z# p, F
- }
复制代码
. a- N3 G& x2 W+ |. z& Y3.主函数main: R/ Q, _+ P' y
- int main(void)
8 L- z) ?$ u6 r' i+ I9 n ^2 Z - {" N) S3 O4 q3 M1 U
- HAL_Init();
" W" z, N0 l2 I$ h - /* Configure the system clock */8 O9 w& j2 h6 m" R( }
- SystemClock_Config();! L% v+ ]$ e9 Q1 C% u0 L2 S
- LED_Init();//LED初始化. v2 ]* k* f& g- l. g6 v% Q/ y, M
- MX_TIM2_Init(1001); //1s一次2 h' R8 ?( i ^" q- ?! q+ c5 e3 V. C( I# ~
- HAL_TIM_Base_Stop_IT(&htim2);4 | Z# o( X) g- C
- HAL_TIM_Base_Start_IT(&htim2);
& y3 }' t9 N9 v) j' Y$ r
* f, @" v5 R5 B- while(1)5 j, n3 j. ^8 l
- {}
3 }% \" L9 L P - }
复制代码 6 C% C4 @/ n" v" v9 Z3 z3 Z" r
4.TIM中断回调处理函数6 M- @* u/ h ~& u
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim), k6 m; a% g! ?, j+ \
- {- L0 h8 x4 S! q/ L* k y8 O( Z# z
- if(htim == &htim2)
/ |; ?( ]" v. S6 M# [ - {
- ], G( a+ n6 r% H8 z/ Y; F - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN8);
' Q) B4 Z! a' \0 j6 i. ^& k - }0 h' q3 ^( s$ C- ~. k7 p j
- }
* q6 ?0 Z$ Q" y; b# i% [
复制代码
. P# D3 J& e e- O, y \$ m2 D8 o |