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

【MCU实战经验】+用一颗stm32f103做32个16位定时器

[复制链接]
szgaos 发布时间:2014-4-18 15:36
    在嵌入式中用的最多,最普通的可以就是IO口和定时器了,在51时代要多个定时器真是难。到了ARM时代这个问题就不是问题了,下面就做32个16位定时器。% V& K3 W! ^/ d6 W# z
 
# r$ |6 ~( R8 u8 Y" Z5 j* ~   在stm32f1系列中TM1,TM8为两个高级定时器,TM2,TM3,TM4,TM5,TM6,TM7,6个普通定时器,它们都是16位的,每个有4路独立的比较器。这样我们就有8*4=32个比较器了,我们就是要用这32个比较器做出32个定时器
6 A# U1 i, F$ z" l) j9 N    我们先看一下定时器的输出比较功能:资料上说此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时,这里我们就用输出一个固定时间的功能,我们先让计数器的最小计数时间为我们要的时间单元,比如1ms。然后设置比较器的比较值为我们要的定时值,如20,则为20MS,在产生的中断中,我们更改新为比较值,将比较值再加20,则为新的比较对象,下一个中断则在20秒后。5 p% _3 ~$ R  y( C4 F
     以下我们取一个定时器,做4个16们定时器,我们要得到4个定时器,分别为10ms,20ms,50ms,200ms.% H9 O0 b$ F1 c0 k& n: h
系统时为72MHZ,通过设置分频值得到一个1KHZ的时钟源,+ L# _+ ]  q& Q! ^$ O: t
我们先将定时器的计数器TIMx_ARR设置为65535,计数器加1为1ms,加到最大值时清0重新计数
3 c3 Y+ G% A5 t0 H! \3 O定义4个变量' P* l: l) S$ e
   U16  T10MS=10;2 i) x( ~& j1 m5 }. @( ?+ V
   U16 T20MS=20;
' j' Y5 E( O/ Z9 V/ E0 n" i( B  U16 T50MS=50;
) q) u' F! j" V! S. m1 r  U16 T200MS=200: w( T% _. C; `% G0 x
TIMx_CCR1+=T10MS;# B) P$ e. C- Q! _! n
 TIMx_CCR2+=T20MS;
* ]  |9 L0 ^& v( N7 UTIMx_CCR3+=T50MS;
. X4 z9 u5 _8 {8 Y( N6 I; Q6 `) _TIMx_CCR4+=200MS;
  o- m) I$ N& Q: D/ T, ~将比较器中断使能9 A; `" G  K( e3 c
在每个对应中断中加更新比较值的语句  T2 k7 E& P! _8 J  n) K
ISR TCMP1()
$ b0 e4 H7 b9 z9 c, Z; {, v{
9 g& p. C& b) S$ ?# |  \TIMx_CCR1+=T10MS;  //更新比较值
0 g, D$ X* b! w; j. ]6 {5 X}& J' r5 t" Y. Y( X: e4 v* j5 G7 q: E
 
& I) P7 o2 |, v3 w! X8 @" G6 LISR TCMP2()$ O. P% j* Z5 j! p' H% g1 s' G
{1 J5 q: h8 y, t" t# \  `5 p! g
TIMx_CCR2+=T20MS;  //更新比较值& U9 S7 v1 J! A  ~' z$ ^
}8 B' p9 v7 r3 j. f, Q( R
 
9 H4 ^! l  C4 ?" {' W% f& s$ LISR TCMP3()) ?- ~3 a; e- |7 T/ n
{
9 m/ F/ j% \, g7 h" A% |TIMx_CCR3+=T50MS;  //更新比较值
# j8 A6 F2 R# |9 T0 U: X}
4 |, X5 |& R6 i6 N- j 3 u& }2 a  r1 j* g- i) Y& K  N5 V
ISR TCMP4()2 `' ~5 O, O2 F! y% @$ Y3 X2 m
{* K0 Z& Y7 A  \! ?% u/ F& u
TIMx_CCR4+=T200MS;  //更新比较值
8 w( n7 R) x: h0 b. d} 
1 `! `# J; N. H6 B
, B! ?6 M7 W& e$ s8 S8 J' b3 V: b9 o, V' \
/ `' J' r! C% P: {0 Q5 U
这样每个中断就对就相应的定时时间了。1 _0 x/ ?( B* F" ~
怎样还可以吧,8*4=32个定时器。! ?1 }; X& Y, C6 q0 R" |; P
 
赞 收藏 评论0 发布时间:2014-4-18 15:36

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版