更改以下代码的错误void TIM4_IRQHandler(void) //TIM4中断 { int i; float pwmval; if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //检查TIM中断是否触发 { TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //清除TIM4的中断待处理位 i++; if(i<75) //前四分之三周期 pwmval = pwmval-1.32; //占空比递增到百分之一百 else if(i=>75 && i<100) //后四分之三周期 pwmval = pwmval - 3.96; //占空比递减至零 else if(i == 100) { pwmval = 99; //重置占空比 //led闪烁,debug用 i = 0; //计数重置 } }
时间: 2023-06-18 14:05:00 浏览: 165
以下是更改后的代码:
void TIM4_IRQHandler(void) //TIM4中断
{
static int i = 0; //将i声明为静态变量,保持其值在函数调用之间的持久性
static float pwmval = 0.0; //将pwmval初始化为0.0,避免未初始化的错误
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //检查TIM中断是否触发
{
TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除TIM4的中断待处理位
i++;
if(i < 75) //前四分之三周期
{
pwmval += 1.32; //占空比递增到百分之一百
}
else if(i >= 75 && i < 100) //后四分之三周期
{
pwmval -= 3.96; //占空比递减至零
}
else if(i == 100)
{
pwmval = 99.0; //重置占空比
//led闪烁,debug用
i = 0; //计数重置
}
}
}
主要更改如下:
1. 将i和pwmval声明为静态变量,保持其值在函数调用之间的持久性。
2. 将pwmval初始化为0.0,避免未初始化的错误。
3. 将占空比递增和递减的语句修改为pwmval += 1.32和pwmval -= 3.96,避免浮点数精度损失。
4. 修正了第二个if语句的语法错误,将“=>”修改为“>=”。
阅读全文