找回密码
 立即注册
查看: 4548|回复: 17

STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-4-6 17:23:42 | 显示全部楼层 |阅读模式
STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用

STC32G系列范例程序包中“71-基于HID协议的USB键盘范例”的范例程序是基本的USB-HID键盘的应用

范例中没有支持对USB挂起中断和USB恢复中断的响应
对“71-基于HID协议的USB键盘范例”代码进行如下修改即可实现挂起和恢复中断响应以及实现唤醒睡眠电脑的功能

1、修改“usb_desc.c”设备描述符文件
1.1、修改配置描述符的bmAttributes属性,增加远程唤醒功能
STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用-1.png

1.2、增加一个的数据表格,后面会使用到
STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用-2.png


2、修改“usb.c”代码文件
2.1、在USB的复位中断响应程序中需要再次调用usb_init初始化函数
STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用-3.png


3、修改“usb_req_std.c”代码文件
3.1、在标准USB的GetState请求响应函数中对Device的State需要返回远程唤醒特性
STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用-4.png


4、修改“usb_req_class.c”代码文件
4.1、HID的GetProtocol和SetProtocol请求也不能直接STALL,需做如下修改
STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用-5.png

4.2、检测到键盘的按键按下后,这边返回键码到上位机时,需要判断设备的挂起状态
若设备处于挂起状态,则远程唤醒电脑,否则发送键码
STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用-6.png


经过上面的修改后,基本可达目的
详情请下载下面的参考代码

71-基于HID协议的USB键盘范例-支持挂起和恢复响应.zip

27.5 KB, 下载次数: 247

回复

使用道具 举报 送花

0

主题

2

回帖

18

积分

新手上路

积分
18
发表于 2023-8-11 10:39:50 | 显示全部楼层
这是否可以用于stc8h8k
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2023-8-11 10:53:29 | 显示全部楼层
STC32G12K128, STC8H8K64U 的USB 是相通的
===记得下载我们最新的 USB 库函数
回复 支持 反对

使用道具 举报 送花

0

主题

2

回帖

18

积分

新手上路

积分
18
发表于 2023-8-11 13:59:38 | 显示全部楼层
神*** 发表于 2023-8-11 10:53
STC32G12K128, STC8H8K64U 的USB 是相通的
===记得下载我们最新的 USB 库函数

最新的哪里下载
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2023-8-11 14:40:32 | 显示全部楼层
1.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:87
  • 最近打卡:2025-04-27 06:53:22

12

主题

54

回帖

611

积分

高级会员

积分
611
发表于 2023-11-13 20:40:04 | 显示全部楼层
请问楼主如何让USB主动挂起?有个设备需要USB通讯,但20秒后无按键时需要进入低功耗。在仅使用USB充电器供电时(未有D+、D-通讯),设备可以进入掉电功耗状态,LED灯不闪烁,测量功率为uA级别;但接电脑USB口供电时,设备无法进入低功耗状态,LED运行灯一直闪烁,应该是USB一直有握手,处于未挂起状态,该如何让设备主动计入挂起状态呢?

点评

请参考下面的帖子 https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5031  详情 回复 发表于 2023-11-16 22:17
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-11-16 22:17:00 | 显示全部楼层
古人来*** 发表于 2023-11-13 20:40
请问楼主如何让USB主动挂起?有个设备需要USB通讯,但20秒后无按键时需要进入低功耗。在仅使用USB充电器供 ...

请参考下面的帖子
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5031
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-03-26 08:49:01

2

主题

8

回帖

158

积分

注册会员

积分
158
发表于 2023-12-19 08:07:42 | 显示全部楼层
感谢您的分享,我遇到的问题是,当电脑关机或者休眠时再按按键(关机时USB还有电),电脑再次开启时按键就无效了,但是主循环还在再运行,

在usb_req_class.c 中的 if (DeviceState != DEVSTATE_CONFIGURED)这个判断是不成立的,继续执行了下面语句我在后增加了LED灯,显示LED有动作,但是再次按无效开机也是

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-12-19 11:20:20 | 显示全部楼层
Q2894*** 发表于 2023-12-19 08:07
感谢您的分享,我遇到的问题是,当电脑关机或者休眠时再按按键(关机时USB还有电),电脑再次开启时按键就 ...

你是用楼主的例程测试,还是进行移植/修改的?
如果 if (DeviceState != DEVSTATE_CONFIGURED)这个判断是不成立的话,排查一下你的程序里哪些地方有修改过DeviceState设置。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-05-02 09:52:56
已绑定手机

229

主题

328

回帖

1475

积分

金牌会员

积分
1475
发表于 2023-12-19 12:56:11 | 显示全部楼层
USB挂起是什么意思或者是什么现象
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 10:37 , Processed in 0.126081 second(s), 125 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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