论坛元老
 
- 积分
- 7136
- 金钱
- 7136
- 注册时间
- 2015-1-23
- 在线时间
- 105 小时
|
在工程中 PA0有两个功能 1.作为GPIO 输出功能, 2. 待机模式唤醒功能.
程序正常运行时使用GPIO功能,
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
通过按键选择进入待机模拟时调用Enter_STANDBY.
void Enter_STANDBY(void)
{
__HAL_RCC_APB2_FORCE_RESET(); //复位所有IO口
__HAL_RCC_BKP_CLK_ENABLE();
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
HAL_PWR_EnableWakeUpPin (PWR_WAKEUP_PIN1);
HAL_PWR_EnterSTANDBYMode();
}
出现问题的地方是, 用PA0唤醒后, 程序从复位重新运行, 但PA0配置为GPIO不能工作.
出现此问题的原因和解决方法:
4.4.2 电源控制/状态寄存器(PWR_CSR) (从待机模式唤醒时不被清除), 到这里观客应该能明白了.PA0进入待机模式时的配置在复位后没有复位.
解决方法是在程序初始化后, 添加HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_SPI1_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
// MX_IWDG_Init();
MX_TIM2_Init();
MX_RTC_Init();
MX_USB_DEVICE_Init();
/* USER CODE BEGIN 2 */
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
程序可以正常运行了.
|
|