OpenEdv-开源电子网

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

关于STM32采集频率问题—求助求助

[复制链接]

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2021-3-4
在线时间
28 小时
发表于 2021-12-5 16:44:52 | 显示全部楼层 |阅读模式
6金钱
关于STM32采集频率问题
如题所示,我使用stm32f103rct6,采用外部计数方式采集频率,重要代码如下:

#include "Fre.h"

void RCC_Configuration(void)
{       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}

void GPIO_Configuration(void)
{       
     GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void Time_Configuration()
{        
     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
     TIM_TimeBaseStructure.TIM_Prescaler = 0;
     TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
     //TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);  // Time base configuration

     TIM_ITRxExternalClockConfig(TIM2,TIM_TS_ETRF);

     TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);  
//     TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);        
     TIM_SetCounter(TIM2, 0);   
     TIM_Cmd(TIM2, ENABLE);
}

//定时器定时函数定时250ms
void TIM5_Timer(void)
{
      TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
      NVIC_InitTypeDef NVIC_InitStructure;  
      TIM_TimeBaseStructure.TIM_Period =2499;
      TIM_TimeBaseStructure.TIM_Prescaler = (7200-1);
      TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
      TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); // Time base configuration
      TIM_ClearFlag(TIM5,TIM_FLAG_Update);
      TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE );
      TIM_Cmd(TIM5, ENABLE);

      NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);               
}

//中断服务函数
#if 1
void TIM5_IRQHandler(void)   
{
        u32 CAPTURE1;
        int count;
        u32 sum;
    volatile  u32 Frequency1;
    if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
        {
            TIM_ClearITPendingBit(TIM5, TIM_IT_Update);
                        CAPTURE1=(u32)TIM_GetCounter(TIM2);

            //CAPTURE2=(u32)TIM_GetCounter(TIM1);                                        
                }
        sum+=CAPTURE1;
        count++;
        if(count==4)
        {
                        Frequency1=(sum/4/0.25);
                        sum=0;
                        count=0;
         }
        TIM_SetCounter(TIM2,0);                                                       
}
#endif


主函数部分如下:
int main(void)
{  
        int i;

        u32 Frequency1;
        SystemInit();

        RCC_Configuration();   
        GPIO_Configuration();       
        Time_Configuration();  
        TIM5_Timer();
//    TIM5_IRQHandler();   

       uart_init(115200);

    while(1)
            {   
                   printf("Frequency1 is %d HZ.\r\n",Frequency1);
               //  printf("Frequency2 is %d HZ.\r\n",Frequency2);
               //Delayms(10);
            for(i=0;i<1000000;i++)
                {}
          }

}



但是测得信号频率显示如下:


自己找不出出错的原因,求各位大佬 赐教,自己急需频率计


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

使用道具 举报

0

主题

668

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1926
金钱
1926
注册时间
2021-8-13
在线时间
262 小时
发表于 2021-12-6 10:45:07 | 显示全部楼层
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2021-12-27
在线时间
11 小时
发表于 2021-12-28 09:59:03 | 显示全部楼层
有没有音频的频率计
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2021-12-28 14:09:08 | 显示全部楼层
你的图片 刷不出来啊???
回复

使用道具 举报

11

主题

2146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4886
金钱
4886
注册时间
2015-1-10
在线时间
611 小时
发表于 2021-12-29 10:32:05 | 显示全部楼层
用输入捕获,只是用计数寄存器的话不是很准
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2021-3-4
在线时间
28 小时
 楼主| 发表于 2021-12-30 17:54:34 | 显示全部楼层
阿侑kevin 发表于 2021-12-29 10:32
用输入捕获,只是用计数寄存器的话不是很准

输入捕获误差有点大,不让用哦
回复

使用道具 举报

11

主题

2146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4886
金钱
4886
注册时间
2015-1-10
在线时间
611 小时
发表于 2022-1-4 09:02:03 | 显示全部楼层
云边有个你 发表于 2021-12-30 17:54
输入捕获误差有点大,不让用哦

你在开什么玩笑?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-21 01:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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