OpenEdv-开源电子网

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

待机模式 wakeup 唤醒问题

[复制链接]

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
393
金钱
393
注册时间
2019-4-25
在线时间
99 小时
发表于 2022-5-29 20:45:51 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 a314825348 于 2022-5-29 21:38 编辑

我使用的是正点原子的 F429IGT6 阿波罗开发板,在做待机模式的实验时不明白为什么进入待机模式要写那个多代码,
  1. //系统进入待机模式
  2. void Sys_Enter_Standby(void)
  3. {
  4.     __HAL_RCC_AHB1_FORCE_RESET(); //复位所有 IO 口
  5.     while(WKUP_KD); //等待 WK_UP 按键松开(在有 RTC 中断时, //必须等 WK_UP 松开再进入待机)
  6.     __HAL_RCC_PWR_CLK_ENABLE(); //使能 PWR 时钟
  7.     __HAL_RCC_BACKUPRESET_FORCE(); //复位备份区域
  8.     HAL_PWR_EnableBkUpAccess(); //后备区域访问使能
  9.     __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
  10.     __HAL_RTC_WRITEPROTECTION_DISABLE(&RTC_Handler);//关闭 RTC 写保护
  11.    
  12.     //关闭 RTC 相关中断,可能在 RTC 实验打开了
  13.     __HAL_RTC_WAKEUPTIMER_DISABLE_IT(&RTC_Handler,RTC_IT_WUT);
  14.     __HAL_RTC_TIMESTAMP_DISABLE_IT(&RTC_Handler,RTC_IT_TS);
  15.     __HAL_RTC_ALARM_DISABLE_IT(&RTC_Handler,RTC_IT_ALRA|RTC_IT_ALRB);
  16.    
  17.     //清除 RTC 相关中断标志位
  18.     __HAL_RTC_ALARM_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_ALRAF|RTC_FLAG_ALRBF);
  19.     __HAL_RTC_TIMESTAMP_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_TSF);
  20.     __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_WUTF);
  21.     __HAL_RCC_BACKUPRESET_RELEASE(); //备份区域复位结束
  22.     __HAL_RTC_WRITEPROTECTION_ENABLE(&RTC_Handler); //使能 RTC 写保护
  23.    
  24.     __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); //清除 Wake_UP 标志
  25.     HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); //设置 WKUP 用于唤醒
  26.     HAL_PWR_EnterSTANDBYMode(); //进入待机模式
  27. }
复制代码


我的设想是只使用 wakeup 引脚进行唤醒操作,而不使用RTC进行唤醒,不是只需要配置 wakeup 引脚就可以了吗?我配置的代码如下,但是不能唤醒开发板,麻烦大家帮我分析一下,谢谢。
  1. /* 进入 standby 模式 */
  2. void enter_standby_mode(void)
  3. {
  4.     printf("enter standby mode\r\n");

  5.     HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);
  6.     __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);          // 清除 WU 状态位
  7.     HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);   // 使能 WKUP 引脚的唤醒功能 ,使能 PA0
  8.     HAL_PWR_EnterSTANDBYMode();                 // 进入待机模式
  9. }
复制代码

