viphotman 发表于 2019-7-24 13:57

【沁恒试用】USB HID 的实现

本帖最后由 viphotman 于 2019-7-24 13:57 编辑

<p>通过触摸按键来模拟鼠标左右键;</p>

<p>文件结构:</p>

<p>主要是综合了gpio,touch ,usb几个demo的功能;</p>

<p>GPIO部分是LED控制;</p>

<p>TOUCH是用来当按键;</p>

<p>USB用HID转鼠标左右按下与释放;</p>

<p>看USB描述符;</p>

<p>下图为结构图;从USB 协议里截图而来</p>

<p>有:设置描述符,配置描述符;接口描述符,端点描述符,HID描述符,HID报告,字符串描述符;<br />
</p>

<p> 接口描述时的鼠标键盘类</p>

<p></p>

<p>下面对描述符部分注释一下;</p>

<pre>
<code class="language-cpp">/*
// USB 描述符
// 1 设备描述符(=1)
// 2 配置描述符(=2)
// 3 字符串描述符(=3)
// 4 接口描述符(4)
// 5 端点描述符(5)
//
// HID描述符(0x21)
*/

/*设备描述符*/
UINT8C DevDesc[] = {
0x12, //长度
0x01, //类型:设备描述符(=1)
0x10, 0x01, // USB 协议版本 低8位在前
0x00,//类代码
0x00,//子类代码
0x00,//设备使用的协议
THIS_ENDP0_SIZE, //端点0最大包长
0x86,0x1a,// 厂商VID
0xe1,0xe6,// 产品 PID
0x00,0x01,//设备版本号
0x01,//字符串索引 :描述厂商
0x02,//字符串索引 :描述产品
0x00,//字符串索引 :产品序列
0x01 //配置数
                   };
/*字符串描述符*/
UINT8CMyLangDescr[] = { 0x04, 0x03, 0x09, 0x04 };                                    // 语言描述符
UINT8CMyManuInfo[] = { 0x0E, 0x03, 'w', 0, 'c', 0, 'h', 0, '.', 0, 'c', 0, 'n', 0 }; // 厂家信息
UINT8CMyProdInfo[] = { 0x0C, 0x03, 'C', 0, 'H', 0, '5', 0, '4', 0, '9', 0 };         // 产品信息
/*配置描述符*/
UINT8C CfgDesc[] =
{
    0x09,0x02,//此描述符长度 ,配置描述符
        0x3b,0x00,//配置描述符集合总长度 0x003b
        0x02,//支持接口数: 0,1
        0x01,//该配置的值
        0x00,//该配置的字符串索引
        0xA0,//设备属性
        0x32,//最大要电电流 0x32 x 2mA = 100mA                  

    0x09,0x04,//此描述符长度 , 接口描述符,键盘
        0x00,//接口编号:0
        0x00,//备用编号
        0x01,//此接口使用端点数
        0x03,//此接口使用的类 :HID
        0x01,//此接口使用的子类:
        0x01,//此接口使用的协议:KEYBOARD
        0x00,// 此接口字符串索引
       
    0x09,0x21,//此描述符长度 ,HID类描述符
        0x11,0x01,// USB HID version
        0x00,// 国家代码 00 是没定义,33是US
        0x01,//下级描述符的数量
        0x22,//下级描述符的类型
        sizeof(KeyRepDesc)&amp;0xFF,sizeof(KeyRepDesc)&gt;&gt;8, //下级描述符的长度
   
        0x07,0x05,//此描述符长度 ,端点描述符
        0x81,//端点地址
        0x03,//属性
        EP1_IN_SIZE,0x00,//端点支持最大的包长度
        0x0a,//端口查询时间

    0x09,0x04,//此描述符长度 ,接口描述符,鼠标
        0x01,//接口编号:1
        0x00,//备用编号
        0x01,//此接口使用端点数
        0x03,//此接口使用的类 HID
        0x01,//此接口使用的子类
        0x02,//此接口使用的协议: MOUSE
        0x00,//// 此接口字符串索引
       
    0x09,0x21,//此描述符长度 ,HID类描述符
        0x10,0x01,// USB HID version
        0x00,// 国家代码
        0x01,//下级描述符的数量
        0x22,//下级描述符的类型
        sizeof(MouseRepDesc)&amp;0xFF,sizeof(MouseRepDesc)&gt;&gt;8,//下级描述符的长度
   
        0x07,0x05,//此描述符长度 ,端点描述符
        0x82,//端点地址
        0x03,//属性
        EP2_IN_SIZE,0x00,//端点支持最大的包长度
        0x0a //端口查询时间
};</code></pre>

<p>&nbsp;</p>

<p>沁恒的MCU在使用上程序量没有太多;也没修改多少;</p>

<p>下面是工程文件:</p>

<p><br />
<strong><span style="color:#5e7384">此内容由EEWORLD论坛网友<span style="font-size:medium">viphotman</span>原创,如需转载或用于商业用途需征得作者同意并注明出处</span></strong></p>

dcexpert 发表于 2019-7-24 14:00

<p>看起来使用非常简单啊</p>

viphotman 发表于 2019-7-24 14:08

dcexpert 发表于 2019-7-24 14:00
看起来使用非常简单啊

<p>初步用起来还不错,USB部分代码量少,比起之前看的32位单片机的代码要好理解一些;</p>

沁恒USB单片机 发表于 2019-7-25 09:26

<p>一个功能调试了多个功能模块了<img height="50" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/onion/Onion--108.gif" width="50" /></p>

viphotman 发表于 2019-7-25 11:56

沁恒USB单片机 发表于 2019-7-25 09:26
一个功能调试了多个功能模块了

<p>你们这个触摸按键是否能组合成手势!</p>

沁恒USB单片机 发表于 2019-7-25 18:24

viphotman 发表于 2019-7-25 11:56
你们这个触摸按键是否能组合成手势!

<p>可以做滑条,用多个触摸按键</p>
页: [1]
查看完整版本: 【沁恒试用】USB HID 的实现