你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F0系列开发之定时器的使用

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
以下源码以定时器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- |
  1. #include "Time.h") c% b; I! @  }/ t7 I6 J& Y( N
  2. + N/ J! e! |  n% P& h; s
  3. void TIM3_Int_Init(uint32_t time_us)
    ! N( ]  u. T9 B
  4. {
    2 A, S, p" Y$ Z3 [7 g0 t& J! R3 Y
  5.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;* U. a: Q* Q+ U2 Y3 G& h' C6 s
  6.         NVIC_InitTypeDef NVIC_InitStructure;
    % \% J% V; z& w" b* l* K
  7. / f/ N" [4 N$ k4 W9 o* z  \
  8.         unsigned char prescaler = 1;9 x/ R6 X+ x' q2 _5 @* d6 [. H+ E
  9.         unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
    6 X& I7 d0 L+ }8 M9 C& b
  10.         unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);- t$ p7 m! J8 q6 c' ^  X8 u% q
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);# W# o# h' b: H7 o/ k" F- a
  12. 5 F/ s/ C) }+ Q( X
  13.         TIM_TimeBaseStructure.TIM_Period = period;
    4 y* r8 \$ K( s) v% L
  14.         TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1;        //时钟再分频,会影响TIM_Period的效果* L6 W! k- G, ^+ @# k) h- C
  15.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        //时钟分频,会影响PWM的计数个数
    ! M- X4 K8 d. X3 B; y: n
  16.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;6 B- }( {1 u6 z) S$ r
  17.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    7 P" a. r- E5 \
  18. 6 F* a/ L4 ^  F% F1 S
  19.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断( ]6 u0 z- m3 [: E) Z1 }

  20. ! O( Q; U. m# ^' i! l9 u$ m
  21.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;& y9 t5 S- F3 G% [- E
  22.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;+ [" u$ _; C4 p7 w
  23.         NVIC_InitStructure.NVIC_IRQChannelPriority=1;$ K0 P, s1 `4 _! n3 ~, R
  24.         NVIC_Init(&NVIC_InitStructure); 3 p2 s6 u' P& L3 q

  25. 9 }+ ]$ ]1 L2 A
  26.         TIM_Cmd(TIM3, ENABLE);        " f" ]! G! z' Y& O. ]4 G3 Y* P! B# d
  27. }
    ' u  q7 s6 g  L0 K3 M6 `! K# c
  28. " I2 f4 O' [7 P+ o' m
  29. void TIM3_IRQHandler(void)   //TIM3中断
    * z( F1 w' S5 J
  30. {' i8 m: `3 x. m% {3 I& q
  31.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
    5 T( g% S0 e# v+ a
  32.                 {         
    . a# r. O- `, ?" V* r8 i3 Z
  33.                         
    6 L* M5 K3 c* }# U5 Y
  34.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志
    6 m/ @7 M1 G4 D5 a! ?9 F  l/ V

  35. 8 B% w5 E6 @# O( Q  \: S
  36.                 }6 _* G& U; m# a" W( m0 J
  37. }
复制代码

$ ?* ?! R/ U3 i/ o6 U. x" j.h文件
5 f. k& C- [/ X5 \
  1. #ifndef _TIME_H0 p! p4 u) d1 x- d8 D* b
  2. #define _TIME_H0 P4 H9 k; p, v# ?% N
  3. #include "stm32f0xx.h"9 k4 T( c; Y+ L
  4. 6 E0 \- ]: N. [
  5. void TIM3_Int_Init(uint32_t time_us);
    7 Q5 I9 N( l: L" f0 t

  6. 5 T; S/ @9 c  Y2 a( T, Q& @/ e) v
  7. #endif
复制代码

2 o4 n3 Z. e1 e" G2 e+ I$ p" Y% g' X2 h# _
# k8 K0 h" C4 Q, A
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版