你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F745进入Standby模式 两个唤醒事件问题

[复制链接]
你是真的 提问时间:2017-11-27 12:56 /
项目本意是要设置了两个唤醒源 PA0和PA2 WKUP 事件  进入standby模式后   其中一个唤醒事件(比如PA0上有脉冲)产生会使两个打开的唤醒源 都有唤醒标志位(理论是只有一个有)  因此我做了如下测试,打开一个唤醒关闭一个唤醒 。
按照下面的代码:我在PA0上面输入脉冲也能唤醒CPU,唤醒后通过查看PWR->CSR2的值,发现标志信号置在PA2上面(CPU告诉我是PA2唤醒的,实际上PA都被禁止唤醒了)

新手上路请求各位大咖帮帮忙

void StartCommTask3(void const * argument)    //uart1
{
  uint16_t length;
  int data;
  /* Infinite loop */
   HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2);
  for(;;)
  {
    Get_Frame(&huart1,uart1_rxbuff,&length);
    data=HAL_GetTick();   

    if(uart1_rxbuff[0]=='s')   
    {
      HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2);

      /* Clear the related wakeup pin flag */
      __HAL_PWR_CLEAR_WAKEUP_FLAG(PWR_WAKEUP_PIN_FLAG2);

      HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2);    //打开了PA2 WKUP

      __HAL_PWR_CLEAR_WAKEUP_FLAG(PWR_WAKEUP_PIN_FLAG1);      

      HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);    //关闭了PA0 WKUP

      HAL_PWR_EnterSTANDBYMode();
    }

    if(uart1_rxbuff[0]=='p')
    {
       printf("%d  ",data);
      printf("%d  ",PWR->CSR2);
    }


    osDelay(10);
  }   
}

收藏 1 评论1 发布时间:2017-11-27 12:56

举报

1个回答
feixiang20 回答时间:2018-5-18 02:31:30
仅供参考
1----
手册中提到的几种退出待机模式的事件:1、NRST引脚复位。 2、看门狗复位。3、WKUP(PA0)引脚产生上升沿电平。4、RTC时钟产生alarm
2----
STM32
的低功耗模式有
3种:
1)睡眠模式(CM3内核停止,外设仍然运行)
2)停止模式(所有时钟都停止)
3)待机(standby)模式(1.8V内核电源关闭)
从待机模式唤醒后的代码执行等同于复位后的执行
进入Standby模式后,只能有Wake-up脚和RTC唤醒,特别是唤醒后,程序将从最开始运行,也就是相当于软件复位。
我这里有一个我以前写的参考代码
void PWR_EnterSTANDBYMode(void)
{
/* Clear Wake-up flag */
PWR->CR |= CR_CWUF_Set;
/* Select STANDBY mode */
PWR->CR |= CR_PDDS_Set;
/* Set SLEEPDEEP bit of Cortex System Control Register */
*(vu32 *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set;
/* Request Wait For Interrupt */
__WFI();
}
/*******************************************************************************
* Function Name  : PWR_WakeUpPinCmd
* Description    : Enables or disables the WakeUp Pin functionality.
* Input          : - NewState: new state of the WakeUp Pin functionality.
*                    This parameter can be: ENABLE or DISABLE.
* Output         : None
* Return         : None
*******************************************************************************/
void PWR_WakeUpPinCmd(FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
*(vu32 *) CSR_EWUP_BB = (u32)NewState;
}
/*******************************************************************************
* Function Name  : LowPower_Init
* Description    : Initializes Low Power application.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LowPower_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Enable WakeUp pin */
PWR_WakeUpPinCmd(ENABLE);
/* Enable Clock Security System(CSS) */
RCC_ClockSecuritySystemCmd(ENABLE);
}
PS,进入satandby之前要关闭看门狗,否则看门狗的复位,会导致MCU提前醒来

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版