程序如附件所示,我在这里复制粘贴一下出问题的地方
//TIM1中断函数
void TIM1_UP_IRQHandler()
{
LED0=!LED0;
delay_ms(10);
if((TIM1->SR&0X0001) && flag_TIM1 == 0 )
{
TIM1->CCR1 = 132-1 ;
TIM1->CCR2 = 132-36- 1 ;
TIM1->CCR3 = 132+72-144- 1 ;
TIM1->CCR4 = 132+72 - 1 ;
flag_TIM1=1;
TIM1->SR&=~(1<<0);
}
if(TIM1->SR&0X0001 && flag_TIM1 == 1)
{
TIM1->CCR1 = 276- 1 ;
TIM1->CCR2 = 276+36 - 1 ;
TIM1->CCR3 = 276+72+144- 1 ;
TIM1->CCR4 = 276+72 - 1 ;
flag_TIM1=0;
TIM1->SR&=~(1<<0);
}
}
//定时器1配置函数
void TIM1_CMP_Init(u16 arr,u16 psc)
{
TIM1->BDTR |= 1<<15; //主输出使能
RCC->APB2ENR|=1<<11; //TIM1时钟使能
RCC->APB2ENR|=1<<6; //POERTE口时钟使能
GPIOE->CRH&=0XF00F0F0F;
GPIOE->CRH|=0X0BB0B0B0; //PE9,11,13,14输出
RCC->APB2ENR|=1<<0; //开启辅助时钟
AFIO->MAPR&=0XFFFFFF9F; //清除MAPR[7:6]
AFIO->MAPR|=1<<6;
AFIO->MAPR|=1<<7; //完全重映射,TIM1_CH1~CH4-> E9,PE11,PE13,PE14
TIM1->ARR=arr;
TIM1-> SC=psc;
TIM1->CCMR1|=1<<3; //CH1装载使能
TIM1->CCMR1|=3<<4; //CH1 配置翻转
TIM1->CCMR1|=1<<11; //CH2装载使能
TIM1->CCMR1|=3<<12; //CH2配置翻转
TIM1->CCMR2|=1<<3; //CH3装载使能
TIM1->CCMR2|=3<<4; //CH3配置翻转
TIM1->CCMR2|=1<<11; //CH4装载使能
TIM1->CCMR2|=3<<12; //CH4配置翻转
TIM1->CCER|=1<<0; //OC1输出使能
TIM1->CCER|=1<<4; //OC2输出使能
TIM1->CCER|=1<<8; //OC3输出使能
TIM1->CCER|=1<<12; //OC4输出使能
TIM1->CR1=0x0080; //ARPE使能
TIM1->DIER|=1<<0; //允许更新中断
MY_NVIC_Init(1,3,TIM1_UP_IRQChannel,2);
TIM1->CR1|=0x01; //使能定时器1
}
}
测试结果如下:
运用Keil自带的仿真出来,PE9,PE11,PE13,PE14是有波形的。PORTB.5(即LED灯)也有波形。
但是下载到开发板上之后,用示波器打了一下。4个PWM输出口没有波形,POETB.5口有方波产生。(说明进了中断)
为什么那4个输出口就没有波形产生呢?
|