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

STM32库函数版 定时器中断

[复制链接]
feixiang20 发布时间:2017-5-26 09:59
定时器时间计算公式:
% t: B2 M& J- |          Tout = ( ( psc+1) / Tclk ) * (arr+1)
; j1 P4 q3 r4 K     Tout :     溢出时间值(μs)
) u; @8 C$ ]2 k. }' E     psc:        预分频值(例如系统时钟为72MHz,APB分频1,则该值为7200)
. \) L$ d# k& B! J/ G     Tclk:       输入时钟(MHz)
3 D' B( N- y+ B     arr:         自动装载值(根据需要溢出的时间,通过预分频值和时钟倒推出自动装载值为多少)( b) c9 x3 `+ K. I# q
例如:需要TIM2每 1s 中断一次(APB为1分频)! D9 M; c, k1 V0 ^4 ~" I" ]
          1000000μs = ((7199+1)/72MHz) * (arr+1)   ----->    由此可求出 arr的自动装载值为9999$ H* E% }; w7 g! p5 {
& f6 o" x4 k* j! B/ D
关于TIM2 ~ TIM7 的初始化
) v% o( O- \7 v2 @, i! }7 _- J: n% m: T
- Y) P& U/ c8 V$ q
        1. 使能该定时器的时钟(TIM2 ~ TIM7是挂载在APB1下) + Z* d" a1 s  d3 Y+ t; s* |* q
- T& G& ~# x& Z; h7 P  K
               RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能或者失能APB1外设时钟
# Y9 E2 l- I/ h2 _, ~8 I+ S- d
  h! t) c  E3 C( k! Q! a
' W% ^6 X. q- X- }/ J2 E/ X        1. 初始化定时器
! i; _9 X9 q4 W& u* ^4 R5 b  e) t9 {5 H; ?9 I2 O& _# i
          TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
" w' F2 n; t" [7 o! a& vTIM_TimeBaseStructure.TIM_Prescaler = psc;//预分频值, i& p5 H" R# b
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
- p, l! h& ~5 n0 [8 u' N# iTIM_TimeBaseStructure.TIM_Period = arr;//在下一个更新事件装入活动的自动重装载寄存器周期的值3 U1 @/ N: f3 u. L
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//TDTS = Tck_tim
! o5 n2 u) J' \- tTIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//初始化
. J8 J0 V& h6 J5 f
! k( s! ^# ~. D# e7 W: }" w4 v$ B7 w$ z8 q* d/ w  T9 o. E
        1.  初始化NVIC0 r" ]1 g0 `0 K/ J9 `, W
. m# n2 \7 K/ i  S# S8 b$ U/ ^
$ F: c; F+ A4 C- L
              NVIC_InitTypeDef NVIC_my_init ;
* u9 L4 ?* g! o- |    NVIC_my_init.NVIC_IRQChannel = TIM2_IRQChannel ;& C6 a5 ^: H8 r6 C
    NVIC_my_init.NVIC_IRQChannelPreemptionPriority = 0 ;; t: z( A& Q) n& x5 o# E
    NVIC_my_init.NVIC_IRQChannelSubPriority = 3 ;
( }' y7 E! o/ n1 S2 v2 Y    NVIC_my_init.NVIC_IRQChannelCmd = ENABLE ;3 J8 F$ y6 `" s, n/ b9 Q' d* y! t
    NVIC_Init(&NVIC_my_init) ;1 l# E" b8 T6 U% C% ]

: i  k  `2 X2 w0 h7 ~" q/ W& V. C( A7 c7 T* U( S- E
        1. 打开定时器中断
- X& d4 w' L- T4 S$ d' @
5 x4 M+ d9 [/ P4 W  l: k( T& |! f+ f
               TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);
9 E  x( F2 y; z0 Y
/ T1 d/ A/ a) S0 m# W, ^# f9 U6 I" t9 g! ~# b9 y4 K9 I
        1.       打开定时器; {+ z6 |" i: c! s  a
  M( x+ r- y, I# C4 M( {5 j( I  p

9 W1 V0 M# G. s1 o5 J     TIM_Cmd(TIM2, ENABLE);
+ Q. `9 K7 r- l, \
  g+ l/ b% X( f9 W4 [. ^+ }' K
# m3 n% y( j5 v3 r, R; ]4 R        1.     编写定时中断函数' y$ [6 Y* I0 \6 D
" g) O/ W: C# J  [& Z7 D1 V0 O1 Q
void TIM2_IRQHandler(void)
- H0 s! F, n9 {, V  [7 w{2 U9 ?* h( n1 ^( A$ w  X( b' ?
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){0 e/ w8 c% E, z6 Q/ @" y" s
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);          //     清空中断标志位- g5 g6 C/ O1 \- B. [% I
          //函数编写----尽量只设置标志位,避免中断嵌套
2 @4 S, t2 q% k    }
! r7 u! Z  b$ X: [}
, k/ ^% Q. Y0 r% u3 M6 D* S( k0 G4 F% t* c
收藏 评论2 发布时间:2017-5-26 09:59

举报

2个回答
黑夜之狼 回答时间:2017-5-26 15:15:24
LZ最近转载了不少资料过来呀
小小超 回答时间:2017-5-26 15:19:03
楼主的计算方式似乎太复杂了吧。

所属标签

相似分享

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