如题,我在实现四路PWM的时候,第一路和第二路PWM两者只能有一个能正常工作,第三第四路工作正常。我调试的时候发现,当四路开启时,第一路PWM的TIM3->CCR1的值永远为0。。。程序是参照原子哥的修改的。
void PWM3_Init(u16 arr,u16 psc,u8 resetap)
{
//设置port时钟、端口
RCC->APB1ENR|=1<<1;
RCC->APB2ENR|=1<<2;//GPIOA--TIM123,GPIOB--TIM34
RCC->APB2ENR|=1<<3;//GPIOB--TIM3  A6-7,PB0-1
GPIOA->CRL&=0X00FFFFFF;
GPIOA->CRL|=0XBB000000;
GPIOB->CRL&=0XFFFFFF00;
GPIOB->CRL|=0X000000BB;
//设置arr、psc-->count
if(resetap==1)
{
TIM3->ARR=arr;
TIM3->  SC=psc;
}
//设置ccmr1-2
TIM3->CCMR1|=7<<4;//设置CH1-2 OC1M
TIM3->CCMR1|=1<<3;//0C1PE
TIM3->CCMR1|=7<<12; //pwm模式 //第一个图没注释通道二的配置,第二个图注释了通道二的配置
TIM3->CCMR1|=1<11;
TIM3->CCMR2|=7<<4;
TIM3->CCMR2|=1<<3;
TIM3->CCMR2|=7<<12;
TIM3->CCMR2|=1<<11;
//cc使能--ccer
TIM3->CCER|=0X1111;//0-4-8-12 CCxE
//使能定时器cr1 APER使能,
TIM3->CR1=0X80;
TIM3->CR1|=0X01;
{ u16 tmp;
tmp=TIM3->ARR;
TIM3->CCR1=tmp/1;
TIM3->CCR2=tmp/2;
TIM3->CCR3=tmp/4;
TIM3->CCR4=tmp/8;
}
}
通道1的CCR1总是0
注释了通道二的配置CCR1就可以了...
程序其他位置都没有改变。
|