我的 main 函数如下所示,在 MX_GPIO_Init 里面并没有配置 WAKEUP 引脚,
  1. int main(void)
  2. {
  3.     /* USER CODE BEGIN 1 */
  4.    
  5.     /* USER CODE END 1 */
  6.    
  7.     /* MCU Configuration--------------------------------------------------------*/
  8.    
  9.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  10.     HAL_Init();
  11.    
  12.     /* USER CODE BEGIN Init */
  13.    
  14.     /* USER CODE END Init */
  15.    
  16.     /* Configure the system clock */
  17.     SystemClock_Config();
  18.    
  19.     /* USER CODE BEGIN SysInit */
  20.    
  21.     /* USER CODE END SysInit */
  22.    
  23.     /* Initialize all configured peripherals */
  24.     MX_GPIO_Init();
  25.     MX_USART1_UART_Init();
  26.     /* USER CODE BEGIN 2 */
  27.    
  28.     /* USER CODE END 2 */
  29.    
  30.     /* Infinite loop */
  31.     /* USER CODE BEGIN WHILE */
  32.     led1_on();
  33.     printf("hello stm32f429xx\r\n");
  34.     if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) == SET)
  35.     {
  36.         __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
  37.         printf("wakeup\r\n");
  38.     }
  39.    
  40.     HAL_Delay(3000);      // 延时一段时间方便下载程序,防止一上电就进入低功耗模式
  41.    
  42.     while (1)
  43.     {
  44.         led0_on();
  45.         enter_standby_mode();  // 进入 standby 模式
  46.         
  47.         printf("exit standby mode\r\n");  // 唤醒后相当于复位,不会打印这句话
  48.         led0_off();
  49.         HAL_Delay(1000);
  50.     }
  51. }
复制代码



这个引脚是在 cubemx 里面进行配置的,如下图所示


wakeup 引脚配置

wakeup 引脚配置

最佳答案

查看完整内容[请看2#楼]

//系统进入待机模式 void Sys_Enter_Standby(void) { __HAL_RCC_AHB1_FORCE_RESET(); //复位所有IO口 __HAL_RCC_PWR_CLK_ENABLE(); //使能PWR时钟 __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); //清除Wake_UP标志 HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); //设置WKUP用于唤醒 HAL_PWR_EnterSTANDBYMode(); //进入待机模式 }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2022-5-29 20:45:52 | 显示全部楼层
//系统进入待机模式
void Sys_Enter_Standby(void)
{
    __HAL_RCC_AHB1_FORCE_RESET();       //复位所有IO口
        __HAL_RCC_PWR_CLK_ENABLE();         //使能PWR时钟
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);                  //清除Wake_UP标志
       
    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);           //设置WKUP用于唤醒
    HAL_PWR_EnterSTANDBYMode();                         //进入待机模式     
}
回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
393
金钱
393
注册时间
2019-4-25
在线时间
99 小时
 楼主| 发表于 2022-5-29 21:14:30 | 显示全部楼层
本帖最后由 a314825348 于 2022-5-29 21:40 编辑

自己顶一下啊
回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
393
金钱
393
注册时间
2019-4-25
在线时间
99 小时
 楼主| 发表于 2022-5-29 21:15:35 | 显示全部楼层
本帖最后由 a314825348 于 2022-5-30 09:35 编辑

自己顶一下啊
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2022-5-30 10:51:56 | 显示全部楼层
//系统进入待机模式
void Sys_Enter_Standby(void)
{
    __HAL_RCC_APB2_FORCE_RESET();       //复位所有IO口
           __HAL_RCC_PWR_CLK_ENABLE();         //使能PWR时钟
                                 
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);                  //清除Wake_UP标志
    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);           //设置WKUP用于唤醒
    HAL_PWR_EnterSTANDBYMode();                         //进入待机模式     
}
回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
393
金钱
393
注册时间
2019-4-25
在线时间
99 小时
 楼主| 发表于 2022-5-30 15:24:14 | 显示全部楼层
A571157242 发表于 2022-5-30 10:51
//系统进入待机模式
void Sys_Enter_Standby(void)
{

按照方法试了,不行呢,STM32F429IGT6开发板,正点原子的板子
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2022-5-30 16:10:55 | 显示全部楼层
我用F429的例程,删减成这样是没有问题的
回复

使用道具 举报

8

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
393
金钱
393
注册时间
2019-4-25
在线时间
99 小时
 楼主| 发表于 2022-5-30 16:32:22 | 显示全部楼层
本帖最后由 a314825348 于 2022-5-30 17:07 编辑
A571157242 发表于 2022-5-30 16:10
我用F429的例程,删减成这样是没有问题的

非诚感谢,我又试了一下,没问题,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 15:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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