|
本帖最后由 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???
}
|
|