[STM32F1] 关于精确测频率

[复制链接]
1955|15
 楼主| 王七七 发表于 2014-10-28 15:12 | 显示全部楼层 |阅读模式
hz, RS, ST, IDT, mx
用捕获方式测频率 但是不能测到hz,测出来单位就直接是Khz了 求解,或者有没有更好的方法呀


部分代码 关键是数据处理

main()
{

void TIMx_EXTERN_CLK_INIT(void)
{
        //初始化定时器时钟
//         RCC->APB1RSTR |= 1 << (x-2);
//         RCC->APB1RSTR &= ~(1<<(x-2));
//         RCC->APB1ENR |= 1 << (x-2);
       
        RCC->APB1RSTR |= 1 << 0;//定时器2复位
        RCC->APB1RSTR &= ~(1<<0);//无作用?

        RCC->APB1ENR |= 1 << 0;//定时器2时钟开启
        //*********************

        TIMx_PIN_INIT();//PA1引脚初始化

        TIMx->CCMR1 |= 1 << 8;                                //第8位置1 CC2S[1:0] == 01 CC2通道被配置为输入
        //无滤波器
        TIMx->CCER |= 0 << 5;                                //极性为高电平计数   
        TIMx->SMCR |= 1 << 0 | 1 << 1 | 1 << 2;                        //选择外部时钟模式1-选中的触发输入的上升沿驱动计数器。
        TIMx->SMCR |= 1 << 6 | 1 << 5;                                          //选择T2作为触发源  110:滤波后的定时器输入2(TI2FP2)

        TIM2->DIER |= 1 << 0;                 //中断使能
        MY_NVIC_Init(1, 1, TIM2_IRQChannel, 2);//设置中断优先级
      TIMx->CR1 |= 1 << 0;                                //开始计数

~~~~~~~
  while(1)
        {
                TIM2->CR1 |= 1 << 0;//使能定时器
                delay_ms(1000);//延时1s
                CLOSE_CNT();//停止计数
                fre = Cnt*65535+TIM2->CNT;//计算频率
                dis(fre);//显示频率
                Cnt=0;
                TIM2->CNT=0;
    }
}


void TIM2_IRQHandler(void)//中断处理
{
        if (TIM2->SR & (1 << 0))
        {
                Cnt++;
                TIM2->SR &= ~(1 << 0);
        }
}


 楼主| 王七七 发表于 2014-10-28 15:13 | 显示全部楼层
自己先顶一个 好困
dirtwillfly 发表于 2014-10-28 16:24 | 显示全部楼层
又改玩stm32了?
bobde163 发表于 2014-10-28 17:20 | 显示全部楼层
很好奇,KHz级别测出来精确吗?
huzi2099 发表于 2014-10-28 17:29 | 显示全部楼层
延时一秒自然计不到HZ咯
coody 发表于 2014-10-28 21:58 | 显示全部楼层
捕捉N个脉冲的时间t(通常接近1秒,0.1us),就可以计算了,这就是等精度测量。
比如捕捉到56个脉冲的时间是0.9823457s,则频率 = 56/0.9823457=57.0064HZ
wallace_tsou 发表于 2014-10-29 10:00 | 显示全部楼层
測Hz的話,用計次  /  時間。時間用另一個TIMx。
mmuuss586 发表于 2014-10-30 08:30 | 显示全部楼层
捕获时钟源时钟设低点看看;
 楼主| 王七七 发表于 2014-10-31 19:58 | 显示全部楼层
dirtwillfly 发表于 2014-10-28 16:24
又改玩stm32了?

我一直都在多方面发展。。。32,K60,XS128,。。。。
 楼主| 王七七 发表于 2014-10-31 19:58 | 显示全部楼层
bobde163 发表于 2014-10-28 17:20
很好奇,KHz级别测出来精确吗?

精确的
 楼主| 王七七 发表于 2014-10-31 20:00 | 显示全部楼层
huzi2099 发表于 2014-10-28 17:29
延时一秒自然计不到HZ咯

和延时好像没关系样诶
dirtwillfly 发表于 2014-10-31 21:58 | 显示全部楼层
王七七 发表于 2014-10-31 19:58
我一直都在多方面发展。。。32,K60,XS128,。。。。


强啊!
bobde163 发表于 2014-11-1 20:03 | 显示全部楼层
王七七 发表于 2014-10-31 19:58
精确的

这样的话,感觉像是你用于计量被测信号周期的定时器溢出了,才会出现现在KHz的情况,你可以把该定时器的时钟频率设置得低一些,保证一个信号周期内不会溢出看能不能解决
 楼主| 王七七 发表于 2014-11-1 20:13 | 显示全部楼层
dirtwillfly 发表于 2014-10-31 21:58
强啊!

时刻像群主看齐
 楼主| 王七七 发表于 2014-11-1 20:14 | 显示全部楼层
bobde163 发表于 2014-11-1 20:03
这样的话,感觉像是你用于计量被测信号周期的定时器溢出了,才会出现现在KHz的情况,你可以把该定时器的 ...

嗯嗯 我试试谢谢了
bobde163 发表于 2014-11-1 22:03 | 显示全部楼层
王七七 发表于 2014-11-1 20:14
嗯嗯 我试试谢谢了

调试的时候加相应的断点,确定一下看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:21ic TI技术&感情交流2群 311421422 欢迎到同僚|校友|老乡会和新老朋友叙叙旧,传送门在此,一触即达~

46

主题

2167

帖子

35

粉丝
快速回复 在线客服 返回列表 返回顶部