程序编写应该是能产生3路互补的PWM波但用示波器时只显示一路,附上程序求解
:
void TIM1_PWM_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<11; //TIM1时钟使能
RCC->APB2ENR|=1<<2; //GPIOA时钟使能
RCC->APB2ENR|=1<<3; //GPIOB时钟使能
GPIOA->CRH&=0XFFFFF000; //PA8,PA9,PA10输出
GPIOA->CRH|=0X00000BBB; //复用功能输出 推挽式
GPIOA->ODR|=3<<8; //PA8,PA9,PA10上拉
GPIOB->CRH&=0X000FFFFF; //PB13,PB14,PB15输出
GPIOB->CRH|=0XBBB00000; //复用功能输出 推挽式
GPIOB->ODR|=3<<13; //PB13,PB14,PB15上拉
TIM1->ARR=arr; //设定计数器自动重装值 fPWM=fCK_CNT/(ARR[15:0]+1)
TIM1->  SC=psc; //预分频器设置 fCK_CNT=fck_PSC/(PSC[15:0]+1)
TIM1->BDTR|=0xCD; //72Mhz算,死区时间=13.89nsX(32+DTG)X8=5us
TIM1->CCER|=1<<2; //CH1互补输出使能
TIM1->CCMR1|=6<<4; //CH1 PWM1模式
TIM1->CCMR1|=1<<3; //CH1预装载使能
TIM1->CR1|=1<<7; //使能ARR自动重装入缓冲器
TIM1->BDTR|=1<<15; //主输出使能
TIM1->CR1|=0x01; //使能定时器1
}
int main(void)
{
TIM1_PWM_Init(399,8); //预分频9,PWM频率=72000000/9/400=20khz
TIM1->CCR1=200;
TIM1->CCER|=0x01; //CH1 OC1信号输出使能
}
|