大家好!我想使用定时器3的输出比较模式在CH1通道和CH2通道产生两路频率不同的脉冲,让PWM_test函数中psc=719,CCR1=150,CCR2=300, 可是使用示波器测试PA6(CH1通道),PA7(CH2通道)两个引脚始终是一样频率都是100000/(300*2))=166.6Hz, 也就是说示波器显示的脉冲频率只是CH2通道的频率,而CH1通道应该是100000/(150*2)=333.3Hz,哪里设置有误呢?请大家帮我看看,谢谢!
void PWM_test(u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XF0FFFFFF;//PA6输出
GPIOA->CRL|=0X0B000000;//复用功能输出
GPIOA->ODR|=1<<6;//PA6上拉
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
TIM3->ARR=0xffff;
TIM3-> SC=psc;//预分频
TIM3->CCR1=150;
TIM3->CCR2=300;
TIM3->CCMR1|=3<<4; //CH1 输出比较模式
TIM3->CCMR1|=3<<12; //CH2 输出比较模式
TIM3->DIER=1<<1; //CC1IE 允许捕获比较中断1
TIM3->DIER=1<<2; //CC2IE 允许捕获比较中断2
TIM3->CCER|=1<<0; //OC1 输出使能 CC1E=1
TIM3->CCER|=1<<4; //OC2 输出使能 CC2E=1
TIM3->CR1=0x8000; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
}
void TIM3_IRQHandler(void)
{
u16 cap;
if(TIM3->SR&0X0002) //查看CC1IF标记
{
cap=TIM3->CNT;
TIM3->CCR1=cap+150;
}
if(TIM3->SR&0X0004) //查看CC2IF标记
{
cap=TIM3->CNT;
TIM3->CCR2=cap+300;
}
TIM3->SR&=~(1<<1); //清标记位
TIM3->SR&=~(1<<2); //清标记位
}
|