OpenEdv-开源电子网

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

新手想用STM32定时器做一个测频(车速)器,思路(网上找的)如下,不知道两个寄存器咋级联,程序如何实现。

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2015-4-3
在线时间
0 小时
发表于 2015-4-16 06:51:36 | 显示全部楼层 |阅读模式
5金钱
测频原理    
测频原理如图1所示。定时器对内部时钟CK_INT进行1 s的上行计数,通过预装载分频器TIM4_PSC将系统主频FREQ_SYSTEM(72 MHz)7200分频变成10 kHz,当前预分频计数器PSC_CNT对CE上升沿进行上行计数,当前预分频计数器PSC_CNT计的数值与预装载分频器TIM4_PSC相等时,通过或门产生对当前预分频计数器的清零信号SR(signal reset),并产生一个上升沿提供给定时器4的主计数器TIM4_CNT的CE(clock reset),定时器4自动重装寄存器TIM4_ARR设置为9999,将10 kHz频率计到(9999+1)次恰好产生1 s的更新中断。主计数器TIM4_CNT对CE上升沿进行上行计数,当计数到自动重装寄存器TIM4_ARR,就产生了更新中断。当更新产生时,会在定时器4的状态寄存器TIM4_SR的更新标志位UIF置1,并通过设置TIM4_CR2将主控模式设置为输出溢出触发脉冲。


    被测信号通过定时器2的外部触发引脚,经过4分频后,通过设置定时器2的从模式控制寄存器TIM2_SMCR的ETPS为10可将外部信号实现4分频。设置TIM2_SMCR的ECE使能外部时钟使能位,外部时钟输入为ETRF,设置SMS为100,选中的触发输入TRGI的上升沿(这里是来自1 s的TIM4的触发输出),TRGO重新初始化计数器,并且产生一个更新寄存器的信号。分频寄存器TIM2_PSC设置为0分频,TIM2_ARR设置16位计数器最大值为0xffff,当外部信号计数到0xffff时,会产生更新中断标志位UIF置1。    
    定时器2对TIM2_SMCR将触发输入TRGI设置为TIM4_TRGO,从控制器模式设置为复位模式/TRGI的上升沿初始化定时器。通过设置定时器2的比较捕捉寄存器1的CC1S为11,将IC1映射在TRC上,当TIM4溢出事件时,会触发定时器2将TIM2_CNT的值锁存到TIM2_CCR1中,并清除所有定时器的计数器。  
    时序图如图2所示,图中小黑点为计数开始有效时刻,可以看到,当CK_INT为上升沿,且TIM2_ETRF即TIM2_CNT的CE为高时,若定时器4产生溢出TIM4_OV,此时会同步清零信号TIM2_TRGI(SR),锁存信号TIM2_TRC(LE)产生一个有效脉冲,把TIM2_CNT锁存到TIM2_CCR1,然后清除TIM2_CNT。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-16 23:20:45 | 显示全部楼层
你这思路都有了,写代码啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 12:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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