以下源码以定时器3为例,其他可以以此类推
" v( e9 N* t0 {* g; d9 u0 e) L1 U
.c文件6 e$ x* E) ^$ G8 S8 J6 f! F7 D9 q
- #include "Time.h"! n7 p! \, I# ~; Q% P+ q
- ) S8 r9 Y# u: m" Z0 Q6 I
- void TIM3_Int_Init(uint32_t time_us)8 j" S# f: u4 {
- {
1 M! p9 a& V* N9 U) `' S% X - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;% Q/ W: N* I( [- R# F6 i
- NVIC_InitTypeDef NVIC_InitStructure;
3 A* A' a5 h/ W1 S4 Y - " l3 s: Q9 r0 m
- unsigned char prescaler = 1;! H# ]( s8 O5 r9 l: g8 k7 _
- unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定+ u4 A& j; B4 r
- unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);. n3 k0 s: Z* i
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
. V2 E5 v) B: d5 h& z' U, k+ S
: o! \4 `) b! Y1 V( Y# G- TIM_TimeBaseStructure.TIM_Period = period; \' B6 b0 i) R7 d: x
- TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果% G' j: z) Z4 j% d& }7 I
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
" q" v2 V' U5 f - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
/ }# |' N4 |! D% {5 {! ~ - TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);- S* n- V ^+ I6 t0 o
7 W4 F0 \* b1 w' r$ h% L. V- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
. T* i; I+ H, H6 q" @3 \ - 7 k1 z$ N, G9 K6 d7 Z) c3 u0 q! f9 V
- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;# D0 ?# A/ a/ s% g8 e# G
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
' `, G; S- ?0 n - NVIC_InitStructure.NVIC_IRQChannelPriority=1;5 X/ d6 V) e% W0 h2 ?" v
- NVIC_Init(&NVIC_InitStructure); 8 B* H# z& k2 a+ ~" r3 ?4 S& B
- 5 d1 J% L; a/ S5 X: O4 r
- TIM_Cmd(TIM3, ENABLE); 8 ^6 ^" ]. D- h( t0 C; O' j' R0 q
- }1 x$ u0 B3 D' G7 I' s8 t- ]4 W5 ]
$ a2 F/ k+ h& Z" `; A' Y- void TIM3_IRQHandler(void) //TIM3中断4 u; o8 s. ]6 A2 I- w: F
- {
1 T4 g, E" O: t u3 a" z! L M - if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
, {+ o l8 {. n9 v' L8 u" c% t. ~( M - { - G+ {, B; X4 T( O6 b4 a+ j
- ' k$ s* Q) x% h* @, T
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志
. K6 h; k6 q4 M2 X - ! c9 k( F6 `' o
- }
7 x+ R, K( @& ?. f+ m - }
复制代码 / J' N1 N, W! L" H- ^+ M( g4 P. a, g
.h文件) X! z1 ]5 [0 {
- #ifndef _TIME_H
9 B! X- x6 q2 _ - #define _TIME_H1 |0 S3 b) C3 L) x+ h8 s, E
- #include "stm32f0xx.h"+ L: l" g2 Q/ n# K. z% t
, Y) D) T2 c! |( n* x a2 B- void TIM3_Int_Init(uint32_t time_us);
# v, ]0 _3 b4 u) j/ S - 4 O" W9 h9 f& ]% r1 b6 W
- #endif
复制代码 ) R9 b, w) P# _7 r x3 @2 k3 f
3 K* E/ f5 G' \2 ^/ t. L2 r: v
8 T9 {* ?! A1 i+ N |