以下源码以定时器3为例,其他可以以此类推" ]! {) F- C0 a
$ s5 X) f- q1 p4 L; y
.c文件1 _+ e9 D) x- Z w
- #include "Time.h"! j2 @% k8 A5 f E3 O9 D. w- U4 b# n
, l1 ]* v# b/ Y# y$ A3 I- void TIM3_Int_Init(uint32_t time_us)% r) Q1 ^1 `0 t# V1 A
- {
% V5 E! |5 X, h - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/ J) c" F( C( C, S7 j$ b - NVIC_InitTypeDef NVIC_InitStructure;
. p$ T. A& P3 k: c! X e1 a! {: b
. b' |, P5 Y. E4 T7 {- p: s$ e: E- unsigned char prescaler = 1;
% k6 N/ [* f3 N( I% U; ]2 c6 M; I - unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
( ^- p* T1 M! f; P5 I# a1 x/ j - unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);( i3 Z7 T$ l: |, x
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
' v' S' R7 d! V! r
+ v# y/ e7 B4 N, A [- TIM_TimeBaseStructure.TIM_Period = period;
9 ]% u) d# J/ F7 E s& f, } - TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1; //时钟再分频,会影响TIM_Period的效果% y( _" d6 l# l7 H$ o6 ^, A+ ?/ H
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分频,会影响PWM的计数个数& `! Q2 f: G# W9 {& T
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;& e+ T2 S/ A" Z1 e+ Q
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
* Z! o7 o, K3 ]
) w# F( _- r# _# b* [0 Z# B- TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断1 W+ R% ^2 I2 K7 E
- ) N# @: ?! f. w. i
- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;) D3 x6 c, X1 K4 F/ x
- NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
3 j4 p6 R2 `; e$ j/ {9 A - NVIC_InitStructure.NVIC_IRQChannelPriority=1;
) O. `9 E6 S2 T8 j$ W - NVIC_Init(&NVIC_InitStructure);
# O: X! I2 L( }7 D9 R) H6 r - 8 Y9 a: u" S# w- O
- TIM_Cmd(TIM3, ENABLE);
2 r9 t$ u1 B$ `7 u - }5 j+ z7 S2 c: d- h; r9 \
6 c2 D0 G" A" [- N# H- void TIM3_IRQHandler(void) //TIM3中断3 n5 l9 f# C! z9 y: ]5 C% A
- {
! l1 H% `; c2 N$ Q0 B - if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否
2 {+ s9 V' U- V9 G. N% M; \ - { 4 g {% o+ }' s6 T/ O
-
. W1 s- g+ R0 c8 ]% l - TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中断标志 , t9 \9 `9 M+ t2 q3 b4 j
9 @; r3 `7 P% _% K$ x3 H- }
) k1 Y, _% O2 X! a. L - }
复制代码
. {* g2 _3 H8 E.h文件& b& h" a- p9 [1 C: `
- #ifndef _TIME_H- @5 \; _/ L) i: J$ r& e @ r$ v+ s
- #define _TIME_H
. n7 M4 L6 B+ @ - #include "stm32f0xx.h"
% q0 a6 w/ _6 W" O0 X s2 h2 ~: M - 2 _. c3 e9 Q( H8 S$ |
- void TIM3_Int_Init(uint32_t time_us);
6 f" S' J, i$ M+ f7 G
) u0 b5 Y+ ~! v9 T. _) S; n2 t" [# o- V- #endif
复制代码 % \( d1 r9 D6 H+ N
6 w4 U/ f) N7 W; ~. e+ g" ~% n
6 o) {6 l& r F: E* X2 v
|