fxyc87 发表于 2020-11-6 09:02

【MM32 eMiniBoard测评】HID深入理解

<p>来点个人理解的HID知识点</p>

<p>HID通过端点方式来和PC进行USB交互</p>

<p>其中端点0不用配置,可以直接进行收/发数据,通常是来配置USB信息,比如描述符</p>

<p>该MCU型号是MM32F0133C7P ,共有5个端点(Endpoint)</p>

<p>另有端点1-4,这4个端点只能配置为收或发任选一,而不能同时存在,通过端点0配置的描述符固定了他是收还是发,还是不用</p>

<p>这些均在usb_conf.h 和&nbsp;usb_pwr.c 以及usb_desc.c ,这3个文件中进行配置</p>

<p>上次用了官方示例库&nbsp;&nbsp;<strong>MM32F013x_Samples\LibSamples\USB\USB_HID_Suspend</strong></p>

<p>这个示例只能用端点1回复PC数据,端点3接收数据,</p>

<p>我将它改成了端点1为IN(上传PC数据),端点2为OUT,接收PC数据。</p>

<p>以下是修改的代码:</p>

<ul>
        <li>usb_desc.C</li>
</ul>

<p>CustomHID_ConfigDescriptor 结构体中</p>

<p>&nbsp;</p>

<p>bEndpointAddress: Endpoint Address (IN)&nbsp;&nbsp;</p>

<p>0x81改成0x80+输入端点号1-4,</p>

<p>0x03, &nbsp; // bEndpointAddress:</p>

<p>0x3改成0x2,OUT端点3改成2,</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<ul>
        <li>usb_conf.h</li>
</ul>

<p>注释掉</p>

<p>&nbsp;//#define &nbsp;EP2_OUT_Callback &nbsp; NOP_Process</p>

<p>然后写对应的回调函数,在usb_endp.c中</p>

<ul>
        <li>usb_endp.c</li>
</ul>

<p>在回调函数中接收数据并处理</p>

<p>void EP2_OUT_Callback(void){</p>

<p>&nbsp; &nbsp; PMAToUserBufferCopy(Receive_Buffer, ENDP2, BUFF_SIZE);</p>

<p>&nbsp; // 你的代码<br />
}</p>

<p>&nbsp;</p>

<ul>
        <li>usb_pwr.c</li>
</ul>

<p>PowerOn函数中配置使能相应端点</p>

<p>开启端点1</p>

<p>&nbsp; &nbsp; _SetEP1_INT_EN(EPn_INT_EN_INACKIE); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// EPn_INT_EN_INACKIE<br />
&nbsp; &nbsp; _ClrEP1_INT_STA(EPn_INT_STATE_INACK); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// EPn_INT_STATE_INACK</p>

<p><br />
开启端点2<br />
&nbsp; &nbsp; _SetEP2_INT_EN(EPn_INT_EN_OUTACKIE);<br />
&nbsp; &nbsp; _ClrEP2_INT_STA(EPn_INT_STATE_OUTACK);</p>

<p>注释掉原有端点3代码</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp; &nbsp; _SetEP_EN((1 &lt;&lt; ENDP0) | (1 &lt;&lt; ENDP1) | (1 &lt;&lt; ENDP2));<br />
&nbsp; &nbsp; _SetEP_INT_EN((1 &lt;&lt; ENDP0) | (1 &lt;&lt; ENDP1) | (1 &lt;&lt; ENDP2));</p>

<p>&nbsp;</p>

w494143467 发表于 2020-11-6 20:10

<p>还没用过这款开发板的HID,下周用完也写一篇。</p>

freebsder 发表于 2020-11-6 22:12

<p>谢谢分享!</p>

okhxyyo 发表于 2020-11-8 22:42

<p><strong><a href="https://bbs.eeworld.com.cn/elecplay/content/145" target="_blank">灵动MM32 eMiniBoard开发板测评</a></strong></p>

<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1146791-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1146791-1-1.html</a></p>
页: [1]
查看完整版本: 【MM32 eMiniBoard测评】HID深入理解