管理员
  
- 积分
- 165540
- 金钱
- 165540
- 注册时间
- 2010-12-1
- 在线时间
- 2117 小时
|
发表于 2013-8-12 21:45:52
|
显示全部楼层
问题就出在spwm 函数.
修改为如下,问题解决:
void spwm (void)
{
  WM3plus+=1; //每次查表递增加1
if(PWM3plus==320)
PWM3plus=0;
//if(PWM3plus==0)
// PWM3plus=255;
  WMch1=PWM3plus;
//   WMch2=PWM3plus;
// TIM1->CCR3=PWMdata[PWM3plus];
// TIM1->CCR2=PWMdata[PWMch2];
// TIM1->CCR1=PWMdata[PWMch1];
TIM3->CCR2 =   WMdata[PWMch1]; //将查表得到的值写到TIM_Pluse
//TIM_OCInitStructure.TIM_Pulse =  WMdata[PWMch1]; //将查表得到的值写到TIM_Pluse
//TIM_OC2Init(TIM3, &TIM_OCInitStructure); //使能通道1
// TIM_OCInitStructure.TIM_Pulse =  WMdata[PWMch2];
// TIM_OC2Init(TIM3, &TIM_OCInitStructure); //使能通道2
// TIM_OCInitStructure.TIM_Pulse =  WMdata[PWM3plus];
// TIM_OC3Init(TIM3, &TIM_OCInitStructure); //使能通道3
}
这是因为PWM改变一个CCR2的值而已,你调用TIM_OC2Init(TIM3, &TIM_OCInitStructure); 受影响的寄存器太多,修改过程中,可能就导致出这么个畸形脉冲了.
所以,某些淘宝卖家,说什么要他用寄存器还不如回家耕田,遇到这种问题,楼主要是信了这些卖家所言,死抱着库函数,以为是万金油,放哪里都适用的话,估计真要回家耕田了.... |
|