发现stm32f407输入捕获寄存器版本一个现象

2019-07-21 00:47发布

[mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true]if(tsr&0x02)//捕获1发生捕获事件 { if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿 { TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽 TIM5CH1_CAPTURE_VAL=TIM5->CCR1; //获取当前的捕获值. printf("1:%lld us ",TIM5CH1_CAPTURE_VAL); printf("2:%lld us ",TIM5CH1_CAPTURE_VAL); printf("3:%lld us ",TIM5CH1_CAPTURE_VAL); printf("4:%lld us ",TIM5CH1_CAPTURE_VAL); printf("5:%lld us ",TIM5CH1_CAPTURE_VAL); printf("6:%lld us ",TIM5CH1_CAPTURE_VAL); printf("7:%lld us ",TIM5CH1_CAPTURE_VAL); printf("8:%lld us ",TIM5CH1_CAPTURE_VAL); TIM5->CCER&=~(1<<1); //CC1P=0 设置为上升沿捕获[/mw_shl_code] 在在输入捕获定时器中断函数中, [mw_shl_code=c,true]TIM5CH1_CAPTURE_VAL=TIM5->CCR1; //获取当前的捕获值[/mw_shl_code] 在这一句后面加个显示函数显示值,每次显示的都不一样,显示如下

然后,同样的在主函数中
if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
语句后面加入显示函数,
[mw_shl_code=c,true]if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平 { temp=TIM5CH1_CAPTURE_STA&0X3F; temp*=0XFFFFFFFF; //溢出时间总和 temp+=TIM5CH1_CAPTURE_VAL; //得到总的高电平时间 printf("4:%lld us ",TIM5CH1_CAPTURE_VAL); printf("5:%lld us ",TIM5CH1_CAPTURE_VAL); printf("5:%lld us ",TIM5CH1_CAPTURE_VAL);[/mw_shl_code] 显示结果如图


这是为什么?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
a435262767
1楼-- · 2019-07-21 06:22
 精彩回答 2  元偷偷看……
a435262767
2楼-- · 2019-07-21 10:41
怎么每人回? 顶一下
正点原子
3楼-- · 2019-07-21 15:06
因为你加错地方了,printf占用很长时间,你这样加printf到中断服务函数,严重影响程序运行。

一周热门 更多>