用输入捕获时,我开始用的是TIM3,启用了输入捕获中断与定时溢出中断,采用1us运行时定时器,不停进入定时器溢出中断,调试半天也没有解决问题。
猜想是不是定时器问题,
于是才用了TIM4,TIM5输入捕获中断与定时溢出中断
启用对比后发现TIM3,TIM4是16位定时器,而TIM5是32位定时器,运用TIM5输入捕获与定时器溢出中断,就没有遇到TIM3与TIM4遇到的问题
对于上述问题,我思考了下,查阅了定时器的定时原理,与输入捕获的关系,
发现定时器是从启动就一直计数,不管输入捕获引脚是否有高电平,所以TIM3与TIM4的16位定时器65536us(约66ms)就溢出一次,就造成了当输入捕获与定时器溢出中断同时打开时,溢出中断不同执行,占用了内存。
为了印证我的思想,我在主函数中加入了下面代码,打印定时器计数寄存器当前值,看看计数寄存器运行情况。
RED_TOG;
delayms(500);
printf("TIM5 COUNT : %d \r\n",__HAL_TIM_GET_COUNTER(&htim5));
if( (TIM4CH1_CAPTURE_STA&0x80) )
{
TIM4temp = TIM4CH1_CAPTURE_STA&0x3f;
TIM4temp *= 0xFFFF;
TIM4temp += TIM4CH1_CAPTURE_VAL;
printf("TIM4 Channel_1 Capture rising is %d us \r\n", TIM4temp);
TIM4CH1_CAPTURE_STA = 0;
}
运行结果如下所示:
可以看出,不管输入捕获引脚情况如何,定时器是一直1在运行状态,
所以在输入捕获引脚有输入时,应该记录定时器当前的值,或者清零定时器计数寄存器当前值。
这种小问题,如果不细心,真是让人头疼,当时就是调试了好久才搞通问题所在。
用输入捕获时,我开始用的是TIM3,启用了输入捕获中断与定时溢出中断,采用1us运行时定时器,不停进入定时器溢出中断,调试半天也没有解决问题。
猜想是不是定时器问题,
于是才用了TIM4,TIM5输入捕获中断与定时溢出中断
启用对比后发现TIM3,TIM4是16位定时器,而TIM5是32位定时器,运用TIM5输入捕获与定时器溢出中断,就没有遇到TIM3与TIM4遇到的问题
对于上述问题,我思考了下,查阅了定时器的定时原理,与输入捕获的关系,
发现定时器是从启动就一直计数,不管输入捕获引脚是否有高电平,所以TIM3与TIM4的16位定时器65536us(约66ms)就溢出一次,就造成了当输入捕获与定时器溢出中断同时打开时,溢出中断不同执行,占用了内存。
为了印证我的思想,我在主函数中加入了下面代码,打印定时器计数寄存器当前值,看看计数寄存器运行情况。
RED_TOG;
delayms(500);
printf("TIM5 COUNT : %d \r\n",__HAL_TIM_GET_COUNTER(&htim5));
if( (TIM4CH1_CAPTURE_STA&0x80) )
{
TIM4temp = TIM4CH1_CAPTURE_STA&0x3f;
TIM4temp *= 0xFFFF;
TIM4temp += TIM4CH1_CAPTURE_VAL;
printf("TIM4 Channel_1 Capture rising is %d us \r\n", TIM4temp);
TIM4CH1_CAPTURE_STA = 0;
}
运行结果如下所示:
可以看出,不管输入捕获引脚情况如何,定时器是一直1在运行状态,
所以在输入捕获引脚有输入时,应该记录定时器当前的值,或者清零定时器计数寄存器当前值。
这种小问题,如果不细心,真是让人头疼,当时就是调试了好久才搞通问题所在。