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

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

[复制链接]
szgaos 发布时间:2014-4-18 15:36
    在嵌入式中用的最多,最普通的可以就是IO口和定时器了,在51时代要多个定时器真是难。到了ARM时代这个问题就不是问题了,下面就做32个16位定时器。
 
   在stm32f1系列中TM1,TM8为两个高级定时器,TM2,TM3,TM4,TM5,TM6,TM7,6个普通定时器,它们都是16位的,每个有4路独立的比较器。这样我们就有8*4=32个比较器了,我们就是要用这32个比较器做出32个定时器
    我们先看一下定时器的输出比较功能:资料上说此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时,这里我们就用输出一个固定时间的功能,我们先让计数器的最小计数时间为我们要的时间单元,比如1ms。然后设置比较器的比较值为我们要的定时值,如20,则为20MS,在产生的中断中,我们更改新为比较值,将比较值再加20,则为新的比较对象,下一个中断则在20秒后。
     以下我们取一个定时器,做4个16们定时器,我们要得到4个定时器,分别为10ms,20ms,50ms,200ms.
系统时为72MHZ,通过设置分频值得到一个1KHZ的时钟源,
我们先将定时器的计数器TIMx_ARR设置为65535,计数器加1为1ms,加到最大值时清0重新计数
定义4个变量
   U16  T10MS=10;
   U16 T20MS=20;
  U16 T50MS=50;
  U16 T200MS=200
TIMx_CCR1+=T10MS;
 TIMx_CCR2+=T20MS;
TIMx_CCR3+=T50MS;
TIMx_CCR4+=200MS;
将比较器中断使能
在每个对应中断中加更新比较值的语句
ISR TCMP1()
{
TIMx_CCR1+=T10MS;  //更新比较值
}
 
ISR TCMP2()
{
TIMx_CCR2+=T20MS;  //更新比较值
}
 
ISR TCMP3()
{
TIMx_CCR3+=T50MS;  //更新比较值
}
 
ISR TCMP4()
{
TIMx_CCR4+=T200MS;  //更新比较值




这样每个中断就对就相应的定时时间了。
怎样还可以吧,8*4=32个定时器。
 
收藏 评论0 发布时间:2014-4-18 15:36

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版