STM32采集频率低频用捕获精度很高,测量高频误差有点大,可能是这种方法我掌握的不够好,决定采用外部计数的方法来测量比较高的频率。我是用一个定时器定时一个定时器计数再根据f=n/t算出频率,这种方法方法原理上是定时时间越长求出的频率越高,但是STM32的定时器是16位的,要考虑到计时溢出的情况。关于误差的产生,测量的信号源的精度也是关键,在进入中断的时候,定时器获取计数值都会延时几个微秒,可能会丢失脉冲。我现在这种测量方法测量100K-130k误差大概8-10hz左右。谁有更好的测量高频的方法可以留言交流一下。
先从main函数开始介绍:
int main(void)
{
int i;
SystemInit();
COMInit(COM2, 115200);
RCC_Configuration(); /* System Clocks Configuration*/
GPIO_Configuration(); /* Configure the GPIO ports */
Time_Configuration(); /* Time configuration */
Tim2_Timer();
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++)
{}
}
}
下面是时钟配置函数:
/*******************************************************************************
* Function Name : RCC_C