我正在使用Systick计时器创建延迟,每个1uSec都会发生该systick的处理程序。
并且我正在使用TIM1,它的处理程序每1秒出现一次。...
在timer1处理程序中,我正在切换LED
在while循环内的主要功能中,我正在使用另一个与timer1处理程序中的led不同的led进行切换,此处的延迟功能是使用systick。
timer1处理程序已按预期执行,但问题是主函数中的while循环从未执行过任何帮助?
volatile uint32_t i=0;
void TIM1_UP_TIM10_IRQHandler(void)
{
NVIC_ClearPendingIRQ(TIM1_UP_TIM10_IRQn);
i^=1;
if(i == 1)
LED_On(0);
else
LED_Off(0);
TIM1->SR &=~(1 << 0);
}
int main(void)
{
NVIC_SetPriority(TIM1_UP_TIM10_IRQn,32);
NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
LED_Initialize();
RCC->APB2ENR |=(1 << 0); //Enable Timer1 clock
TIM1->CR1 &=~(1 << 4); //Set the direction of timer to be upcounter
TIM1->DIER |=(1 << 0); //enable tim1 interrupt request
TIM1->PSC =15999; // each count takes 1 msec
TIM1->ARR =1000; //each 1 sec an overflow update event occurs
TIM1->CR1 |=(1 << 0);
SysTick_Init(16000000/1000000);
while(1)
{
LED_On(1);
Delay_MS(5000);
LED_Off(1);
Delay_MS(5000);
}
return 0;
}
我正在使用Systick计时器创建延迟,该systick的处理程序每1uSec出现一次...而我正在使用TIM1,它的处理程序每1秒钟发生一次...。在timer1处理器内,我切换一个LED ...
这是我对usec的延迟功能