以下源码以定时器3为例,其他可以以此类推
+ u/ d5 s9 j( r( I$ `( F6 B* X& y; ]% f! ^' u8 Z
.c文件8 Y/ q0 r" y, C' g {# I
- #include "Time.h"% x, v! Y% j) r! `! T0 i) B
- 1 Y7 H8 c0 _6 T( H B
- void TIM3_Int_Init(uint32_t time_us)
& ^: y4 V1 w4 W, u2 N' Z - {
2 b0 N1 M. `+ q; j { - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
& Z/ R, k9 ~/ S3 x6 V - NVIC_InitTypeDef NVIC_InitStructure;9 t% u4 W7 ?* L* e
- a" F# Y. Q3 y1 Z! w$ U- unsigned char prescaler = 1;
' t h& D, {& x/ i2 { - unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
! W3 b! i H" s& `! b - unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);
1 v4 l0 u p0 n/ B' V7 ]. j - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
9 C( {0 p6 U6 ~3 `7 B0 n
7 R; k6 o9 z$ e$ q. v- TIM_TimeBaseStructure.TIM_Period = period;3 m! f! `" f7 a! K
- TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果
; q3 K0 t: @5 e - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数
4 H+ M9 b* o! E' [! I1 ?) [( u( E - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
5 ?$ Z; w/ z. H) e2 J4 q! m& h - TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/ P/ V9 C. g9 J9 U - " t! l3 h+ b* W- P6 t+ e
- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
, M H" t# s0 N2 t" [ - / ^( y* K) {- s) z0 ~7 z
- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
& g7 `& D. V' Q' U2 w/ ~. V - NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;3 i, E) R, W3 g4 y, A
- NVIC_InitStructure.NVIC_IRQChannelPriority=1;4 ]( D; Z" U9 A$ S6 K: o
- NVIC_Init(&NVIC_InitStructure);
: r; o$ o5 h6 n+ Q- L - 9 U: G; v( s2 W& h
- TIM_Cmd(TIM3, ENABLE);
" s' A' I* W/ x - }
; F! f& z( M' o a. X/ q4 h - . W2 I" V/ x( A" V
- void TIM3_IRQHandler(void) //TIM3中断
. A f8 Z+ J7 Q. ^ - {
, R# F: A0 a( M6 S - if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否$ u9 \( o! \8 A# v: S! y$ ~
- {
% h1 Q9 L5 V2 h u: ?- a; \0 g: I - # l2 f. u' \+ x( k
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志 ' J8 ]' u; r& K" N" v) E7 b8 g
- * S8 _* d3 u3 }) R, S
- }
0 b8 s7 J. y1 n' _/ D6 A - }
复制代码 ) G) @8 K$ Y9 j, k$ X# C
.h文件. d" t, d; e1 H2 J( i5 l8 U, P
- #ifndef _TIME_H H+ w" D. m5 k
- #define _TIME_H
$ \$ M9 ^0 v: o% T: h" ]2 t - #include "stm32f0xx.h"+ c1 f' k5 c+ v+ q$ G3 S
) g( R3 j3 ~ z* W: x9 l5 }" W) q- void TIM3_Int_Init(uint32_t time_us);* |6 s0 e: Y/ I: A2 k& g% _% ]
- $ D8 H$ Q$ K' x9 S5 c) B! ~
- #endif
复制代码
; F0 H! ]/ s9 W/ b% i- A" G" J$ s, A* l0 G* y8 K
, ^! r8 c) r% S9 y6 B! p5 ?
|