频率2.097Mhz , TIM2定时1s触发一次中断
7 W. g6 P! p* C$ B- X4 U! I& N9 ^1.TIM2初始化! C* ^) i. d. Q: f, r7 y
HAL_TIM_Base_Init>HAL_TIM_ConfigClockSource>HAL_TIMEx_MasterConfigSynchronization. T7 ~: M8 J1 L
6 N( M& K0 O" C- @# a" I3 Q- /** e' I: q/ b5 P( B3 b! h1 b( X8 v
- * @brief TIM2 Initialization Function
\7 ^0 t9 O: D4 o; b - * @param None0 f6 [: z+ c, R/ s' _5 Q& F
- * @retval None
! G3 e' m2 F$ m& ?& d2 } - */
& a( Q( o6 a7 n - TIM_HandleTypeDef htim2;
$ u% c+ _7 o3 Z( p0 s! f* t8 Q - void MX_TIM2_Init(uint16_t time)
" d. M/ T3 @. c* z - {
. }& U! D0 q u$ S: n# H - TIM_ClockConfigTypeDef sClockSourceConfig = {0};4 L/ ~- i, U- l* Y
- TIM_MasterConfigTypeDef sMasterConfig = {0};2 Z O% E- D, U' v7 t
- 3 [; {) h3 p1 R! X+ M0 W
- htim2.Instance = TIM2;0 T. h5 i8 l, V+ D
- htim2.Init.Prescaler = 2000;( \/ ^6 o9 u9 b" v
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
: e! D* u3 s/ D l9 G - htim2.Init.Period = time - 1;
( v- d$ w j5 h3 A; | - htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- C8 J( q7 Z: n! ^2 ^5 T P - htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;) c0 x. L9 x# L$ ]9 k# n) g
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK); V c) t7 ]/ f, o, z' B: j% ~
- {
. q5 B, M1 [+ A7 Y ? - Error_Handler();
2 Z: ^1 I6 L# G6 T& G0 k - }* v3 X, c t# Q; u/ L0 W" }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
0 G$ Z2 E m; R! I7 R4 C) f/ O; v - if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
+ F1 _# B- |! b - {# m& o, J" Y; |
- Error_Handler();
+ Q3 k" B: ?. P+ q1 U4 { - }% f5 \# p5 a! p; P. d4 V
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
' Q9 N3 S* B& s; v) H4 ]8 L7 ] - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
0 o; P3 B8 t1 i0 }# F; I9 t - if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)' A, S- C7 n+ z0 }3 E! T' I0 {0 h7 K) F
- {# D0 F. n5 R9 @! q( X k+ [) H
- Error_Handler();- a0 P( R9 U& Z% L& ^3 C
- }8 m' s) [1 o6 s0 T+ P
- }
复制代码
U9 }+ A; `, O9 U$ k) K ?$ W2.TIM2 中断处理函数8 ^5 X8 o& j8 r
- /**
1 ]# F( ]& J, \( c( D- S - * @brief This function handles TIM2 global interrupt.% L8 [% o7 W1 ?/ Y
- */
/ |; @3 d' s& [ - void TIM2_IRQHandler(void)
$ N& i t2 n7 S* O5 g W - {
5 [: m- T4 M9 K7 f* A - HAL_TIM_IRQHandler(&htim2);
2 \& _- t, g. `5 x. K8 q - }
复制代码
" [7 ~* C1 h" n" ~" e3.主函数main r: Y, G; ?! `8 h% H( Y: U' n
- int main(void)0 m5 g, }* `1 f; k
- {5 G* @2 k5 x+ C4 n' ]/ c
- HAL_Init();& R# l( c2 Y! A! o
- /* Configure the system clock */; K% S8 U! u/ j/ x" ]( V
- SystemClock_Config();* r: \+ J5 S8 C$ L* k* s% i5 i+ v7 Z
- LED_Init();//LED初始化
% M! g% {) S, \$ C7 i, P% U/ o - MX_TIM2_Init(1001); //1s一次
" @, R6 a4 p& s T' D, @ - HAL_TIM_Base_Stop_IT(&htim2);" x# o' N V# R3 |& A3 j
- HAL_TIM_Base_Start_IT(&htim2);" k g5 M# P0 S& S% C( n/ p
- # ~3 S7 `4 b; N6 P
- while(1)
9 x; z* U4 W0 c: H - {}- W* v4 E8 a! _ F: z( \8 [
- }
复制代码
4 c) J7 t; \: k( L+ L4.TIM中断回调处理函数
" i/ @# q8 K9 {& f+ \- L- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
; D) w& k- y6 {' [1 P: ~$ H - {
% u- M9 F( D9 d' o - if(htim == &htim2)1 [& c1 ^% T$ Y2 I/ t2 O' P3 K6 J
- {
# T) p8 I; L { - HAL_GPIO_TogglePin(GPIOB,GPIO_PIN8);0 M. U" p' X6 c
- }
+ ^4 j w7 T/ m. A9 p - }) o1 s$ a& {! M K' F q. K! l
复制代码
( L5 T: u1 [0 d. K4 y& m+ X) f, I |