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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
以下源码以定时器3为例,其他可以以此类推
+ u/ d5 s9 j( r( I$ `( F6 B* X& y; ]% f! ^' u8 Z
.c文件8 Y/ q0 r" y, C' g  {# I
  1. #include "Time.h"% x, v! Y% j) r! `! T0 i) B
  2. 1 Y7 H8 c0 _6 T( H  B
  3. void TIM3_Int_Init(uint32_t time_us)
    & ^: y4 V1 w4 W, u2 N' Z
  4. {
    2 b0 N1 M. `+ q; j  {
  5.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    & Z/ R, k9 ~/ S3 x6 V
  6.         NVIC_InitTypeDef NVIC_InitStructure;9 t% u4 W7 ?* L* e

  7. - a" F# Y. Q3 y1 Z! w$ U
  8.         unsigned char prescaler = 1;
    ' t  h& D, {& x/ i2 {
  9.         unsigned char clkDiv = 1;//根据“TIM_ClockDivision”的分频比来定
    ! W3 b! i  H" s& `! b
  10.         unsigned long period = time_us*(SystemCoreClock/1000000) / (prescaler * clkDiv);
    1 v4 l0 u  p0 n/ B' V7 ]. j
  11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    9 C( {0 p6 U6 ~3 `7 B0 n

  12. 7 R; k6 o9 z$ e$ q. v
  13.         TIM_TimeBaseStructure.TIM_Period = period;3 m! f! `" f7 a! K
  14.         TIM_TimeBaseStructure.TIM_Prescaler = prescaler - 1;        //时钟再分频,会影响TIM_Period的效果
    ; q3 K0 t: @5 e
  15.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        //时钟分频,会影响PWM的计数个数
    4 H+ M9 b* o! E' [! I1 ?) [( u( E
  16.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    5 ?$ Z; w/ z. H) e2 J4 q! m& h
  17.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    / P/ V9 C. g9 J9 U
  18. " t! l3 h+ b* W- P6 t+ e
  19.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
    , M  H" t# s0 N2 t" [
  20. / ^( y* K) {- s) z0 ~7 z
  21.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
    & g7 `& D. V' Q' U2 w/ ~. V
  22.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;3 i, E) R, W3 g4 y, A
  23.         NVIC_InitStructure.NVIC_IRQChannelPriority=1;4 ]( D; Z" U9 A$ S6 K: o
  24.         NVIC_Init(&NVIC_InitStructure);
    : r; o$ o5 h6 n+ Q- L
  25. 9 U: G; v( s2 W& h
  26.         TIM_Cmd(TIM3, ENABLE);        
    " s' A' I* W/ x
  27. }
    ; F! f& z( M' o  a. X/ q4 h
  28. . W2 I" V/ x( A" V
  29. void TIM3_IRQHandler(void)   //TIM3中断
    . A  f8 Z+ J7 Q. ^
  30. {
    , R# F: A0 a( M6 S
  31.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否$ u9 \( o! \8 A# v: S! y$ ~
  32.                 {         
    % h1 Q9 L5 V2 h  u: ?- a; \0 g: I
  33.                         # l2 f. u' \+ x( k
  34.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志 ' J8 ]' u; r& K" N" v) E7 b8 g
  35. * S8 _* d3 u3 }) R, S
  36.                 }
    0 b8 s7 J. y1 n' _/ D6 A
  37. }
复制代码
) G) @8 K$ Y9 j, k$ X# C
.h文件. d" t, d; e1 H2 J( i5 l8 U, P
  1. #ifndef _TIME_H  H+ w" D. m5 k
  2. #define _TIME_H
    $ \$ M9 ^0 v: o% T: h" ]2 t
  3. #include "stm32f0xx.h"+ c1 f' k5 c+ v+ q$ G3 S

  4. ) g( R3 j3 ~  z* W: x9 l5 }" W) q
  5. void TIM3_Int_Init(uint32_t time_us);* |6 s0 e: Y/ I: A2 k& g% _% ]
  6. $ D8 H$ Q$ K' x9 S5 c) B! ~
  7. #endif
复制代码

; F0 H! ]/ s9 W/ b% i- A" G" J$ s, A* l0 G* y8 K
, ^! r8 c) r% S9 y6 B! p5 ?
收藏 评论0 发布时间:2021-11-25 15:00

举报

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