APM32F103 USB键盘如何唤醒PC机

USB2.0全速设备的技术规范,所以支持远程唤醒的功能,本文简单介绍全速USB模式下,USB键盘如何休眠PC,唤醒PC机

  • 描述符配置

APM32F103鼠标设备配置描述符源代码如下,从0数第7个字节0xE0(1110000b),标识设备是自供电且具有远程唤醒功能。所以APM32F103USB描述符配置为。

对应个报告描述符可以配置为;

上述报告描述符没用到下面几个配置,直接在键值中发送即可。

0x85, REPORT_ID_SYSTEM, // Report ID

0x09, 0x83, // Usage (Sys Wake Up)

0x09, 0x82, // Usage (Sys Sleep)

0x09, 0x81, // Usage (Sys Power Down)

  • 发送SYSTEM CONTROL的键值休眠电脑

定义/* Generic Desktop Page(0x01) - system power control */

#define SYSTEM_POWER_DOWN       0x0081

#define SYSTEM_SLEEP            0x0082

#define SYSTEM_WAKE_UP         0x0083

定义发送系统控制键值接口

void send_system(uint16_t data)

{

HidKeyboard_Write(REPORT_ID_SYSTEM, data);

}

发送休眠键值

send_system(SYSTEM_SLEEP);

  • 唤醒休眠状态的PC机

唤醒休眠状态的PC机;远程唤醒的操作就是把USB控制寄存器的第4位置1,然后等待10ms把USB控制寄存器的第4位置为0,最后进入RESUME_OFF状态,设备的一次远程唤醒请求完成.

根据APM32F103提供的库接口,

其定义联合体如下

typedef struct

{

    /** Endpoint */

    USBD_EP_REG_T EP[8];

    __IM  uint32_t  RESERVED[8];

    /** @brief Control register */

    union

    {

        __IOM uint32_t CTRL;

        struct

        {

            __IOM uint32_t FORRST          : 1;

            __IOM uint32_t PWRDOWN         : 1;

            __IOM uint32_t LPWREN          : 1;

            __IOM uint32_t FORSUS          : 1;

            __IOM uint32_t WUPREQ          : 1;

            __IM  uint32_t RESERVED1       : 3;

            __IOM uint32_t ESOFIEN         : 1;

            __IOM uint32_t SOFIEN          : 1;

            __IOM uint32_t RSTIEN          : 1;

            __IOM uint32_t SUSIEN          : 1;

            __IOM uint32_t WUPIEN          : 1;

            __IOM uint32_t ERRIEN          : 1;

            __IOM uint32_t PMAOUIEN        : 1;

            __IOM uint32_t CTRIEN          : 1;

            __IM  uint32_t RESERVED2       : 16;

        }CTRL_B;

};

所以下面WUPREQ为唤醒位。

#define USBD_SetResume()             (USBD->CTRL_B.WUPREQ = BIT_SET)

#define USBD_ResetResume()           (USBD->CTRL_B.WUPREQ = BIT_RESET)

直接调用

USBD_SetResume();

delayMs(10);

         USBD_ResetResume();

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rosir_zhong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值