以下源码以定时器3为例,其他可以以此类推
( ~: U) ?4 C) k9 w
+ C8 |, j- n5 q1 ]8 l.c文件. T" _* b" E) y/ u' J p% }
- #include "Time.h"
" G) Z- V6 t& D* a - 2 ^1 H& o" g8 y8 ~5 j7 Q, ?
- void TIM3_Int_Init(uint32_t time_us)& _4 q1 i* V! ^( d3 ^ [( W0 K
- {
3 Q+ {8 Q3 f# X - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;: a2 g5 [) e" K8 i7 I
- NVIC_InitTypeDef NVIC_InitStructure;# L* m% X; B$ v
' R a/ M! c2 m' g9 x' ]- unsigned char prescaler = 1;
+ O- e4 u9 n1 ?4 a6 _4 J& n - unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定9 {9 s. B! f7 k/ k, [! X$ s' r' f
- unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);9 P/ H/ F F( i- }) z& q1 Y" z
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
9 S _0 D2 U/ g0 ?; L8 P - 4 H$ h2 {* A8 a) F; y! g
- TIM_TimeBaseStructure.TIM_Period = period;
7 x; _" l/ t0 z; M- y - TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果
( S2 m+ p/ I+ u" `- b& h- T - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
. z2 w' q$ H5 f& }: B - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;( U7 }5 c- [0 U! f4 k7 c* B
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);+ a; o8 ^: n. e; w4 `5 n
- 6 h% q* b$ Q. {$ o5 `1 |& J
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
' V+ P; B4 R9 }% J# J - + r" f& c% k5 ?5 h
- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
+ d( Q& ?7 D+ U3 q& G) r - NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;6 l6 ^; k+ r7 H* X, I
- NVIC_InitStructure.NVIC_IRQChannelPriority=1;
- [# _- e6 K& e, y - NVIC_Init(&NVIC_InitStructure);
3 O F' Q) k- J$ g" o
2 `- N, z6 W7 L/ a* @7 h! p- TIM_Cmd(TIM3, ENABLE); ) x& {% `$ ~( M, Q5 C' L" e0 b
- }
2 S% u+ h& ]! {8 Y$ E6 V/ Y
3 a; T/ O; u8 V/ w2 R- void TIM3_IRQHandler(void) //TIM3中断
% ]! d! \0 j. Z+ p) \ - {
0 H0 T0 u9 S' A - if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否; L$ J/ a6 Y' w3 I. J+ x- a, E3 \
- { ' a& d9 s# ^. ^. k2 C1 I
- + m3 Y; f7 r5 q9 n) ?3 p4 i4 `
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志
6 x3 C6 g3 P" { - 4 O% [* E$ ~/ h0 a
- }1 {3 l7 Q/ F0 M$ ~& d' n9 X- i
- }
复制代码 0 g% I* h& V. S8 n
.h文件. @/ E, z8 @' U2 l4 I+ l
- #ifndef _TIME_H5 u. p7 w N8 y$ G! |: J
- #define _TIME_H! V8 T5 P+ C9 O: X9 t2 _4 U
- #include "stm32f0xx.h"
9 M0 i6 V* g- I3 M: ^ x |
" Q: l* E" {. S# Q" O9 ]2 k8 _/ s- void TIM3_Int_Init(uint32_t time_us);/ T2 U8 ]4 a- O8 T2 z e3 M
9 ]% a4 P* _, X8 H- Q: T0 x. Q- #endif
复制代码
# `$ `, m8 o4 k* r3 u# D6 M$ T8 o3 W& B) F2 u$ q( w' D
! _) {$ c+ N0 y& ^. h
|