rzsab 发表于 2023-9-22 23:38:45

请教F407有定时器PWM工作不正常,

本帖最后由 rzsab 于 2023-9-22 23:54 编辑

用几个定时器输出PWM脉宽调制信号,各定时器周期相同,分别有函数定时器统一使能,和调节每周期调节CCR1得到不同脉冲宽度,现在用了定时器1、3、10,程序基本一致,只有定时器10正常,定时器1、3PWM无输出,TIM1->BDTR不懂,每个定时器中断周期一致,工作了,请教问题所在,谢谢

//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
正常函数
void TIM10_init(u16 arr,u16 psc)      //通道10
{                                                      
        //此部分需手动修改IO口设置
        RCC->APB2ENR|=1<<17;           //TIM10时钟使能   
        GPIO_Set(GPIOB,PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOB,8,3);          //PC6,AF3
        TIM10->ARR    =arr;                          //设定计数器自动重装值
        TIM10->PSC    =psc;                          //预分频器不分频
TIM10->CCR1   =0;         //脉冲宽度???
        TIM10->CCMR1 |=6<<4;          //CH1 PWM1模式               
        TIM10->CCMR1 |=1<<3;           //CH1 预装载使能          
        TIM10->CCER|=1<<0;             //OC1 输出使能       
        TIM10->CCER|=1<<0;             //OC1 高电平有效          
        TIM10->DIER|=1<<0;      //允许更新中断          
        TIM10->CR1   |=1<<7;             //ARPE使能
//        TIM10->CR1   |=1<<0;            //使能定时器10                                                                                           
        MY_NVIC_Init(1,2,TIM1_UP_TIM10_IRQn,2);        //抢占1,子优先级10,组2                                                TIM10_TRG_COM_TIM14_IRQn                       
}


以下不正常函数,由正常函数修改的到

void TIM1_init(u16 arr,u16 psc)
{                                                      
        RCC->APB2ENR|=1<<0;            //TIM1时钟使能   
        GPIO_Set(GPIOE,PIN9,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOE,9,1);          //PC6,AF1
        TIM1->ARR    =arr;                       //设定计数器自动重装值
        TIM1->PSC    =psc;                       //预分频器不分频
TIM1->CCR1   =0;       //脉冲宽度???
        TIM1->CCMR1 |=6<<4;           //CH1 PWM1模式               
        TIM1->CCMR1 |=1<<3;            //CH1 预装载使能          
        TIM1->CCER|=1<<0;          //OC1 输出使能       
        TIM1->CCER|=1<<0;          //OC1 高电平有效          
        TIM1->DIER|=1<<0;      //允许更新中断          
        TIM1->CR1   |=1<<7;          //ARPE使能
        TIM11->CNT    =20;
//        TIM1->CR1   |=1<<0;           //使能定时器1                                                                                           
        TIM1->BDTR|=1<<15;   //主输出使能         定时器1、8需要这条
MY_NVIC_Init(2,2,TIM1_UP_TIM10_IRQn,2);          //抢占1,子优先级3,组2                                                                       
}
void TIM3_init(u16 arr,u16 psc)
{                                                      
        RCC->APB1ENR|=1<<1;            //TIM3时钟使能   
        GPIO_Set(GPIOC,PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOC,6,2);       //PC6,AF3
        TIM3->ARR    =arr;                       //设定计数器自动重装值
        TIM3->PSC    =psc;                       //预分频器不分频
TIM3->CCR1   =0;         //脉冲宽度???
        TIM3->CCMR1 |=6<<4;           //CH1 PWM1模式               
        TIM3->CCMR1 |=1<<3;            //CH1 预装载使能          
        TIM3->CCER|=1<<0;      //OC1 输出使能       
        TIM3->CCER|=1<<0;          //OC1 高电平有效          
        TIM3->DIER|=1<<0;      //允许更新中断          
        TIM3->CR1   |=1<<7;          //ARPE使能
        TIM3->CNT    =20;
//        TIM3->CR1   |=1<<0;           //使能定时器3                                                                                           
MY_NVIC_Init(2,2,TIM3_IRQn,2);          //抢占1,子优先级3,组2                        UP???                                               
}
页: [1]
查看完整版本: 请教F407有定时器PWM工作不正常,