为什么不能同时使用Systick和Timer1

问题描述 投票:0回答:1

我正在使用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 ...

arm embedded stm32 cortex-m
1个回答
0
投票

这是我对usec的延迟功能

© www.soinside.com 2019 - 2024. All rights reserved.