我的电路板上有4路电机驱动电路,映射关系如下:
PWM1--PA8--TIM1_CH1
PWM2--PA11--TIM1_CH4
PWM3--PB6--TIM4_CH1
PWM4--PB7--TIM4_CH2
采用TIM1的两路电机比较顺利就驱动了,但是采用TIM4的另外两路却没有能够驱动,代码如下:
void PWM_Init(u16 arr,u16 psc)
{
//PWM1--PA8--#29--TIM1_CH1
//PWM2--PA11--#32--TIM1_CH4
//PWM3--PB6--#42--TIM4_CH1
//PWM4--PB7--#43--TIM4_CH2
//此部分需手动修改IO口设置
RCC->APB2ENR|=1<<11; //TIM1时钟使能
RCC->APB1ENR|=1<<2; //TIM4时钟使能
GPIOA->CRH&=0XFFFFFFF0;//PA8输出
GPIOA->CRH|=0X00000003;//通用推挽输出
GPIOA->ODR|=1<<8;//PA8上拉
GPIOA->CRH&=0XFFFF0FFF;//PA11输出
GPIOA->CRH|=0X00003000;//通用推挽输出
GPIOA->ODR|=1<<11;//PA11上拉
GPIOB->CRL&=0XF0FFFFFF;//PB6输出
GPIOB->CRL|=0X03000000;//通用推挽输出
GPIOB->ODR|=1<<6;//PB6上拉
GPIOB->CRL&=0X0FFFFFFF;//PB7输出
GPIOB->CRL|=0X30000000;//通用推挽输出
GPIOB->ODR|=1<<7;//PB7上拉
TIM1->ARR=arr;//设定计数器自动重装值
TIM1->PSC=psc;//预分频器不分频
TIM4->ARR=arr;//设定计数器自动重装值
TIM4->PSC=psc;//预分频器不分频
TIM1->CCMR1|=6<<4; //CH1 PWM2模式
TIM1->CCMR1|=1<<3; //CH1预装载使能
TIM1->CCMR2|=7<<12; //CH4 PWM2模式
TIM1->CCMR2|=1<<11; //CH4预装载使能
TIM4->CCMR1|=7<<4; //CH1 PWM2模式
TIM4->CCMR1|=1<<3; //CH1预装载使能
TIM4->CCMR1|=7<<12; //CH2 PWM2模式
TIM4->CCMR1|=1<<11; //CH2预装载使能
TIM1->CCER|=1<<0; //OC1 输出使能
TIM1->CCER|=1<<12; //OC4 输出使能
TIM4->CCER|=1<<0; //OC1 输出使能
TIM4->CCER|=1<<4; //OC2 输出使能
TIM1->CR1=0x8000; //ARPE使能
TIM1->CR1|=0x01; //使能定时器1
TIM4->CR1=0x8000; //ARPE使能
TIM4->CR1|=0x01; //使能定时器4
}
后来检查,发现没有时能PORTB的时钟,加上下面这句后,4路电机顺利驱动
RCC->APB2ENR|=1<<3; //使能PORTB时钟
不过,控制转速的问题没有解决,明天继续研究。