找回密码
 立即注册
楼主: 梁工

触摸按键唤醒,1uA/1个键/1秒唤醒,STC触摸MCU, 唤醒【主时钟停振/省电模式】

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-06-23 13:35:58

1

主题

26

回帖

159

积分

等待验证会员

积分
159
发表于 2025-6-10 16:11:19 | 显示全部楼层
请教梁工。使用自己的板子,烧录了“03-16键简单应用-触摸按键唤醒-外中断唤醒”,串口(每秒发出1次"W”)和指示灯都正常。经打印相关信息,按下和未按下,触摸值到的值,有明显变化。 按下的阈值也低于设置的TSTH,但是无法执行到下面的代码里,不知道怎么回事?

                if(B_KeyPress)
                {
                        B_KeyPress = 0;
                        if(WakeUpkey == 0)        P_K0_LED = ~P_K0_LED;        //键触摸操作
                        if(WakeUpkey == 1)        P_K1_LED = ~P_K1_LED;
                        if(WakeUpkey == 2)        P_K2_LED = ~P_K2_LED;
                        if(WakeUpkey == 3)        P_K3_LED = ~P_K3_LED;
                        if(WakeUpkey == 4)        P_K4_LED = ~P_K4_LED;
                        if(WakeUpkey == 5)        P_K5_LED = ~P_K5_LED;
                        if(WakeUpkey == 6)        P_K6_LED = ~P_K6_LED;
                        if(WakeUpkey == 7)        P_K7_LED = ~P_K7_LED;
                        if(WakeUpkey == 8)        P_K8_LED  = ~P_K8_LED;
                        if(WakeUpkey == 9)        P_K9_LED  = ~P_K9_LED;
                        if(WakeUpkey == 10)        P_K10_LED = ~P_K10_LED;
                        if(WakeUpkey == 11)        P_K11_LED = ~P_K11_LED;
                        if(WakeUpkey == 12)        P_K12_LED = ~P_K12_LED;
                        if(WakeUpkey == 13)        P_K13_LED = ~P_K13_LED;
                        if(WakeUpkey == 14)        P_K14_LED = ~P_K14_LED;
                        if(WakeUpkey == 15)        P_K15_LED = ~P_K15_LED;
                }

点评

判断按键部分有问题吧?不按键读数多少?按键后读数多少?  详情 回复 发表于 2025-6-10 18:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-06-28 00:08:16

74

主题

6162

回帖

1万

积分

超级版主

积分
12925
发表于 2025-6-10 18:12:23 | 显示全部楼层
明月*** 发表于 2025-6-10 16:11
请教梁工。使用自己的板子,烧录了“03-16键简单应用-触摸按键唤醒-外中断唤醒”,串口(每秒发出1次"W”) ...

判断按键部分有问题吧?不按键读数多少?按键后读数多少?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-06-23 13:35:58

1

主题

26

回帖

159

积分

等待验证会员

积分
159
发表于 2025-6-11 11:03:50 | 显示全部楼层
梁*** 发表于 2025-6-10 18:12
判断按键部分有问题吧?不按键读数多少?按键后读数多少?

谢谢回复。之前理解的不对,由于自己的板子 不是16键触摸。个别通道一直读出来是0,相当于一直触发了。加了打印函数,发现一直是通道3触发。

点评

未启动的按键,不要做处理即可。  详情 回复 发表于 2025-6-11 11:56
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-06-28 00:08:16

74

主题

6162

回帖

1万

积分

超级版主

积分
12925
发表于 2025-6-11 11:56:07 | 显示全部楼层
明月*** 发表于 2025-6-11 11:03
谢谢回复。之前理解的不对,由于自己的板子 不是16键触摸。个别通道一直读出来是0,相当于一直触发了。加 ...

未启动的按键,不要做处理即可。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-06-23 13:35:58

1

主题

26

回帖

159

积分

等待验证会员

积分
159
发表于 2025-6-12 09:11:15 | 显示全部楼层
梁工,遇到一个新问题,折腾了半天没搞懂,程序始终无法运行。我正常运行的程序,包含初始化,使用了TSCTRL = 0x80; 在MCU准备进入休眠时,代码如下,                 
      X32KCR = 0x80 + 0x40;   //启动外部32K晶振, 低增益+0x00, 高增益+0x40.
      while (!(X32KCR & 0x01));  //等待时钟稳定
                  printf("进入休眠\n\r");
                        TSCTRL = 0x00;
                        TSCTRL = (1<<4) + (1<<3) + (1<<2) + 0;        
                  //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
                  DelayXms(1);
                        PCON |= 0x02;        //睡眠
                        NOP(5);
                        printf("WAKE..\n\r");
                  TSCTRL = (1<<7) + (1<<6) + (1<<3) + (1<<2) + 0;        //开始扫描, 无平均, B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
                         if(B_KeyPress)
                        {
                                B_KeyPress = 0;
                                if(WakeUpkey == 0)        
                                {
                                        P20 = ~P20;
                                        TSCTRL = 0x80;                        //开始自动扫描, 无平均, B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
                                         return; //退出睡眠
        }
                                if(WakeUpkey == 1)        P21 = ~P21;
                                if(WakeUpkey == 2)        P42 = ~P42;
                                printf("WakeUpkey = %bd \n\r",WakeUpkey);
                        }        

现在的现象和问题就是:我只要在其他地方调用过 TSCTRL = 0x80;这句,包含初始化阶段,也就是TSGO=1,等到我再回到上述进入休眠的流程。就无法通过触摸按键从休眠中唤醒。实在不知道问题出在哪?

点评

请参考我主楼的程序。  详情 回复 发表于 2025-6-12 09:24
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-06-28 00:08:16

74

主题

6162

回帖

1万

积分

超级版主

积分
12925
发表于 2025-6-12 09:24:21 | 显示全部楼层
明月*** 发表于 2025-6-12 09:11
梁工,遇到一个新问题,折腾了半天没搞懂,程序始终无法运行。我正常运行的程序,包含初始化,使用了TSCTRL ...

请参考我主楼的程序。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-06-23 13:35:58

1

主题

26

回帖

159

积分

等待验证会员

积分
159
发表于 2025-6-12 09:39:57 | 显示全部楼层
梁*** 发表于 2025-6-12 09:24
请参考我主楼的程序。

关于触摸低功耗的部分基本上跟你的一样的了。这个问题始终存在,懵了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-06-23 13:35:58

1

主题

26

回帖

159

积分

等待验证会员

积分
159
发表于 2025-6-12 14:33:30 | 显示全部楼层
梁*** 发表于 2025-6-12 09:24
请参考我主楼的程序。

梁工,你好,我直接用你的代码跑,只要 加上 TSCTRL = 0x80; 这句,后面的唤醒功能就完全失效了。我认为这是一个BUG。C:\Users\yang.xingyuan\Desktop\1749709885494.jpg
1749709885494.jpg

点评

你启动扫描,马上又进入睡眠,可能不行。你这样试下: TSCTRL = 0x00; delay_ms(50); //延时一下 TSCTRL = (1  详情 回复 发表于 2025-6-12 14:48
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-06-28 00:08:16

74

主题

6162

回帖

1万

积分

超级版主

积分
12925
发表于 2025-6-12 14:48:48 | 显示全部楼层
明月*** 发表于 2025-6-12 14:33
梁工,你好,我直接用你的代码跑,只要 加上 TSCTRL = 0x80; 这句,后面的唤醒功能就完全失效了。我认为这 ...

你启动扫描,马上又进入睡眠,可能不行。你这样试下:
TSCTRL = 0x00;
delay_ms(50);        //延时一下
TSCTRL = (1<<3) + (1<<2) + 0; //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2025-06-23 13:35:58

1

主题

26

回帖

159

积分

等待验证会员

积分
159
发表于 2025-6-13 08:47:28 | 显示全部楼层
梁*** 发表于 2025-6-12 14:48
你启动扫描,马上又进入睡眠,可能不行。你这样试下:
TSCTRL = 0x00;
delay_ms(50);        //延时一下

感谢回复。这里加上延时,确实有效果
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-28 16:00 , Processed in 4.752804 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表