我用的官方的库文件,的hal函数
下面这个程序,在进入睡后,叫醒,触摸按键无法正常工作,但是弹性按键却可以继续循环进入睡眠模式。
while(1)
{
//判断 线性电容按键 与 睡眠开启按键(普通弹性按键)是否有一个被按下
MyLinRots[0].p_Data->Position = 0;
MyLinRots[0].p_Data->StateId = TSL_STATEID_RELEASE;
ButtonPressed = 0;
tsl_status = tsl_user_Exec();
while((ButtonPressed == 0) && ((MyLinRots[0].p_Data->StateId != TSL_STATEID_DETECT) || (LINEAR_POSITION == 0)) && (!LINEAR_POSITION))
{
tsl_status = tsl_user_Exec();
}
//若线性电容按键被触发,则进入一下逻辑。
if(MyLinRots[0].p_Data->StateId == TSL_STATEID_DETECT)
{
/* Run mode menu ********************************************************/
if((LINEAR_POSITION >= 1 ) && (LINEAR_POSITION <= 64))
{
}
/* Sleep mode menu ******************************************************/
else if ((LINEAR_POSITION >= 65 ) && (LINEAR_POSITION <= 127))
{
}
/* LP Sleep menu ********************************************************/
else if ((LINEAR_POSITION >= 128 ) && (LINEAR_POSITION <= 191))
{
}
/* Stop menu ************************************************************/
else
{
}
}
//若普通弹性按键按下,则触发开启睡眠模式
else /* BUTTON_KEY != 0 */
{
// IDD_SaveContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数)
SystemPower_Config(); //官方sleep库中的关闭IO 和时钟的函数。
HAL_I2C_DeInit(&I2CxHandle);
HAL_Delay(5000);
BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_EXTI);
HAL_SuspendTick();
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();
IDD_RestoreContext(); //从IDD库中找到的关闭IO和时钟的函数(检测睡眠模式 功耗电流时 用的函数)
//苏醒后LED灯闪烁
BSP_LED_Init(LED3);
BSP_LED_On(LED3);
HAL_Delay(500);
BSP_LED_Off(LED3);
HAL_Delay(500);
BSP_LED_On(LED3);
HAL_Delay(500);
BSP_LED_Off(LED3);
HAL_Delay(500);
BSP_LED_On(LED3);
HAL_Delay(500);
BSP_LED_Off(LED3);
}
} |