zhp 发表于 2023-4-6 17:23:42

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

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

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

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

1、修改“usb_desc.c”设备描述符文件
1.1、修改配置描述符的bmAttributes属性,增加远程唤醒功能


1.2、增加一个的数据表格,后面会使用到



2、修改“usb.c”代码文件
2.1、在USB的复位中断响应程序中需要再次调用usb_init初始化函数



3、修改“usb_req_std.c”代码文件
3.1、在标准USB的GetState请求响应函数中对Device的State需要返回远程唤醒特性



4、修改“usb_req_class.c”代码文件
4.1、HID的GetProtocol和SetProtocol请求也不能直接STALL,需做如下修改


4.2、检测到键盘的按键按下后,这边返回键码到上位机时,需要判断设备的挂起状态
若设备处于挂起状态,则远程唤醒电脑,否则发送键码



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

moka 发表于 2023-8-11 10:39:50

这是否可以用于stc8h8k

神农鼎 发表于 2023-8-11 10:53:29

STC32G12K128, STC8H8K64U 的USB 是相通的
===记得下载我们最新的 USB 库函数

moka 发表于 2023-8-11 13:59:38

神农鼎 发表于 2023-8-11 10:53
STC32G12K128, STC8H8K64U 的USB 是相通的
===记得下载我们最新的 USB 库函数

最新的哪里下载

神农鼎 发表于 2023-8-11 14:40:32


古人来者_昌 发表于 2023-11-13 20:40:04

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

zhp 发表于 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

suncat0504 发表于 2023-12-17 12:07:04

用最新函数效果怎么样?楼主有测试吗?

Q289466080 发表于 2023-12-19 08:07:42

感谢您的分享,我遇到的问题是,当电脑关机或者休眠时再按按键(关机时USB还有电),电脑再次开启时按键就无效了,但是主循环还在再运行,

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

乘风飞扬 发表于 2023-12-19 11:20:20

Q289466080 发表于 2023-12-19 08:07
感谢您的分享,我遇到的问题是,当电脑关机或者休眠时再按按键(关机时USB还有电),电脑再次开启时按键就 ...

你是用楼主的例程测试,还是进行移植/修改的?
如果 if (DeviceState != DEVSTATE_CONFIGURED)这个判断是不成立的话,排查一下你的程序里哪些地方有修改过DeviceState设置。
页: [1] 2
查看完整版本: STC-USB键盘之挂起/恢复中断响应及唤醒睡眠电脑的应用