关于开启SysTick之后进入不了Stop模式的问题

2019-07-20 23:35发布

我之前调试好了Stop模式的闹钟唤醒和外部中断(PA0)按键唤醒,现在我只用闹钟唤醒,循环睡眠加唤醒成功后,加入了SysTick初始化,也就是打开了SysTick之后,就进入不了Stop模式。运行到那个函数,能进去,都能正常运行下去,但是就是进入不了睡眠模式,开始以为是标志没清除的原因,在Stop之前加入了清除所有中断 [mw_shl_code=c,true]EXTI_ClearITPendingBit(0x7ffff); RTC_ClearITPendingBit(0x07); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); [/mw_shl_code]
还是不行。
但是一旦注释掉SysTick之后就不会有这个情况。
SysTick初始化的代码:
[mw_shl_code=c,true]void ARC_SysTick_Init() { if (SysTick_Config(SystemCoreClock / 1000)) { /* Capture error */ while (1); } } static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ SysTick->VAL = 0; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0); /* Function successful */ } static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) { if(IRQn < 0) { SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */ else { NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for device specific Interrupts */ } [/mw_shl_code]
例程里面的。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。