最近要用到多路PWM,于是就调试了TIM3的四个PWM通道,遇到奇怪现象
定时器配置如下:
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOA->CRL&=0X00FFFFFF; //PA6 CH1 PA7 CH2
GPIOA->CRL|=0XBB000000; //复用功能输出
GPIOB->CRL&=0XFFFFFF00; //PB0 CH3 PB1 CH4
GPIOB->CRL|=0X000000BB; //复用功能输出
TIM3->ARR=arr; //设定计数器自动重装值
TIM3-> SC=psc; //预分频器
TIM3->CCMR1|=7<<4; //CH1 PWM2模式
TIM3->CCMR1|=1<<3; //CH1预装载使能
TIM3->CCER|=1<<0; //OC1 输出使能
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CCMR2|=7<<4; //CH3 PWM2模式
TIM3->CCMR2|=1<<3; //CH3预装载使能
TIM3->CCER|=1<<8; //OC3 输出使能
TIM3->CCMR2|=7<<12; //CH4 PWM2模式
TIM3->CCMR2|=1<<11; //CH4预装载使能
TIM3->CCER|=1<<12; //OC4 输出使能
TIM3->CCR1=1800;
TIM3->CCR2=3600;
TIM3->CCR3=2700;
TIM3->CCR4=5400;
TIM3->CR1|=1<<7; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
主程序调用:TIM3_PWM_Init(7199,99); //100hz
如上述配置。仿真得到下图波形,可以看出是频率100HZ,占空比也没错,是准确的
可是接下来,当将上述红色部分改成下面,即通道1与2的值调换 通道3与4的值调换
TIM3->CCR1=3600;
TIM3->CCR2=1800;
TIM3->CCR3=5400;
TIM3->CCR4=2700;
结果,仿真出来的波形就不对了,如下图,可以看出,CH1与CH2一样了,CH3与CH4的也一样了,搞不清楚!!!
接下来我经过测试,发现只要TIM3->CCR1的值逼TIM3->CCR2的值大,就会出现错误,出来的波形占空比是按照TIM3->CCR2的值出来的,同样通道3与通道4也是这样,但通道1、2与通道3、4之间没影响,如果改成PWM1模式,情况刚好相反。
不知道是怎么回事??仿真问题,还是我的测试方法出错了,收索出本站的PWM程序修改也会出现类似问题,是本来就是这样的么?由例程直接改的测试程序如附件
|