战舰开发板电容触摸按键程序中的捕获问题

2019-08-17 02:37发布

u16 TPAD_Get_Val(void) {    TPAD_Reset(); while(TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)//等待溢出 { if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)return TIM_GetCounter(TIM5);//超时了,直接返回CNT的值 }; return TIM_GetCapture2(TIM5);   } 

如上,把 return TIM_GetCapture2(TIM5);放在循环里面怎么就不行了呢??,通过仿真验证 TIM_GetITStatus(TIM5, TIM_IT_CC2) 一直为reset所以一直进不去,但是为什么会一直为RESET呢??
另外,还有一个问题上面所说的“等待溢出”不是太明白,应该是等待上升沿到来吧??根据手册检测到捕获标志位后读取标志位会清零标志位,所以while()语句实际上只运行一次


我对 while(TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET) 的理解是:检测到上升沿后清除捕获标志,并进入if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)的判断


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
E-angel
1楼-- · 2019-08-19 00:35
回复【8楼】正点原子:
---------------------------------
今天回来拿板子照你那样改了while(TIM_GetITStatus(TIM5, TIM_IT_CC2) == RESET) 触摸没有反应了(绿灯不亮),红灯闪烁的频率不对了,硬件仿真中。。。
DDL-龙
2楼-- · 2019-08-19 01:29
回复【12楼】E-angel:
---------------------------------
说实话那个地方我也不理解,可不可以解释下
tuzihog
3楼-- · 2019-08-19 04:51
标注一下。
有兴趣的可以参考这个链接:http://www.openedv.com/posts/list/29022.htm
chengmingluo
4楼-- · 2019-08-19 07:02
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-08-19 11:29
==reset
15071215373
6楼-- · 2019-08-19 15:32
解疑答惑啊

一周热门 更多>