野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9130|回复: 1

电容按键超时处理

[复制链接]
发表于 2018-6-27 19:57:29 | 显示全部楼层 |阅读模式
/**
  * @brief  获取定时器捕获值
  * @param  无
  * @retval 定时器捕获值。如果超时,则直接返回定时器的计数值。
  */
uint16_t TPAD_Get_Val(void)
{               
        // 每次捕获的时候,必须先复位放电
        TPAD_Reset ();

        // 当电容按键复位放电之后,计数器清0开始计数
  TIM_SetCounter (TPAD_TIM,0);
        // 清除相关的标志位
        TIM_ClearITPendingBit (TPAD_TIM, TPAD_TIM_IT_CCx | TIM_IT_Update );

        // 等待捕获上升沿,当电容按键充电到1.8V左右的时候,就会被认为是上升沿
        while(TIM_GetFlagStatus (TPAD_TIM, TPAD_TIM_IT_CCx) == RESET)
        {
                // 如果超时了,直接返回CNT的值
                if ( TIM_GetCounter (TPAD_TIM) > TPAD_TIM_Period - 500 )
                {
                        return TIM_GetCounter (TPAD_TIM);
                }                        
        }

        // 获取捕获比较寄存器的值
        return TPAD_TIM_GetCapturex_FUN(TPAD_TIM);
}

超时处理那里没有看懂什么意思……
超时后为什么要返回CNT的值呢…
要是一直超时怎么办,返回去有什么用处吗………

回复

使用道具 举报

发表于 2018-6-27 21:38:29 来自手机 | 显示全部楼层
如果超时不返回就一直在死循环里边了,代码都卡死了,更严重
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-15 06:58 , Processed in 0.028830 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表