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

stm32l0系列,TSL线性电容按键在进入睡眠模式,叫醒后无法开启

[复制链接]
▲-猪-▼Ψ 提问时间:2016-11-16 10:07 /
我用的官方的库文件,的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);
        
    }
}
收藏 评论12 发布时间:2016-11-16 10:07

举报

12个回答
▲-猪-▼Ψ 回答时间:2016-11-27 00:27:13
自问自答吧,

睡醒后,虽然又外设都初始化了,但是开发板上的TSL按键模块并没有苏醒,开启了一半,由寄存器具体数值查到的,所以初始化程序后面又加了一句直接操作寄存器的语句,           TSC->CR |= 0x02;               //使  TSL开始工作,

然后就好使,

其实仍有疑问,就是初始化时的却置位了CR寄存器,但是没有起作用,手动置位却好使了,
疑惑没解开,好在运行没有错误了!!!!!!!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

▲-猪-▼Ψ 回答时间:2016-11-16 10:08:34
进入线性按键后,里面的具体逻辑,有所删减,要不程序太多了,不好分析问题
▲-猪-▼Ψ 回答时间:2016-11-16 10:09:36
如果再次精炼一下程序,就好使了,大神们,可不可以帮忙分析一下错误点在那里?
▲-猪-▼Ψ 回答时间:2016-11-16 10:10:23
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();     }   //     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);          }
▲-猪-▼Ψ 回答时间:2016-11-16 10:10:52
额乱码了,重发一遍
▲-猪-▼Ψ 回答时间:2016-11-16 10:11:47
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();
    }


//     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);
        
}
▲-猪-▼Ψ 回答时间:2016-11-16 10:14:07
发现,只要删除,判断是否弹性按键按下,这段判断句,则程序运行正常,加上这段话,出了睡眠,线性电容按键无法开启。
xhzheng 回答时间:2016-11-16 10:20:16
好高手,路过;
▲-猪-▼Ψ 回答时间:2016-11-16 10:56:18
不是高手,我只是用官方库复制粘贴的程序……还出bug了……
▲-猪-▼Ψ 回答时间:2016-11-16 10:56:45
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版