STM32的USB如何使用端点0进行命令通信问题

2019-07-21 06:09发布

现在使用STM32F103单片机进行USB通信,现在是做USB的Keyboard模式和Custom模式,下通过端点0进行命令通信和指令响应。现在通信正常了。但如何使用USB的端点0进行上位机指令的接收和发送。我使用UserToPMABufferCopy(DataBuffer, GetEPTxAddr(ENDP0), Length); 和PMAToUserBufferCopy(Buffer, GetEPRxAddr(ENDP0), Length);都无法进行数据的接收和发送,因为也没使用过USB的端点0进行数据的通信,所以使用这两个函数,也无法进行数据的收发。希望能够解答一下关于USB的端点0如何进行数据的收发。非常感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
HCY
1楼-- · 2019-07-22 01:29
sammy902583 发表于 2018-6-13 12:34
STM32Cube里面的usbd_hid.c的USBD_HID_Setup() 实作了control pipe的传输.
所以如果您要自订end point 0,  ...

嗯  我有点不理解你说的意思   我说一下我的方法  首先就是关于set report和get report、set ldte这三个参数。不管USB是什么模式都好  这三个参数都是必须用到的。第一点主要是和PC端握手过程。第二点就是上位机会向下位机发送set report 、get report。并且我都做了响应,但在上位机给我发的02 52 7e 2d给我  我都收到了  但是回应给上位机的指令  上位机都没有收到  所以就是问题点就卡在这里   我整个通信都已经是正常的  包括普通数据上送 普通数据上送是其实其他端点  
sammy902583
2楼-- · 2019-07-22 04:32
HCY 发表于 2018-6-13 14:05
嗯  我有点不理解你说的意思   我说一下我的方法  首先就是关于set report和get report、set ldte这三个 ...

您的source code里面应该原本就有Get Protocol / Get Idle这类在control pipe回应资料给host的code吧.
可以采用同样方式回传资料试试看.
我这边看到他是用调用USBD_CtlSendData().
寻觅左岸
3楼-- · 2019-07-22 10:27
你把整个工程发给我看看呗 @qq
寻觅左岸
4楼-- · 2019-07-22 15:39
 精彩回答 2  元偷偷看……
灰太狼的伤疤
5楼-- · 2019-07-22 20:08
如果是usb 应该是能实现的 ,我们就是这样用的 但是otg的 好像不能发出去
灰太狼的伤疤
6楼-- · 2019-07-23 02:05
case CUSTOM_HID_REQ_SET_REPORT:
      hhid->IsReportAvailable = 1U;
      USBD_CtlPrepareRx (pdev, hhid->Report_buf, req->wLength);
      break;

case CUSTOM_HID_REQ_GET_REPORT:
        Get_Report = 1;  
      break;



main 中:

if(有命令)
{处理命令,保存结果到数据发送区}
if(有数据发送)
{ if(Get_Report  == 1)     {读取数据 USBD_CtlSendData 发送函数
     Get_Report   = 0;
}}

一周热门 更多>