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

STM32库函数版 定时器中断

[复制链接]
feixiang20 发布时间:2017-5-26 09:59
定时器时间计算公式:
% q; _7 H7 K0 a          Tout = ( ( psc+1) / Tclk ) * (arr+1)# {+ c, O0 G& I( u
     Tout :     溢出时间值(μs)
$ D/ C$ w8 A# Q. ]& |" H     psc:        预分频值(例如系统时钟为72MHz,APB分频1,则该值为7200)
8 O; D, N3 O, h( }     Tclk:       输入时钟(MHz)5 o* d* m' A  z
     arr:         自动装载值(根据需要溢出的时间,通过预分频值和时钟倒推出自动装载值为多少)6 n4 l5 {( ?8 C! ~* @
例如:需要TIM2每 1s 中断一次(APB为1分频)9 g; l  Y& q! s4 C
          1000000μs = ((7199+1)/72MHz) * (arr+1)   ----->    由此可求出 arr的自动装载值为99992 T2 f. [3 i5 N) u  I' J
; Z) G) @5 \! J0 E, ^0 q
关于TIM2 ~ TIM7 的初始化
2 S' L& {) C, v7 ]# \/ _4 {
4 `! \$ E; S3 ?) T! M3 v. b
1 l7 G. y, A' I0 ]% Z' ]( Y" ]        1. 使能该定时器的时钟(TIM2 ~ TIM7是挂载在APB1下) , v6 w3 M2 n5 A9 s, P  |! p
2 X+ c% r% Z; h3 A+ \+ R
               RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能或者失能APB1外设时钟
0 I& J- m& E. ~& |' Y( y8 a9 F7 D, k' H5 L) h
- V# X* H* o9 P, \
        1. 初始化定时器* V; U% ?. V9 \$ i( |5 w: H$ E7 |

* T, L3 B6 f2 V* y1 {( J          TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
, V+ P5 K1 n5 ?( H8 P0 u+ y) iTIM_TimeBaseStructure.TIM_Prescaler = psc;//预分频值) E; c( c6 n" T, }+ O. I! g1 u
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
7 W9 _4 _% |' `TIM_TimeBaseStructure.TIM_Period = arr;//在下一个更新事件装入活动的自动重装载寄存器周期的值
3 a% B3 F1 }! G9 m# Z! }: H& R' oTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//TDTS = Tck_tim. x" X9 J/ f) J& z2 }! ?1 t
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//初始化
5 S2 G0 I! Z- n4 s
' f; u( b" ^3 D
. i  s0 B; K, [& _        1.  初始化NVIC5 t+ K8 |; g* J" ~0 T. F
8 C8 ~8 a3 P. F9 Q1 g
# v) A/ P: b* D* i8 q$ P
              NVIC_InitTypeDef NVIC_my_init ;! T  X$ X" w2 s, l4 g/ ^) R
    NVIC_my_init.NVIC_IRQChannel = TIM2_IRQChannel ;
9 Z" P. t$ I1 b' j: O; C$ T    NVIC_my_init.NVIC_IRQChannelPreemptionPriority = 0 ;
$ p0 G- l  T  ~) i# a& }4 \9 ]    NVIC_my_init.NVIC_IRQChannelSubPriority = 3 ;
' c8 m$ i  m% y( |    NVIC_my_init.NVIC_IRQChannelCmd = ENABLE ;* p* B4 I% R3 w0 H2 E
    NVIC_Init(&NVIC_my_init) ;
5 F8 q3 z' W- W' l+ I9 P) T9 p& q7 V& E! b2 E. z+ c9 m) m1 E; B5 d

& P# O6 b; L& M) Z        1. 打开定时器中断
- b- {% x1 d% c$ b& |! a( k( R. l+ U* L) V- Q
1 ^' ?. L+ }3 I% g' g$ }3 [7 T
               TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);. q5 K9 x1 v/ i) M% ]
; u* Q+ D; j/ c+ x& H( B7 [( }

& M$ V8 z( X' a$ B        1.       打开定时器1 A9 E+ z  Q& N4 l9 i; W
4 B9 f( U# @& ]5 [9 W0 j

& g" N: l) N: ?! r, O# t! B     TIM_Cmd(TIM2, ENABLE);/ ?& Z* a8 E" y. D- M1 `6 e% w. q

9 ^, i5 M4 C% G. r  f9 y. m' A' M
. H8 \& m- x+ \* d8 [4 Q. y0 w        1.     编写定时中断函数
" M7 o. F6 }4 ]2 Y: w# H
, i. @( _* k. N: M& u9 B/ {void TIM2_IRQHandler(void)
1 [: M2 ^1 ?& J7 d3 F5 \{* L) g! Z. l5 C- V7 [( p9 P
    if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){, @6 b0 f( l3 a. o6 v3 W
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);          //     清空中断标志位* k; h0 b2 e6 b& t5 P
          //函数编写----尽量只设置标志位,避免中断嵌套
' V' K' t+ M5 |; c! |    }) w: ^2 c6 r2 N4 S
}* o' l$ @+ {( y3 U: v
6 d, }. A  U2 P3 a5 _
赞 收藏 评论2 发布时间:2017-5-26 09:59

举报

2个回答
黑夜之狼 回答时间:2017-5-26 15:15:24
LZ最近转载了不少资料过来呀
小小超 回答时间:2017-5-26 15:19:03
楼主的计算方式似乎太复杂了吧。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版