STM32F745进入Standby模式 两个唤醒事件问题
项目本意是要设置了两个唤醒源 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=='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=='p')
{
printf("%d",data);
printf("%d",PWR->CSR2);
}
osDelay(10);
}
}
仅供参考
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]