问题:stm32 用TIM1产生互补带死区的PWM 进入中断更改频率和占空比的问题。TIM1产生互补PWM已经配置好,设定了一个数组,数组中是ARR寄存器需要更改的值,想要ARR寄存器和CCR1、CCR2寄存器中的值每出现一个周期进入中断改变一次,这是思路,但是写出来效果却不对,找了两整天也没找到如何修改,很难受,希望高手能来帮助我找到问题所在,非常感谢!
用的PA.8 和PB.13 互补输出带死区的PWM 这步确定正确
uint8_t indexWave[] = {229,214,199,184,169,154,142,132,122,115,98,91,86,81,78,75,72,69,65,62,62,65,69,72,75,78,81,86,91,98,115,122,132,142,154,169,
184,199,214,229}; //7K-25K
void TIM1_UP_IRQHandler(void)
{
static uint8_t pwm_index = 0; //用于PWM查表
static uint16_t period_cnt = 0; //用于计算周期数
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //TIM_IT_Update
{
period_cnt++;
if(period_cnt >= 1) //若输出的周期数大于10,输出下一种脉冲宽的PWM波
{
//改PWM的频率
TIM_SetAutoreload(TIM1, indexWave[pwm_index]);
TIM_SetCompare1(TIM1, (indexWave[pwm_index]+1)*pp/100);
TIM_SetCompare2(TIM1, (indexWave[pwm_index]+1)*pp/100);
pwm_index++; //标志PWM表的下一个元素
if( pwm_index >=78) //若PWM脉冲表已经输出完成一遍,重置PWM查表标志
{
pwm_index=0;
}
period_cnt=0; //重置周期计数标志
}
TIM_ClearITPendingBit (TIM1,TIM_FLAG_Update); //必须要清除中断标志位
}
}
|