rzsab 发表于 2023-8-10 17:53:43

STM32F407,定时器4,PWM1无输出,帮忙看看

本帖最后由 rzsab 于 2023-8-10 23:04 编辑

如题,定时器4、9同样的程序,定时器4的程序由定时器9将9改为4得到,定时器4的PWM无输出,已排除虚焊,帮忙看看,注释不一定对,问题可能简单,别笑话

主程序先初始化
TIM9_init( 1000-1, 168-1);               
TIM4_init( 1000-1,84-1);               



void TIM9_init(u16 arr,u16 psc)
{                                                      
        RCC->APB2ENR|=1<<16;            //TIM9时钟使能   
        GPIO_Set(GPIOE,PIN5,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOE,5,3);       //PC6,AF3
        TIM9->ARR    =arr;                       //设定计数器自动重装值
        TIM9->PSC    =psc;                       //预分频器不分频
TIM9->CCR1   =332;       //脉冲宽度???
        TIM9->CCMR1 |=6<<4;           //CH1 PWM1模式               
        TIM9->CCMR1 |=1<<3;            //CH1 预装载使能          
        TIM9->CCER|=1<<0;      //OC1 输出使能       
        TIM9->CCER|=1<<1;          //OC1 低电平有效          
        TIM9->DIER|=1<<0;      //允许更新中断          
        TIM9->CR1   |=1<<7;          //ARPE使能
        TIM9->CR1   |=1<<0;           //使能定时器9                                                                                           
//        TIM9->BDTR|=1<<15;   //主输出使能      比其它计数器多的一条
MY_NVIC_Init(2,2,TIM1_BRK_TIM9_IRQn,2);          //抢占1,子优先级3,组2                                                                       
}


void TIM4_init(u16 arr,u16 psc)
{                                                      
        RCC->APB1ENR|=1<<2;            //TIM4时钟使能   
        GPIO_Set(GPIOD,PIN12,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
        GPIO_AF_Set(GPIOD,12,2); //PC6,AF2
        TIM4->ARR    =arr;                       //设定计数器自动重装值
        TIM4->PSC    =psc;                       //预分频器不分频
TIM4->CCR1   =332;       //脉冲宽度???
        TIM4->CCMR1 |=6<<4;           //CH1 PWM1模式               
        TIM4->CCMR1 |=1<<3;            //CH1 预装载使能          
        TIM4->CCER|=1<<0;          //OC1 输出使能       
        TIM4->CCER|=1<<1;          //OC1 低电平有效          
        TIM4->DIER|=1<<0;      //允许更新中断          
        TIM4->CR1   |=1<<7;          //ARPE使能
        TIM4->CR1   |=1<<0;           //使能定时器4                                                                                           
//        TIM4->BDTR|=1<<15;   //主输出使能      比其它计数器多的一条
MY_NVIC_Init(2,2,TIM4_IRQn,2);          //抢占1,子优先级3,组2                        UP???                                               
}
//定时器9中断服务程序       
void TIM1_BRK_TIM9_IRQHandler(void)
{                                                               
        if(TIM9->SR&0x0001)   //溢出中断
        {
        }                                  
        TIM9->SR&=~0x0001;    //清除中断标志位           
}
//定时器4中断服务程序       
void TIM4_IRQHandler(void)
{                                                               
        if(TIM4->SR&0x0001)   //溢出中断
        {
        }                                  
        TIM4->SR&=~0x0001;    //清除中断标志位           
}

sy8501 发表于 2023-8-10 17:55:47

直接写寄存器,牛逼
页: [1]
查看完整版本: STM32F407,定时器4,PWM1无输出,帮忙看看