以下源码以定时器3为例,其他可以以此类推# B5 P& v2 C r! D! A2 a0 h
4 m; V& z; P) z7 N" p
.c文件6 t- y. i; f* h- |
- #include "Time.h") c% b; I! @ }/ t7 I6 J& Y( N
- + N/ J! e! | n% P& h; s
- void TIM3_Int_Init(uint32_t time_us)
! N( ] u. T9 B - {
2 A, S, p" Y$ Z3 [7 g0 t& J! R3 Y - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;* U. a: Q* Q+ U2 Y3 G& h' C6 s
- NVIC_InitTypeDef NVIC_InitStructure;
% \% J% V; z& w" b* l* K - / f/ N" [4 N$ k4 W9 o* z \
- unsigned char prescaler = 1;9 x/ R6 X+ x' q2 _5 @* d6 [. H+ E
- unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
6 X& I7 d0 L+ }8 M9 C& b - unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);- t$ p7 m! J8 q6 c' ^ X8 u% q
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);# W# o# h' b: H7 o/ k" F- a
- 5 F/ s/ C) }+ Q( X
- TIM_TimeBaseStructure.TIM_Period = period;
4 y* r8 \$ K( s) v% L - TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果* L6 W! k- G, ^+ @# k) h- C
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
! M- X4 K8 d. X3 B; y: n - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;6 B- }( {1 u6 z) S$ r
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
7 P" a. r- E5 \ - 6 F* a/ L4 ^ F% F1 S
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断( ]6 u0 z- m3 [: E) Z1 }
! O( Q; U. m# ^' i! l9 u$ m- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;& y9 t5 S- F3 G% [- E
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;+ [" u$ _; C4 p7 w
- NVIC_InitStructure.NVIC_IRQChannelPriority=1;$ K0 P, s1 `4 _! n3 ~, R
- NVIC_Init(&NVIC_InitStructure); 3 p2 s6 u' P& L3 q
9 }+ ]$ ]1 L2 A- TIM_Cmd(TIM3, ENABLE); " f" ]! G! z' Y& O. ]4 G3 Y* P! B# d
- }
' u q7 s6 g L0 K3 M6 `! K# c - " I2 f4 O' [7 P+ o' m
- void TIM3_IRQHandler(void) //TIM3中断
* z( F1 w' S5 J - {' i8 m: `3 x. m% {3 I& q
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
5 T( g% S0 e# v+ a - {
. a# r. O- `, ?" V* r8 i3 Z -
6 L* M5 K3 c* }# U5 Y - TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志
6 m/ @7 M1 G4 D5 a! ?9 F l/ V
8 B% w5 E6 @# O( Q \: S- }6 _* G& U; m# a" W( m0 J
- }
复制代码
$ ?* ?! R/ U3 i/ o6 U. x" j.h文件
5 f. k& C- [/ X5 \- #ifndef _TIME_H0 p! p4 u) d1 x- d8 D* b
- #define _TIME_H0 P4 H9 k; p, v# ?% N
- #include "stm32f0xx.h"9 k4 T( c; Y+ L
- 6 E0 \- ]: N. [
- void TIM3_Int_Init(uint32_t time_us);
7 Q5 I9 N( l: L" f0 t
5 T; S/ @9 c Y2 a( T, Q& @/ e) v- #endif
复制代码
2 o4 n3 Z. e1 e" G2 e+ I$ p" Y% g' X2 h# _
# k8 K0 h" C4 Q, A
|