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; //清除中断标志位
} 直接写寄存器,牛逼
页:
[1]