以下源码以定时器3为例,其他可以以此类推2 M+ \8 w+ [9 f% l+ d0 U! G9 N
: F6 q# {* L# W& m5 M$ }* i+ _.c文件
5 p6 s( G8 C8 M+ u0 q- #include "Time.h"
% ~0 i# ]6 d. c7 `
5 ?0 F3 w. @1 Y- void TIM3_Int_Init(uint32_t time_us). X/ |) M3 H, Y
- {
5 u0 e9 A/ z* c2 @ - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;5 J& _; K2 u5 j+ ?$ I
- NVIC_InitTypeDef NVIC_InitStructure;
! Y% r- N, o! m! q, M: i7 v4 e - 2 A3 L$ U: V1 I
- unsigned char prescaler = 1;
4 r# z \* ?( s- l' O) T, { - unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
+ `! d: [$ M5 p( @( c/ h - unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);+ z' g9 ?7 j' ~5 y
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);1 U0 M* [$ X4 w5 N$ E) P' H
) J% \0 u. {8 F" {' o- TIM_TimeBaseStructure.TIM_Period = period;9 d4 O+ l7 u! n% b8 ]
- TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果% ]$ ~3 ]( A6 B4 s+ ]% d
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数/ w, t* K0 b9 s
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
2 e! g$ X7 d5 m* ]. a - TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
& G$ I0 p& H7 z - 0 [" r' X; m8 y9 m3 v# i* g2 X
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断& G: n1 i2 ?! n* `" ]! K+ P$ c" ]& _
- 4 a+ b( J8 N% M( x/ s) R
- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;# p! C+ H+ \9 `+ m" ^9 Y; H
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
8 E6 ^- J; e/ p1 }( b - NVIC_InitStructure.NVIC_IRQChannelPriority=1;
/ y# o& f$ G- P3 c; q* T, c& M$ t' v - NVIC_Init(&NVIC_InitStructure); 7 H8 u6 ~. S! A; W7 E: l
- " Y. M8 X# u8 ^
- TIM_Cmd(TIM3, ENABLE);
1 {8 F4 j5 T9 T% Y/ ? - }
) R b8 I. | ~1 p" c/ Z; o - 5 }9 N8 O* a/ M6 g$ F4 C! P+ V2 i) M
- void TIM3_IRQHandler(void) //TIM3中断
1 ^; }$ Y2 X! U - {
7 ]5 E1 O8 Y0 ~2 r+ ~8 b9 t - if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否8 @" W2 T1 p/ g6 t% ~8 |
- { : ^0 }; c2 V' c, J6 F% l! }
- + ^) U& @2 @: o9 V
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志 , p! P4 w& \: \& a2 x# e
. T' i. p$ y2 N% o2 {, l( V- }0 C/ h. f- S' L+ K
- }
复制代码
) k. l" |$ E6 r8 B. @.h文件
4 z. s. E7 @ C' Z r5 W- #ifndef _TIME_H! m) z# u' k; R; S+ i& Z
- #define _TIME_H* q( q/ X8 d( q1 `
- #include "stm32f0xx.h". v3 V) J% x% X, W
- - ]: m \; O/ i; M( {; j
- void TIM3_Int_Init(uint32_t time_us);
# q% H: d. B. d$ |/ ] - : G% a3 V6 n$ h- j
- #endif
复制代码 ) G9 U/ n, }6 e+ I7 a
7 a+ v: R+ D4 K: T6 b0 z! l! e+ N
$ f: X% \ P, T9 A
|