OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2362|回复: 2

STM32待机唤醒后PA0配置为GPIO不工作

[复制链接]

16

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7136
金钱
7136
注册时间
2015-1-23
在线时间
105 小时
发表于 2020-1-13 09:10:36 | 显示全部楼层 |阅读模式
在工程中 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);


程序可以正常运行了.


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2020-1-13 15:12:36 | 显示全部楼层
回复 支持 反对

使用道具 举报

16

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7136
金钱
7136
注册时间
2015-1-23
在线时间
105 小时
 楼主| 发表于 2020-1-14 07:58:22 | 显示全部楼层

Thanks♪(・ω・)ノ
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 14:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表