厦门浪子 发表于 2017-8-7 20:49:32

停止模式恢复的问题

本帖最后由 厦门浪子 于 2017-8-7 21:12 编辑

   进入停止模式之前调用了:
SystemPower_Config()函数
static void SystemPower_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

/* Enable Ultra low power mode */
HAL_PWREx_EnableUltraLowPower();

/* Enable the fast wake up from Ultra low power mode */
HAL_PWREx_EnableFastWakeUp();

/* Select HSI as system clock source after Wake Up from Stop mode */
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI);

/* Enable GPIOs clock */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();

/* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */
GPIO_InitStructure.Pin = GPIO_PIN_All;
GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;
GPIO_InitStructure.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOD, &GPIO_InitStructure);
HAL_GPIO_Init(GPIOH, &GPIO_InitStructure);

/* Disable GPIOs clock */
__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();
__HAL_RCC_GPIOH_CLK_DISABLE();

}

然后进入: HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
SystemClockConfig_STOP();

唤醒正常,但是重新初始化串口(串口里面初始化了GPIO和CLK),却无法打印,这是为什么?

无薪税绵 发表于 2017-12-21 11:59:46

请唤醒后,初始化串口前,请增加延时。
具体延时时间是多少,自己试吧,
反正我增加了300ms

maxtch 发表于 2017-12-21 13:15:26

唤醒后插一个 _DSB() 和 _ISB() 试试看,让系统总线恢复一下。另外,仔细检查时钟树

zhao.zhao 发表于 2017-12-22 09:14:28

我停止之前没关串口,只是把引脚模式改了,恢复后再把引脚模式改过来就可以了

lewangle 发表于 2019-3-4 09:40:17

__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_HSI);
请教一下这个函数在哪个库?
页: [1]
查看完整版本: 停止模式恢复的问题