void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<0; //TIM2时钟使能
RCC->APB2ENR|=1<<11; //TIM1时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
/*---------------------------------------------*/
GPIOA->CRH&=0XFFFF0FF0;//TIM1 PA8,11输出 CH1,4
GPIOA->CRH|=0X0000B00B;//复用功能输出
GPIOA->ODR|=1<<8;//PA8上拉
GPIOA->ODR|=1<<11;//PA11上拉
GPIOA->CRL&=0XFFFFFF00;//TIM2 PA0,1输出 CH1,2
GPIOA->CRL|=0X000000BB;//复用功能输出
GPIOA->ODR|=3<<0;//PA0,1上拉
/*---------------------------------------------*/
TIM2->ARR=arr;//设定计数器自动重装值
TIM2->  SC=psc;//预分频器不分频
TIM1->ARR=arr;//设定计数器自动重装值
TIM1->  SC=psc;//预分频器不分频
/*---------------------------------------------*/
TIM2->CCMR1|=7<<4; //CH1 PWM2模式
TIM2->CCMR1|=7<<12; //CH2 PWM2模式
TIM1->CCMR1|=7<<4; //CH1 PWM2模式
TIM1->CCMR2|=7<<12; //CH4 PWM2模式
/*---------------------------------------------*/
TIM2->CCMR1|=1<<3; //CH1预装载使能
TIM2->CCMR1|=1<<11; //CH2预装载使能
TIM1->CCMR1|=1<<3; //CH1预装载使能
TIM1->CCMR2|=1<<11; //CH4预装载使能
/*---------------------------------------------*/
TIM2->CCER|=1<<0; //OC1 输出使能
TIM2->CCER|=1<<4; //OC2 输出使能
TIM1->CCER|=1<<0; //OC1 输出使能
TIM1->CCER|=1<<12; //OC4 输出使能
/*---------------------------------------------*/
TIM1->BDTR|=0x8000; //使能外设主输出
/*---------------------------------------------*/
TIM2->CR1=0x0080; //ARPE使能
TIM2->CR1|=0x01; //使能定时器2
TIM1->CR1=0x0080; //ARPE使能
TIM1->CR1|=0x01; //使能定时器1
} |