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

STM32库函数版 定时器中断

[复制链接]
feixiang20 发布时间:2017-5-26 09:59
定时器时间计算公式:
( v. g$ M4 H' y" T% C5 K          Tout = ( ( psc+1) / Tclk ) * (arr+1)
! W; q! b! l0 i+ ~     Tout :     溢出时间值(μs)0 R* N6 P/ l; w: z5 P
     psc:        预分频值(例如系统时钟为72MHz,APB分频1,则该值为7200)
/ j9 C: F9 v6 o2 `! [3 `2 t     Tclk:       输入时钟(MHz)
4 ~$ c7 u$ P! o+ j2 q8 O9 F. E     arr:         自动装载值(根据需要溢出的时间,通过预分频值和时钟倒推出自动装载值为多少)
4 p  F- j' ]; Z8 P例如:需要TIM2每 1s 中断一次(APB为1分频)) H7 Z. L4 W. \
          1000000μs = ((7199+1)/72MHz) * (arr+1)   ----->    由此可求出 arr的自动装载值为9999) w/ d" z! F- z

; _! j! q& d$ F9 G关于TIM2 ~ TIM7 的初始化' w+ d! X& s+ |, P$ \, F+ J

# }2 c7 C' C, G) o8 N/ d8 x! `/ c" p8 C
        1. 使能该定时器的时钟(TIM2 ~ TIM7是挂载在APB1下)
2 |3 }$ V+ u# L1 |. S2 o
8 U4 ?/ v: n- j6 x" s7 a, K) P* g               RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能或者失能APB1外设时钟
& q  e# z  u2 s/ L" X3 C/ l# W: j3 N+ v) c3 ~
* d5 o/ d/ O  ~7 p
        1. 初始化定时器
" R1 i. Y- l+ m& \$ m) c* s, K# B9 G8 Y
          TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;! R; c; O! e2 e) u& B
TIM_TimeBaseStructure.TIM_Prescaler = psc;//预分频值
  n5 F" o; F: l  WTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
2 \$ S, B% n- r  }TIM_TimeBaseStructure.TIM_Period = arr;//在下一个更新事件装入活动的自动重装载寄存器周期的值
9 {: h# Z  w/ w4 [TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//TDTS = Tck_tim2 E0 x4 _( C6 q
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//初始化
! |. j! k/ H, O4 |% p
& S# G, q3 Y. c, ~( d
$ P" R  R& Q* e  W  M: @/ d        1.  初始化NVIC+ }( c/ e* C& V$ A( p

& X2 l7 T  f& X
9 Q9 e3 z" M  z' i  R1 y* f              NVIC_InitTypeDef NVIC_my_init ;
& k0 E8 r4 u- f+ m5 s    NVIC_my_init.NVIC_IRQChannel = TIM2_IRQChannel ;& @2 B7 v, A0 _( u( i
    NVIC_my_init.NVIC_IRQChannelPreemptionPriority = 0 ;( P6 b( K* t: V' H2 {
    NVIC_my_init.NVIC_IRQChannelSubPriority = 3 ;
1 v1 {" y0 M8 l: ^1 D    NVIC_my_init.NVIC_IRQChannelCmd = ENABLE ;, \- U, h' E) P5 _* U8 {9 l' o
    NVIC_Init(&NVIC_my_init) ;7 y  P) \3 Y4 ?  q5 k
9 R$ v% O3 ?' E( J

+ T( H& g1 l5 N) s        1. 打开定时器中断! M8 U0 p5 P$ j6 ~. q7 N
% i: s/ l! u3 m
  }+ c, E) x2 y' v
               TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);5 Y3 r. m8 r; p1 J! }& s
/ e1 z6 |5 Q# P8 `

5 l* T  P1 K9 L1 Z1 k! |        1.       打开定时器' R! |% g' f3 D8 @& c9 T) E( T. [
8 V, t  a7 |5 E; R5 X8 _1 Z( Q

. K- {& ~- H1 E9 _0 A8 v9 s     TIM_Cmd(TIM2, ENABLE);* n; I& f$ B- ^+ `

) b' |8 @) X8 m2 i" _1 U" l# b: Z6 k, e. A
        1.     编写定时中断函数( r0 t: q3 ^- o4 w' U2 t; b4 J8 j

( }0 P1 I0 @( e# q2 Fvoid TIM2_IRQHandler(void): ?  O3 Y7 G! Q
{/ G" q5 a, s  h$ {
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){
' U$ |( c: B& ]( M# M4 [7 H        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);          //     清空中断标志位8 H; T) @& D) T' C  a
          //函数编写----尽量只设置标志位,避免中断嵌套7 k5 ^5 G  C' d6 s" N
    }6 }1 j' _% ?6 L
}
* a+ z8 J6 v) N0 _  b; V1 b9 L
9 F8 O* ]7 L) O; t
收藏 评论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 手机版