我这个程序应该是没有问题的,因为已经在用,不过中断你可以去掉就得了。
/*PWM输出初始化*/
void Timer4_Init(u16 arr,u16 psc)
{
//此部分需手动修改 IO口设置
RCC->APB2ENR|=1<<0; //复用
RCC->APB1ENR|=1<<2; //TIM4 时钟使能
RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOB->CRL&=0XF0FFFFFF;//PB6 输出
GPIOB->CRL|=0X0B000000;//复用功能输出
GPIOB->ODR|=1<<6;//PB6 上拉
GPIOB->CRL&=0X0FFFFFFF;//PB7 输出
GPIOB->CRL|=0XB0000000;//复用功能输出
GPIOB->ODR|=1<<7;//PB7 上拉
GPIOB->CRH&=0XFFFFFFF0;//PB8 输出
GPIOB->CRH|=0X0000000B;//复用功能输出
GPIOB->ODR|=1<<8;//PB8 上拉
GPIOB->CRH&=0XFFFFFF0F;//PB9 输出
GPIOB->CRH|=0X000000B0;//复用功能输出
GPIOB->ODR|=1<<9;//PB9 上拉
TIM4->ARR=arr;//设定计数器自动重装值
TIM4-> SC=psc;//预分频器不分频
TIM4->CCMR1|=6<<4; //CH1  WM1模式
//TIM4->CCMR1|=1<<3; //CH1 预装载使能
TIM4->CCER|=1<<0; //OC1 输出使能
TIM4->CR1=0x0080; //ARPE使能
TIM4->CCMR1|=6<<12; //CH2  WM1模式
//TIM4->CCMR1|=1<<11; //CH2 预装载使能
TIM4->CCER|=1<<4; //OC2 输出使能
TIM4->CR1=0x0080; //ARPE使能
TIM4->CCMR2|=6<<4; //CH3  WM1模式
//TIM4->CCMR2|=1<<3; //CH3 预装载使能
TIM4->CCER|=1<<8; //OC3 输出使能
TIM4->CR1=0x0080; //ARPE使能
TIM4->CCMR2|=6<<12; //CH4  WM1模式
//TIM4->CCMR2|=1<<11; //CH4 预装载使能
TIM4->CCER|=1<<12; //OC4 输出使能
TIM4->CR1=0x0080; //ARPE使能
TIM4->DIER|=1<<0; //允许更新中断
TIM4->DIER|=1<<6; //允许触发中断
MY_NVIC_Init(9,0,TIM4_IRQChannel,4);//抢占1,子优先级1,组1
TIM4->CR1|=0x01; //使能定时器4
TIM4->CCR1 = 3035; //CH1占空比初值
TIM4->CCR2 = 3035; //CH2占空比初值
TIM4->CCR3 = 3035;
//TIM4->CCR4 = 3035; //CH6占空比初值
}
|