程序要实现的端口在TIM2中断中控制LED输出高和TIM3中断中控制LED输出低,程序大部分时间都是正常的,但偶尔出现LED输出在本来没有TIM3中断到来的时候输出低。有没有解决办法?
Main() { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 LED_Init(); //初始化与LED连接的硬件接口 uart_init(72,9600); //采用原子的例程的代码 MY_NVIC_Init(2,2,USART1_IRQn,2);//组2,最低优先级 TIM3_Int_Init(200,71);//1Mhz的计数频率,计数到200 us TIM2_Int_Init(200,71);// 1Mhz的计数频率,计数到200 us TIM2->CR1|=0x01; //使能定时器2 delay_us(170); TIM3->CR1|=0x01; //使能定时器3 while(1) { If(5ms) {printf("\n%d%d %d %d %d %d\r", A [0],A [1],A [2], A[3],A[4],A [5]); //每5ms uart1输出}} } //////////// voidTIM3_Int_Init(u16 arr,u16 psc) { RCC->APB1ENR|=1<<1; //TIM3时钟使能 TIM3->ARR=arr; //设定计数器自动重装值 TIM3->PSC=psc; //预分频器设置 TIM3->DIER|=1<<0; //允许更新中断 MY_NVIC_Init(1,1,TIM3_IRQn,2);//抢占1,子优先级3,组2 } voidTIM2_Int_Init(u16 arr,u16 psc) { RCC->APB1ENR|=1<<0; //TIM2时钟使能 TIM2->ARR=arr; //设定计数器自动重装值 TIM2->PSC=psc; //预分频器设置 TIM2->DIER|=1<<0; //允许更新中断 MY_NVIC_Init(1,2,TIM2_IRQn,2);//抢占1,子优先级3,组2 } voidTIM2_IRQHandler(void) { if(TIM2->SR&0X0001)//溢出中断 { TIM2->SR&=~(1<<0);//清除中断标志位 1 LED3=1; } } void TIM3_IRQHandler(void) { if(TIM3->SR&0X0001)//溢出中断 { TIM3->SR&=~(1<<0);//清除中断标志位 1 LED3=0; } }
|