OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3400|回复: 0

STM32F103 定时器级联

[复制链接]

1

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2017-7-22
在线时间
14 小时
发表于 2017-7-29 20:32:13 | 显示全部楼层 |阅读模式
最近在用stm32计频率的题目,使用一个定时器外部时钟源计数,另一个定时器定时读出计数模式下中寄存器的数值的方式测频。但是如果设置1S定时测稍高(65536HZ)的频率就要用中断了,如果频率再高就会频繁进入中断导致结果的巨大误差。因此我想到STM32F1有定时器级联的功能,查阅网上的级联的资料,写的都不够简单直接,因此在这分享一下我摸索了两天的结果。
首先,要级联两个定时器,就一定会有一个主定时器(master)和一个从定时器(slave)。主定时器计数到65535让从定时器计数值加一。查阅手册得知主模式下定时器送到从定时器的同步信息(TGRO)有复位、使能、更新等等(定时器CR2寄存器位6:4即MMS位),这里我们使用更新模式。另外,STM32F103定时器的内部触发连接在手册中也能找到。

QQ图片20170729201106.png

具体的设置语句如下:
        TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Enable);//设置TIM2为主模式,等同  TIM2->SMCR |=0x0080;
        TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);//设置TIM2触发输出模式,这里为更新,等同   TIM2->CR2 |=0x0020;
        TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_External1);//设置TIM4为从模式,选定触发器的的上升沿更新触发器,等同   TIM4->SMCR|=0x0007;
//库中的解释是这样的 TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter.
        TIM_SelectInputTrigger(TIM4, TIM_TS_ITR1);//选定触发器为ITR1,等同    TIM4->SMCR|=0x0010;

通过上面的四步设置就可以将两个16位定时器级联成32位定时器了,当然具体怎么使用还得看具体的情况。比如我使用了将主定时器设置为外部时钟源测频率(计数);将从定时器设定为捕获模式来测周期(两个上升沿之间的时间)。
如果我的理解有不对的地方还请各位大佬指正。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-19 16:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表