黑皮男 发表于 2015-7-31 15:15:12

红外解码波形,感觉不对求指导

我用示波器采集了红外接收头的波形,如附件,但是波形感觉不对啊,请各位指教一下

黑皮男 发表于 2015-7-31 15:22:21

源码,使用捕获的时候,每次采集的数据都不一样,而且在编译时会有警告,dval没有使用过。

int main(void)
{

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* Configure the system clock */
SystemClock_Config();

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM4_Init();

/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}
/* USER CODE END 3 */

}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;



RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8;
RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
HAL_RCC_OscConfig(&RCC_OscInitStruct);

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_TIM34;
PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

__SYSCFG_CLK_ENABLE();

}

/* TIM4 init function */
void MX_TIM4_Init(void)
{

TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_IC_InitTypeDef sConfigIC;

        HAL_NVIC_SetPriority(TIM4_IRQn, 0x0D, 0x00);
        HAL_NVIC_EnableIRQ(TIM4_IRQn);

htim4.Instance = TIM4;
htim4.Init.Prescaler = 64-1;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 10000;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim4);

sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig);

HAL_TIM_IC_Init(&htim4);

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig);

sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_1);

        HAL_TIM_Base_Start_IT(&htim4);
        HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_1);

}

/** Pinout Configuration
*/
void MX_GPIO_Init(void)
{

/* GPIO Ports Clock Enable */
__GPIOB_CLK_ENABLE();

}


/********************************************************************************************************/

__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
/* NOTE : This function Should not be modified, when the callback is needed,
            the __HAL_TIM_IC_CaptureCallback could be implemented in the user file
   */
   uint16_t tmpccer;
    uint32_t dval;
tmpccer = htim->Instance->CCER;
        if(tmpccer&(uint16_t)0x0002==0x00)
        {

                                tmpccer &=(uint16_t)~((uint16_t)0x0002);
                               tmpccer |= (uint16_t)0x0002;
                               htim->Instance->CCER = tmpccer;
                                __HAL_TIM_SetCounter(htim,0);
                               
        }
        else
        {
                        dval = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
       
                                tmpccer &=(uint16_t)~((uint16_t)TIM_CCER_CC1P);
                                tmpccer |= (uint16_t)(TIM_ICPOLARITY_RISING);
                                htim->Instance->CCER = tmpccer;
                               
                               
        }
}

wu1169668869 发表于 2015-7-31 16:21:25

总觉得你那个波形是长按某个按钮的信号
试试单次触发看波形吧

mark0668 发表于 2015-7-31 16:47:13

应该是抓到长按的信号来的.

zhuoyemp4 发表于 2015-7-31 16:50:27

从示波器波形来看,应该是你一直按着不松开遥控器时采集的,是遥控器发出的重复码,但又感觉时间太短,一般重复码周期都大于40ms的。
红外协议有很多种:
1、ITT 协议,如IRT1250 和IRT1260发送芯片。
2、Nokia NRC17 协议,生产厂家Nokia CE。
3、Sharp 协议,主要应用于Sharp 的VCR 中。4、NEC 协议,如HS6221/6222、HT6221/6222 是采用NEC 协议的通用红外遥控发射芯片,亚洲主要用这个。
5、Philips RC-5 协议,发送芯片有:SAA3006、SAA3010、SAA3027
6、还有Philips RC-6 协议,Philips RECS-80 协议,以及Sony SIRC 协议等
单片机解码要看你遥控器发出的码遵循哪种协议(把遥控器拆开看看用的发送芯片是什么型号,查数据手册)。祝你好运!

黑皮男 发表于 2015-7-31 17:07:52

zhuoyemp4 发表于 2015-7-31 16:50
从示波器波形来看,应该是你一直按着不松开遥控器时采集的,是遥控器发出的重复码,但又感觉时间太短,一般 ...

我是用的示波器的捕获模式采集的,这样不会采集到红外的起始码吗

你好我好大家好! 发表于 2015-7-31 17:10:22

      帮顶

zhuoyemp4 发表于 2015-7-31 17:16:40

黑皮男 发表于 2015-7-31 17:07
我是用的示波器的捕获模式采集的,这样不会采集到红外的起始码吗

跟你用什么方式关系不太大,正常采集就可以

JackieLaura 发表于 2015-8-1 09:42:55

来学习的。。。。

00-405686 发表于 2015-8-1 10:04:18

首先你要知道红外发码的编码,在解码吧
页: [1] 2 3
查看完整版本: 红外解码波形,感觉不对求指导