本帖最后由 canghaiwuhen 于 2016-11-7 17:34 编辑
用原子哥的例程捕获高电平时间没问题,将上升沿和下降沿互换捕获低电平时间也没问题
但想同时捕获高低电平时间该怎么做?
TIM2CH1_CAPTURE_VAL1 捕获的高电平时间没问题,但TIM2CH1_CAPTURE_VAL2捕获的低电平时间偏差很大
[mw_shl_code=c,true] if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
{
if (TIM2CH1_CAPTURE_STA & 0X40) //捕获到一个下降沿
{
TIM2CH1_CAPTURE_STA |= 0X80; //标记成功捕获到一次高电平脉宽
TIM2CH1_CAPTURE_VAL1 = TIM_GetCapture1(TIM2);//获取当前的捕获值.
TIM_SetCounter(TIM2, 0);
TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获
}
else //还未开始,第一次捕获上升沿
{
//TIM2CH1_CAPTURE_STA = 0; //清空
//TIM2CH1_CAPTURE_VAL = 0;
TIM2CH1_CAPTURE_STA |= 0X40; //标记捕获到了上升沿
TIM2CH1_CAPTURE_VAL2 = TIM_GetCapture1(TIM2);//获取当前的捕获值.
//TIM_Cmd(TIM2, DISABLE); //关闭定时器2
TIM_SetCounter(TIM2, 0);
TIM_OC1PolarityConfig(TIM2, TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获
//TIM_Cmd(TIM2, ENABLE); //使能定时器2
}[/mw_shl_code]
补充:只有一个IO口,不能用双引脚双沿捕获方式
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
就是既要捕获高电平时间,也要捕获低电平时间
2.一旦捕获先设置捕获模式等再进行其他数据处理
一周热门 更多>