STM32F103定时器解码PT2262

STM32F103定时器解码PT2262

项目场景:

使用PT2262作为遥控器,VS838红外管接收信号,STM32F103解码

问题描述:

PT2262遥控器如下:
在这里插入图片描述
PT2262数据发送格式如下:在这里插入图片描述
这里有一个问题,我目前还没见过数据‘0’的波形,是我调的有问题吗,欢迎大家来指正

数据分析:
完整的一次数据传输包括一次同步码,8位地址码,4位数据码,每个码为两个组高低电平组成,经过示波器实地测量后发现,没有发现数据‘’0‘’码,故我将数据‘F’码当做数据‘0’

解决方案:

使用STM32F103的定时器输入模式
(别问我为什么不用方波输入模式,问就是我画电路板的时候画错了,阿巴阿巴)
在这里插入图片描述
这里只采集高电平时间,但也足够使用了,采集到的数据如下表所示
在这里插入图片描述
这里面DATA4的数据格式存在问题,这个问题本身是偶发性的,最终决定代码中放弃采集奇数位数据(即每一个数据的第一个高电平时间)

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    static uint16_t keytime = 0;

    static uint16_t key = 0;

    if(htim->Instance == TIM4)
    {
        if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4)
        {
            keytime = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_4);
            if(key_flag == 0 &&keytime > 14000 &&keytime < 16000)  //等待码
            {
                key = 0;
                key_flag = 1;
            }
            else if(key_flag %2&&keytime> 1000&&keytime<2000)
            {
                key <<= 1;
                key_flag++;
            }
            else if(key_flag %2&&keytime> 200&&keytime<900)
            {
                key <<= 1;
                key_flag++;
            }
            else if(key_flag != 0&&!(key_flag %2) &&keytime> 200&&keytime<900)
            {
                key_flag++;
            }
            else if(key_flag != 0&&!(key_flag %2) &&keytime> 1000&&keytime<2000)
            {
                key |= 0x01;
                key_flag++;
            }

            else if(key_flag == 25)
            {
                if(key == 7)
                    KEY_SetStatu(1);
                else if(key == 11)
                    KEY_SetStatu(2);
                else if(key == 13)
                    KEY_SetStatu(3);
                else if(key == 14)
                    KEY_SetStatu(4);

                key_flag = 0;
            }
            else
                key_flag = 0;

        }
        __HAL_TIM_SetCounter(&htim4,0);
    }
}


初始化代码:

    HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_3);
    HAL_TIM_IC_Start_IT(&htim4,TIM_CHANNEL_4);
    HAL_TIM_Base_Start_IT(&htim4);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值