#define HEADER_CODE_START 4500    // Change according to IR Line Code
#define HEADER_CODE_END   4600    // Change according to IR Line Code
#define LOGIC_HIGH_START  1600    // Change according to BIT 1 Code
#define LOGIC_HIGH_END    1700    // Change according to BIT 1 Code
#define LOGIC_LOW_START   500     // Change according to BIT 0 Code
#define LOGIC_LOW_END     600     // Change according to BIT 0 Code
#define MAX_BIT           32      // Change according to Number of bit received
uint16_t pulse_width;
uint8_t flag=1,u8_header,IR_Code[MAX_BIT]; 
int counter;
if(flag)
  {
        pulse_width=TIM17 -> CNT ;
		if(pulse_width>HEADER_CODE_START && pulse_width<HEADER_CODE_END) {u8_header=1;counter=-1;}
		if(u8_header){
		if(pulse_width>LOGIC_HIGH_START && pulse_width<LOGIC_HIGH_END)IR_Code[counter]=1;
		else if(pulse_width>LOGIC_LOW_START && pulse_width<LOGIC_LOW_END)IR_Code[counter]=0;
		counter++;
		if(counter>(MAX_BIT-1)){
			// Your control logic here
			u8_header=0;
		              }
		}
		TIM17->CNT=0;
		flag=0;
  }
  else
  {
   HAL_TIM_Base_Start(&htim17);
   flag=1;
   TIM17->CNT=0;
  }