以下源码以定时器3为例,其他可以以此类推: D, A% Z0 n& @
$ Y' l7 j) Q4 f6 d
.c文件
! Z" M' Q$ D2 O0 ^- #include "Time.h"
* ] O. \- |$ _5 y& ^8 J7 B1 D; f
+ V; K, E j/ N3 F# |- void TIM3_Int_Init(uint32_t time_us)
" M5 V/ A- |& L7 j- P - {( V4 G U) {$ D0 D6 @- D
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;0 x' I# [1 q8 b1 D1 p
- NVIC_InitTypeDef NVIC_InitStructure;
, Z8 k3 I4 ]& [1 w6 p - , j+ j6 X0 j A' ~( {% R4 d
- unsigned char prescaler = 1;- f! K4 f# j& `! m7 x& P- y' ?
- unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定$ _; C4 }4 c$ W2 i
- unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);4 b }- l+ S. {) }1 |! }& R1 z
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);$ O7 n, m: `9 i* n+ W: g
- ' x, d1 u U' a/ s4 N3 y
- TIM_TimeBaseStructure.TIM_Period = period;
2 v& y( B& p+ u2 a+ W - TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果
; i( i- B, N9 R0 ]' G - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
: W! G. }1 l( N$ ] - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
8 U: i1 r. E3 n. N& j6 M1 \ - TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
" |. |$ c: Q& w, x* R - 4 i" ~; I6 \% p7 O, Y% Y5 \" N
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断& T& H- l+ w7 n) w5 k/ ]# _- v% ^
% S9 E5 L. ]$ w5 c- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
$ H: }2 C. r2 `$ z: S" I% R - NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
5 _, P8 L/ j& a- {2 I6 ~$ ^- C6 s1 z - NVIC_InitStructure.NVIC_IRQChannelPriority=1;# ~* j# G) O5 S P* m' |$ F
- NVIC_Init(&NVIC_InitStructure);
& I+ A' V( ~7 q' ~3 j
0 W- J- U! }# Z' M8 n- TIM_Cmd(TIM3, ENABLE);
' p/ p, c5 r9 a6 V" x - }
3 S, |* K- ]7 L* ]9 q9 ~6 t; d
- N; n6 E8 U$ p9 F- void TIM3_IRQHandler(void) //TIM3中断7 l" m4 i! u" X9 m1 X( L G& v
- {
% S1 I0 ]3 i# W* v% ~ }8 ^) h - if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否, t' b* \: u$ L) K- q5 I
- { 9 R# Q2 `' r1 E& Q: }
-
% j9 m+ Z9 C5 ?# V - TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志
5 ^" _3 |5 V4 Q& U* f- Z9 g! a
" p9 ^; A: w& R6 @7 F2 H- }, r2 h* Z6 T: K' ], O
- }
复制代码
, h1 `1 O, ^2 g0 G9 z1 e.h文件5 K: l' M4 l+ O: H, R: n' g
- #ifndef _TIME_H5 l4 @1 m6 Y) e# r6 {& Q8 G* Q
- #define _TIME_H
! D; i5 X4 r7 a) Y3 s7 a% g8 t1 q - #include "stm32f0xx.h"5 `6 t/ x7 Q* O1 y5 C* j
. f# u, j! k. g0 W- void TIM3_Int_Init(uint32_t time_us);
( D. g9 e/ D, e - # x8 |5 s8 ?( _+ H# q) Q' j
- #endif
复制代码
+ {& R9 Q9 B/ N4 _! A) R& `; E
4 M+ q; L5 m+ p; U7 l: b i* ^ e6 j8 d3 O
|