打印
[STM32L0]

stm32l0系列TSL线性电容按键进入睡眠模式叫醒后无法正常工作

[复制链接]
239|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2023-10-16 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的官方的库文件,的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);
        
    }
}

使用特权

评论回复
沙发
flycamelaaa| | 2023-10-16 10:56 | 只看该作者
检查电源是否稳定,以及是否在正确的工作范围内。不稳定或异常的电源可能会导致微控制器复位或出现其他不可预料的行为。

使用特权

评论回复
板凳
powerantone| | 2023-10-16 11:00 | 只看该作者
线性电容按键的初始化

使用特权

评论回复
地板
classroom| | 2023-10-16 11:00 | 只看该作者
在进入睡眠模式之前,有一段代码行HAL_I2C_DeInit(&I2CxHandle);,这是关闭I2C总线的操作。如果在此之后对I2C总线上的设备进行任何操作,例如读取线性电容按键的状态,都可能因I2C总线未初始化而失败。

使用特权

评论回复
5
BullTalented| | 2023-10-24 09:47 | 只看该作者
检查电源是否稳定,是否在正确的工作范围内

使用特权

评论回复
6
未说出口的像你| | 2023-11-19 13:36 | 只看该作者
你说的触摸按键和弹性按键都是什么?是2类按键么

使用特权

评论回复
7
我吃小朋友| | 2023-11-19 16:00 | 只看该作者
一般来说,触摸按键需要你重新初始化一下,才能好用的哦

使用特权

评论回复
8
失物招領| | 2023-11-19 18:00 | 只看该作者
你这触摸与单片机怎么连接的?

使用特权

评论回复
9
温室雏菊| | 2023-11-19 20:00 | 只看该作者
你唤醒之后,得对一些外设重新初始化的吧

使用特权

评论回复
10
白马过平川| | 2023-11-19 22:00 | 只看该作者
你的弹性按键接在哪儿了?是不是这个IO自动配置了外部中断啊?

使用特权

评论回复
11
风凉| | 2023-11-20 01:00 | 只看该作者
如果你的触摸是一个模块的话,你需要重新初始化一下,这样才能正常使用

使用特权

评论回复
12
将爱藏于深海| | 2023-11-20 03:00 | 只看该作者
你咋不都用触摸呢?还整个弹性按键

使用特权

评论回复
13
故意相遇| | 2023-11-20 05:00 | 只看该作者
其实看你说的,有点像触摸没初始化导致的

使用特权

评论回复
14
她已醉| | 2023-11-20 07:00 | 只看该作者
你直接仿真看看?我觉得可以试试看为啥不好使

使用特权

评论回复
15
春日负喧| | 2023-11-20 10:00 | 只看该作者
应该就是初始化的问题,你的触摸应该是I2C或者其他,这外设在休眠的时候都被关闭了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1890

主题

6563

帖子

8

粉丝