打印

stm32测频率问题

[复制链接]
4461|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lin111000713|  楼主 | 2013-7-13 08:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的:用stm32测量频率,测量频率范围越大越好   做法:我是利用定时中断+外部中断来实现的。具体做法:外部中断每来一个脉冲上升沿促发中断一次,频率值加1,记到0.5s后定时器中断发生,显示此时频率的值。但是频率上不去,只能到700K左右。有没有更好的方法测频率呢?

/*外部中断处理函数*/

void EXTI0_IRQHandler(void)
{
g_freq++;  //计数值,最后当频率值显示出来
EXTI->PR=1<<0;  //清除LINE0上的中断标志位
}
/*定时器中断服务函数*/
void TIM3_IRQHandler(void)   //TIM3中断
{
    flag = 1;    //之里的flag用于main函数里面判断是否0.5S到了,如果到了则显示出频率值
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源   
}

main函数关键部分:
while(1)
   {
    if(flag)
    {
        Freq_tmp = g_freq;
        printf("%d\n", Freq_tmp);//之里用串口打印出频率值在终端上
      g_freq = 0;    //频率值清零,重新计数
      flag = 0;    //清除标记,下次0.5S定时器中断到来后重新显示出来
  }
      
   }
沙发
yangweiping| | 2013-7-13 08:25 | 只看该作者
可以试试输入捕获的方式

使用特权

评论回复
板凳
airwill| | 2013-7-13 13:06 | 只看该作者
本帖最后由 airwill 于 2013-7-13 13:07 编辑

每个脉冲都要中断服务, 这么麻烦, 自然上不去了.
定时器用外部时钟信号, 就可以最高的采样频率. 而且软件非常简单.

使用特权

评论回复
地板
MOn51| | 2013-7-13 16:07 | 只看该作者
这是个蠢办法

使用特权

评论回复
5
crazy2012| | 2014-2-26 10:58 | 只看该作者
airwill 发表于 2013-7-13 13:06
每个脉冲都要中断服务, 这么麻烦, 自然上不去了.
定时器用外部时钟信号, 就可以最高的采样频率. 而且软件非 ...

是指输入捕获模式么

使用特权

评论回复
6
airwill| | 2014-2-26 11:45 | 只看该作者
使用外时钟

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

0

粉丝