初级会员

- 积分
- 112
- 金钱
- 112
- 注册时间
- 2016-1-30
- 在线时间
- 22 小时
|
2金钱
我把论坛里几位前辈的中断服务函数截了放到自己工程里跑了下
void TIM3_IRQHandler(void) //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源
TIM_SetCompare1(TIM1,Duty[count]);
count++;
if(count==num)
{
count=0;
}
}
}
这段代码运行之后示波器显示一段直线
void TIM4_IRQHandler(void)
{
if ( TIM_GetITStatus(TIM4 , TIM_IT_Update) == SET)
{
if(sign == 0)
{
TIM_SetCompare1(TIM3,Duty_Cycle_sinewavetable[Counter_sine]);
TIM_SetCompare2(TIM3,0);
Counter_sine++;
if(Counter_sine==100) //?????100??
{
Counter_sine=0;
sign = 1;
}
}
else
{
TIM_SetCompare1(TIM3,0);
TIM_SetCompare2(TIM3,Duty_Cycle_sinewavetable[Counter_sine]);
Counter_sine++;
if(Counter_sine==100)
{
Counter_sine=0;
sign = 0;
}
}
}
TIM_ClearITPendingBit(TIM4 , TIM_FLAG_Update);
}
这段运行很成功,还有一段中断函数波形不停摆动,我觉得第一段中断函数运行应该是能成功的,为什么会直线呢?第二段为什么又成功了呢?求大神指教
|
最佳答案
查看完整内容[请看2#楼]
ARR即自动重载寄存器,是用来控制PWM信号周期的。
对应的通道占空比用CCRx即捕获/比较寄存器控制。
先弄清楚用TIMER输出PWM的原理和相关寄存器功能。
如果TIM1没有正确初始化,比如没有使能或者ARR=0,TIM1相关的PWM输出就可能出现你遇到的情况,输出一条直线。
|