硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1567|回复: 2
收起左侧

[有问必答] 移植您的红外遥控器程序到030上误码率特别高,主要出现在case 3中的TotalWitdh会出现一个极大的值,您能帮分析下大至问题所在...

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2021-9-17 09:38:00 | 显示全部楼层 |阅读模式
出现在TotalWitdh = s_LowWidth + _width;其中 _width宽度为5000-6000左右。其中可以确定的是硬件没有什么问题。我在改动部分仅改动了TIM3的捕捉通道


void TIM3_IRQHandler(void){        
        uint16_t NowCapture;
        uint16_t Width;
       
        if (TIM_GetITStatus(TIM3, TIM_IT_CC2))
        {
                TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

                NowCapture = TIM_GetCapture2(TIM3);        /* 读取捕获的计数器值,计数器值从0-65535循环计数 */

                if (NowCapture >= g_tIR.LastCapture)
                {
                        Width = NowCapture - g_tIR.LastCapture;
                }
                else if (NowCapture < g_tIR.LastCapture)        /* 计数器抵达最大并翻转 */
                {
                        Width = ((0xFFFF - g_tIR.LastCapture) + NowCapture);
                }                       
               
                if ((g_tIR.Status == 0) && (g_tIR.LastCapture == 0))
                {
                        g_tIR.LastCapture = NowCapture;
                        return;
                }
                               
                g_tIR.LastCapture = NowCapture;        /* 保存当前计数器,用于下次计算差值 */
               
                IRD_DecodeNec(Width);                /* 解码 */               
        }

}


回复

使用道具 举报

0

主题

290

回帖

290

积分

高级会员

积分
290
发表于 2021-9-18 08:55:55 | 显示全部楼层
我现在的都是直接只捕捉下降沿,然后计算2次下降沿之间的时间来判读是哪种数据。遥控器是NEC编码的。因为程序需要个ns的计数器,所有时间直接可以从ns计数器获取到了,不存在浪费定时器的问题。供参考。
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2021-9-22 08:38:26 | 显示全部楼层
恩,的确这样可以提高一倍的效率
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 18:57 , Processed in 0.037653 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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