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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
以下源码以定时器3为例,其他可以以此类推: D, A% Z0 n& @
$ Y' l7 j) Q4 f6 d
.c文件
! Z" M' Q$ D2 O0 ^
  1. #include "Time.h"
    * ]  O. \- |$ _5 y& ^8 J7 B1 D; f

  2. + V; K, E  j/ N3 F# |
  3. void TIM3_Int_Init(uint32_t time_us)
    " M5 V/ A- |& L7 j- P
  4. {( V4 G  U) {$ D0 D6 @- D
  5.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;0 x' I# [1 q8 b1 D1 p
  6.         NVIC_InitTypeDef NVIC_InitStructure;
    , Z8 k3 I4 ]& [1 w6 p
  7. , j+ j6 X0 j  A' ~( {% R4 d
  8.         unsigned char prescaler = 1;- f! K4 f# j& `! m7 x& P- y' ?
  9.         unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定$ _; C4 }4 c$ W2 i
  10.         unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);4 b  }- l+ S. {) }1 |! }& R1 z
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);$ O7 n, m: `9 i* n+ W: g
  12. ' x, d1 u  U' a/ s4 N3 y
  13.         TIM_TimeBaseStructure.TIM_Period = period;
    2 v& y( B& p+ u2 a+ W
  14.         TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1;        //时钟再分频,会影响TIM_Period的效果
    ; i( i- B, N9 R0 ]' G
  15.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        //时钟分频,会影响PWM的计数个数
    : W! G. }1 l( N$ ]
  16.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    8 U: i1 r. E3 n. N& j6 M1 \
  17.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    " |. |$ c: Q& w, x* R
  18. 4 i" ~; I6 \% p7 O, Y% Y5 \" N
  19.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断& T& H- l+ w7 n) w5 k/ ]# _- v% ^

  20. % S9 E5 L. ]$ w5 c
  21.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
    $ H: }2 C. r2 `$ z: S" I% R
  22.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    5 _, P8 L/ j& a- {2 I6 ~$ ^- C6 s1 z
  23.         NVIC_InitStructure.NVIC_IRQChannelPriority=1;# ~* j# G) O5 S  P* m' |$ F
  24.         NVIC_Init(&NVIC_InitStructure);
    & I+ A' V( ~7 q' ~3 j

  25. 0 W- J- U! }# Z' M8 n
  26.         TIM_Cmd(TIM3, ENABLE);        
    ' p/ p, c5 r9 a6 V" x
  27. }
    3 S, |* K- ]7 L* ]9 q9 ~6 t; d

  28. - N; n6 E8 U$ p9 F
  29. void TIM3_IRQHandler(void)   //TIM3中断7 l" m4 i! u" X9 m1 X( L  G& v
  30. {
    % S1 I0 ]3 i# W* v% ~  }8 ^) h
  31.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否, t' b* \: u$ L) K- q5 I
  32.                 {          9 R# Q2 `' r1 E& Q: }
  33.                         
    % j9 m+ Z9 C5 ?# V
  34.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志
    5 ^" _3 |5 V4 Q& U* f- Z9 g! a

  35. " p9 ^; A: w& R6 @7 F2 H
  36.                 }, r2 h* Z6 T: K' ], O
  37. }
复制代码

, h1 `1 O, ^2 g0 G9 z1 e.h文件5 K: l' M4 l+ O: H, R: n' g
  1. #ifndef _TIME_H5 l4 @1 m6 Y) e# r6 {& Q8 G* Q
  2. #define _TIME_H
    ! D; i5 X4 r7 a) Y3 s7 a% g8 t1 q
  3. #include "stm32f0xx.h"5 `6 t/ x7 Q* O1 y5 C* j

  4. . f# u, j! k. g0 W
  5. void TIM3_Int_Init(uint32_t time_us);
    ( D. g9 e/ D, e
  6. # x8 |5 s8 ?( _+ H# q) Q' j
  7. #endif
复制代码

+ {& R9 Q9 B/ N4 _! A) R& `; E
4 M+ q; L5 m+ p; U7 l: b  i* ^  e6 j8 d3 O
收藏 评论0 发布时间:2021-11-25 15:00

举报

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