新手入门
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2015-9-20
- 在线时间
- 0 小时
|
5金钱
使用STM32F103ZET6定时器5通道1来输入捕获测量方波频率。但只测前四个上升沿然后关闭输入捕获功能。然后用第2个上升沿的捕获值减去第1个上升沿的捕获值,第3个上升沿的捕获值前去第2个上升沿的捕获值,第4个上升沿的捕获值减去第3个上升沿的捕获值(既测连续上升沿的捕获值然后相减从而测得频率)但是第1、2次的捕获值正确(测的频率也正确)但第3、4次测的捕获值不对,出现胡乱数据。不知什么原因?哪位大神可以帮小弟解决一下!
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5, TIM_IT_CC1) == SET)//上升沿到来发生捕获事件
{
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1);//清除中断标志位
if(capture_number_1== 0)
{
IC5ReadValue1 = TIM_GetCapture1(TIM5);//获取第一个上升沿的捕获值
capture_number_1 = 1;
}
else if(capture_number_1 == 1)
{
IC5ReadValue2 = TIM_GetCapture1(TIM5); //获取第二个上升沿的捕获值
capture_number_1 = 2;
}
else if(capture_number_1 == 2)
{
IC5ReadValue3 = TIM_GetCapture1(TIM5); //获取第三个上升沿的捕获值
capture_number_1 = 3;
}
else if(capture_number_1 == 3)
{
IC5ReadValue4 = TIM_GetCapture1(TIM5); //获取第四个上升沿的捕获值
TIM_Cmd(TIM5, DISABLE);
}
switch(1)
{
case 1: {
if(IC5ReadValue2 >IC5ReadValue1 )
{
Capture = (IC5ReadValue2 - IC5ReadValue1); //未溢出第二个捕获值减去第一个捕获值得到两次计数差值
}
else
{
Capture = ((0xFFFF -IC5ReadValue1 ) + IC5ReadValue2); //溢出定时器重装,需要将差值做补偿运算
}
TIM5Freq1=1000000/Capture;
printf("Frequency1:%.2f HZ\r\n",TIM5Freq1);
}
case 2: {
if(IC5ReadValue3 > IC5ReadValue2 )
{
Capture = (IC5ReadValue3 - IC5ReadValue2); //未溢出第二个捕获值减去第一个捕获值得到两次计数差值
}
else
{
Capture = ((0xFFFF - IC5ReadValue2) + IC5ReadValue3 ); //溢出定时器重装,需要将差值做补偿运算
}
TIM5Freq2=1000000/Capture;
printf("Frequency2:%.2f HZ\r\n",TIM5Freq2);
}
case 3: {
if(IC5ReadValue4 > IC5ReadValue3)
{
Capture = (IC5ReadValue4 - IC5ReadValue3); //未溢出第二个捕获值减去第一个捕获值得到两次计数差值
}
else
{
Capture = ((0xFFFF -IC5ReadValue3 ) +IC5ReadValue4 ); //溢出定时器重装,需要将差值做补偿运算
}
TIM5Freq3=1000000/Capture;
printf("Frequency3:%.2f HZ\r\n", TIM5Freq3);
}
}
}
}
|
|