This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

how to use loops in TIM_IRQHANDLER?

I want to design a variable width PWM waveform using IRQ, but I am unable to use loops in TIM_IRQHANDLERS. below is the code i am using in TIM_IRQHANDLER

void TIM2_IRQHandler(void)
{ volatile float i; volatile int x;
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { for(i=0.5;i>0.0;i=i-0.1) { x=8000000*i; switch(x) { case 4000000: { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =4000000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =2000000; } }

case 3200000: { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =3200000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =1600000; } } case 1600000: { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =1600000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =800000; } } default: { for(int n=0;n<11;n++) { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =800000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =400000; } } } } }
} if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==0) { for(i=0.1;i<0.6;i=i+0.1) { x=8000000*i; switch(x) { case 800000: { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =800000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =400000; } }

case 1600000: { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =1600000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =800000; } } case 3200000: { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =3200000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =1600000; } } case 4000000: { if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,0); htim2.Init.Period =4000000 ; } else { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_3,1); htim2.Init.Period =2000000; } } default:{} } }
}

HAL_TIM_IRQHandler(&htim2);

}