以下源码以定时器3为例,其他可以以此类推" T2 O: ^6 t+ W6 n1 u7 q- r1 U+ D
3 |* `6 a) w: b7 Y- y& E.c文件
: g* T6 ]. ]- m7 W$ W3 P- #include "Time.h"5 F3 A2 ]$ a1 p% d v0 z
0 P5 R/ k% Z0 K8 k/ S" t- void TIM3_Int_Init(uint32_t time_us)
4 ?( ?; C' }) c# F& }6 } - {
- K0 O4 D, x& L) C - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
, I0 S' q0 `$ X6 L6 Y - NVIC_InitTypeDef NVIC_InitStructure;
' e/ S( j) m Y
& e2 `4 W7 j8 y! L9 q, {5 N- unsigned char prescaler = 1;2 e1 m+ x& I5 _) P# X# q
- unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
8 @3 s0 J# E4 ?1 D; z, Q - unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);& k) d- X2 m; b- y% V5 ^
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);( z/ C+ J: ?: V8 I+ A+ z0 p
( S4 [ Y' u& @8 J) Y) C2 L, A- TIM_TimeBaseStructure.TIM_Period = period;* o( [5 |7 ?$ l; \% \
- TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果
+ I- [' U5 h4 ~, D; p - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
, Z9 \5 O# N) J0 \/ u - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
& U0 ~* A2 H. [& A3 K9 B - TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/ i$ g$ {, i7 Z- J
3 B! f- t N7 r& w% _) t, l- m4 w8 h- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
2 y: j4 e& v" J0 V ? - / ~* m3 C H6 y8 S7 V6 {" C
- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
# v1 j% F( y9 Z, }& Z! E% K( R- T7 ~ - NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
! [7 I! Q) ]$ ]6 G9 h/ _( a' L - NVIC_InitStructure.NVIC_IRQChannelPriority=1;
; T3 S3 T5 }+ [' G6 g0 V( n - NVIC_Init(&NVIC_InitStructure); 9 U# B0 I* E0 l H6 k) ^
- 4 U; i2 }/ B/ G% d& H! |
- TIM_Cmd(TIM3, ENABLE);
; @+ a+ q, p4 X( z7 G - }
5 |4 L9 _' M( Z' w! f - * g6 [! G2 V. c1 @$ g0 {
- void TIM3_IRQHandler(void) //TIM3中断
" _/ O& V) {2 z) B* t* Y& J - {; v8 x8 o: a7 a( A% i: {5 Q% u) v
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否1 M& Y2 j$ m! p
- {
# W/ @6 s+ }3 \+ v5 K" G -
5 [4 X o6 K0 |: \! Q, ] - TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志
6 s/ ?; ^3 a- l - & ]$ A6 g S/ l
- }
1 R. P9 r4 W3 X - }
复制代码 : y. ^" N2 n; R3 A: \- d5 X& l: O* p
.h文件! m1 b" R* S& J2 s! ?7 H u/ z4 h" @
- #ifndef _TIME_H
5 I- I" q2 h; s3 r& C2 T - #define _TIME_H
4 Q9 m8 _% O. ^/ k2 m - #include "stm32f0xx.h"
. e, }# [7 N1 @" T7 u6 k - + D/ q3 D; W2 d9 \( f# b
- void TIM3_Int_Init(uint32_t time_us);
$ K2 _! Q$ A& U
! B! {( X5 }: s; O8 @( Y- #endif
复制代码 2 g2 |5 f" X `7 X+ l5 x$ u$ f
" m( e. L" H- ~$ Y( u v: F
. G% { C; r1 D3 u$ G
|