问题描述:在使用J-link通过Keil5在线下载ST - MCU程序时,出现下载完成后。J-link一直连着MCU的下载口,此时给板子上电,并断掉车机的ACC,MCU进入低功耗,紧接着自动唤醒并重启。此种情况下,会一直进行。
解决办法:
因为J-link本身破解驱动程序的原因导致一直重启。网上查资料需要关闭系统时钟:SysTick
(1)HAL库
// HAl库
/* ---------------- 进入低功耗-停止模式 ---------------- */
#define portNVIC_SYSTICK_CTRL_REG (*((volatile uint32_t*)0xe000e010))
#define portNVIC_SYSTICK_ENABLE_BIT (1UL << 0UL)
void pwr_enter_stop_mode(void)
{
wakeup_evt_val = 0;
// 关闭滴答定时器,滴答定时器能唤醒停机状态
// portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT; // freeRTOS
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
// 执行WFI时,立即进入休眠
// HAL_PWR_DisableSleepOnExit();
// HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
wakeup_from_stop_mode();
mcu_wakeup_uninit();
// portNVIC_SYSTICK_CTRL_REG &= portNVIC_SYSTICK_ENABLE_BIT; // freeRTOS
}
(2)标准库
// STD库
void pwr_enter_stop_mode(void)
{
wakeup_evt_val = 0;
Wwdong_Uninit();
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
/* Enable PWR and BKP clock
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
Request to enter STOP mode with regulator in low power mode
*/
PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);
// PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;
/*stop interrupt*/
pwr_uninit();
wakeup_from_stop_mode();
}