定时器3配置
void PWM_Init(u16 arr,u16 psc,u16 ccr1,u16 ccr2,u16 ccr3,u16 ccr4)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<2; //TIM4时钟使能
RCC->APB2ENR|=1<<3; //TIM5时钟使能
GPIOA->CRL&=0X00FFFFFF;//PA7.6输出
GPIOA->CRL|=0XBB000000;//7.6复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
GPIOA->ODR|=1<<6;//pa6上拉
GPIOB->CRL&=0XFFFFFF00;//pb 01
GPIOB->CRL|=0X000000BB;
GPIOB->ODR|=1<<1;
GPIOB->ODR|=1<<0;
TIM3->ARR=arr-1;//设定计数器自动重装值
TIM3-> SC=psc;//预分频器不分频
TIM3->CCMR1|=6<<12; //CH2 PWM2模式
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCMR1|=6<<4; //1
TIM3->CCMR1|=1<<3;
TIM3->CCMR2|=6<<12; //4
TIM3->CCMR2|=1<<11;
TIM3->CCMR2|=6<<4; //3
TIM3->CCMR2|=1<<3;
TIM3->CR1&=0<<4; //向上计数
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CCER|=1<<0; //oc1信号输出
TIM3->CCER|=1<<8; //3
TIM3->CCER|=1<<12; //4
TIM3->BDTR|=1<<15; //开启OC和OCN输
TIM3->CCR1=ccr1; //设定占空比
TIM3->CCR2=ccr2;
TIM3->CCR3=ccr3;
TIM3->CCR4=ccr4;
TIM3->EGR|=1<<0; //重新初始化计数器
TIM3->CR1=0x0080; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}
通过main控制波形输出
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
while(1)
{
delay_ms(100);
  WM_Init(2000,720,150,150,50,100); //不分频。PWM频率=72000/1440=50hz
delay_ms(1000) ;
  WM_Init(2000,720,150,150,50,50); //不分频。PWM频率=72000/1440=50hz
delay_ms(1000) ;
  WM_Init(2000,720,100,100,100,100); //不分频。PWM频率=72000/1440=50hz
delay_ms(1000) ;
  WM_Init(2000,720,150,150,50,50); //不分频。PWM频率=72000/1440=50hz
delay_ms(1000) ;
  WM_Init(2000,720,100,100,100,100); //不分频。PWM频率=72000/1440=50hz
}
}
每当延时结束时 波形总是有一块没有 求教原子哥这是什么原因
|