找回密码
 立即注册
查看: 2740|回复: 18

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

[复制链接]
  • TA的每日心情
    开心
    6 天前
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    711

    回帖

    2528

    积分

    超级版主

    积分
    2528
    发表于 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, 下载次数: 96

    回复 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    18

    积分

    新手上路

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

    使用道具 举报

    该用户从未签到

    550

    主题

    9321

    回帖

    1万

    积分

    管理员

    积分
    13904
    发表于 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 库函数

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

    使用道具 举报

    该用户从未签到

    550

    主题

    9321

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    回帖

    92

    积分

    注册会员

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    711

    回帖

    2528

    积分

    超级版主

    积分
    2528
     楼主| 发表于 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
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:12
  • 签到天数: 158 天

    [LV.7]常住居民III

    13

    主题

    244

    回帖

    843

    积分

    高级会员

    积分
    843
    发表于 2023-12-17 12:07:04 | 显示全部楼层
    用最新函数效果怎么样?楼主有测试吗?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-2-24 11:16
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    2

    主题

    7

    回帖

    134

    积分

    注册会员

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

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

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 17:54
  • 签到天数: 132 天

    [LV.7]常住居民III

    26

    主题

    1298

    回帖

    4049

    积分

    论坛元老

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-5 12:39 , Processed in 0.075616 second(s), 72 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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