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);

版权声明:本文为qq_43477252原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。