以下源码以定时器3为例,其他可以以此类推8 r- V- |. e* W# K3 o' [
& B' a: N+ d2 b6 e& h.c文件
) n/ \( }" l2 C- #include "Time.h"
( q* w% p5 I" F2 d/ c! }2 w - ! c' |2 ~' R: c- @. S$ y* N& {) }
- void TIM3_Int_Init(uint32_t time_us)
6 S! A" ~8 y! b' o, P& H0 D- G - {
2 m% Z T2 A8 H6 l8 v! a. h$ r - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
, ~8 F, `$ k' n - NVIC_InitTypeDef NVIC_InitStructure;
3 O; e( e7 g x3 k
9 A9 N9 o9 f o4 R& o- unsigned char prescaler = 1;. x/ x. r( s. A4 I' _6 v b" t
- unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定. h9 D' E( ^* U
- unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);
\' ^' E4 S/ y8 o - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);# M" D8 S7 ~: Y# y
2 H) q3 j$ _% Z7 `! V- TIM_TimeBaseStructure.TIM_Period = period;
) p% X6 \+ m* ~) x0 J1 k& @ - TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果
3 V0 W8 J, g# Z! }6 q - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
6 H5 @# h4 p3 K% s - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
# X& u9 B) a; M: v - TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);' W, j, o0 F3 Y' G% s4 y: ~% l
- 3 W. ~$ w# C p; k( k
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
& S% a; ]7 D, T) M) i2 Y' V
3 E6 o0 s) S3 C* k- ~- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
+ _8 l3 g, t f% L, O- L - NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
' Q/ M* Y2 i/ @! E' `3 k$ {8 G+ @ - NVIC_InitStructure.NVIC_IRQChannelPriority=1;' s; D9 |' R2 q4 `; |
- NVIC_Init(&NVIC_InitStructure);
- E- N# H, U( r. u$ [+ D: V - Y9 @3 t+ I: Z o
- TIM_Cmd(TIM3, ENABLE);
( e! r" s& w" @0 Y: M: T$ P# U0 Y - }6 H6 E" M3 G! r2 g/ b! W
# K$ D1 Q# A% Z, F' L- U- void TIM3_IRQHandler(void) //TIM3中断
2 R6 q# h# O5 n9 h1 @ - {' q4 L7 f D" R6 ?9 G L
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
+ r+ j I$ j# l - { 9 m: V- {( N- q1 ^4 \
-
* S! B z" o& e+ X2 z: o7 D/ e - TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志 ) r( P; E P! r' m& u" J2 U
- 5 v0 n4 n$ U6 p$ q' d7 `
- }
# \! k4 ~( D$ r: U N - }
复制代码
2 a7 m1 l# V- R6 P( @7 r' I3 [2 p.h文件' B3 H8 | m, P/ m
- #ifndef _TIME_H/ U1 s0 w5 S2 W
- #define _TIME_H: c5 ~) k. r+ H2 p0 f, X, O
- #include "stm32f0xx.h". @0 S2 P. D1 h: M
- / b3 `5 `# M8 o) D7 `0 | s
- void TIM3_Int_Init(uint32_t time_us);$ X) h. r; V3 |1 e% P) {! D
" N% ~ n7 b9 h; l, O2 M- #endif
复制代码 ( V8 R/ z/ Z5 c5 _7 S8 y: y% q
1 i" a* ^5 y" _9 V/ T& v
6 l7 E+ Q) k8 }1 {; I |