void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
GPIOA->CRH&=0XFFFFFFF0;//PA8输出
GPIOA->CRH|=0X00000004;//浮空输入
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
TIM3->ARR=arr;//设定计数器自动重装值
TIM3->PSC=psc;//预分频器不分频
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CR1=0x8000; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}
在这个函数中,问题一:为什么一定要OC2输出呢?不可以用OC1、OC3、OC4吗?为什么设置其他输出灯一直亮着而没有PWM输出?
问题二:想要PWM在PA6输出,GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
除了把以上改为
GPIOA->CRL&=0XF0FFFFFF;//PA6输出
GPIOA->CRL|=0X0B000000;//复用功能输出
GPIOA->ODR|=1<<6;//PA6上拉
和把
TIM3->CCMR1|=7<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
修改成
TIM3->CCMR1|=7<<4; //CH1 PWM2模式
TIM3->CCMR1|=1<<3; //CH1预装载使能
但是还是灯一直亮着,没有PWM输出,为什么呢?
请各位高手帮帮忙。。。。
|