OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11206|回复: 13

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

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-1-9
在线时间
11 小时
发表于 2018-6-12 19:42:08 | 显示全部楼层 |阅读模式
10金钱
现在使用STM32F103单片机进行USB通信,现在是做USB的Keyboard模式和Custom模式,下通过端点0进行命令通信和指令响应。现在通信正常了。但如何使用USB的端点0进行上位机指令的接收和发送。我使用UserToPMABufferCopy(DataBuffer, GetEPTxAddr(ENDP0), Length); 和PMAToUserBufferCopy(Buffer, GetEPRxAddr(ENDP0), Length);都无法进行数据的接收和发送,因为也没使用过USB的端点0进行数据的通信,所以使用这两个函数,也无法进行数据的收发。希望能够解答一下关于USB的端点0如何进行数据的收发。非常感谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2013-11-27
在线时间
518 小时
发表于 2018-6-12 21:52:21 | 显示全部楼层
端口0 可以用来发数据?
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-1-9
在线时间
11 小时
 楼主| 发表于 2018-6-13 10:37:51 | 显示全部楼层
wmh19910511 发表于 2018-6-12 21:52
端口0 可以用来发数据?

可以用来上位机进行命令控制,是能够进行数据传输的,但数据量不是很大的传输。主要是用来响应上位机的命令控制指令。
回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2013-11-27
在线时间
518 小时
发表于 2018-6-13 10:54:18 | 显示全部楼层
那你在看看 反正我理解的是 端口0 只能用作为识别作用 不能传数据[img][/img]  如果端口0 能传数据 那不是乱套了, 有可能是我理解错了 你自己好好看看吧
usb.png
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-1-9
在线时间
11 小时
 楼主| 发表于 2018-6-13 11:13:52 | 显示全部楼层
本帖最后由 HCY 于 2018-6-13 11:18 编辑
wmh19910511 发表于 2018-6-13 10:54
那你在看看 反正我理解的是 端口0 只能用作为识别作用 不能传数据[/img]  如果端口0 能传数据 那不是乱套了 ...

可以的  我给你看一个截图就知道了  我使用bus hound扑抓的数据 但可以确定一点   端点0是能够进行数据的收发  但就是不知道如何使用
JL3U9_3E3@D%ZW((CTP_]E5.png
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-1-9
在线时间
11 小时
 楼主| 发表于 2018-6-13 11:19:06 | 显示全部楼层
HCY 发表于 2018-6-13 11:13
可以的  我给你看一个截图就知道了  我使用bus hound扑抓的数据 但可以确定一点   端点0是能够进行数据的 ...

其中06 02 7e 01 31 03 4f就是经过端点0把数据上送到上位机的
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-6-13 12:34:20 | 显示全部楼层
STM32Cube里面的usbd_hid.c的USBD_HID_Setup() 实作了control pipe的传输.
所以如果您要自订end point 0, 需要在这边加入自订的request和对应的code.
当然您要跟上位机套好招, 由host发起自订request.
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2018-1-9
在线时间
11 小时
 楼主| 发表于 2018-6-13 14:05:24 | 显示全部楼层
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给我  我都收到了  但是回应给上位机的指令  上位机都没有收到  所以就是问题点就卡在这里   我整个通信都已经是正常的  包括普通数据上送 普通数据上送是其实其他端点  
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-6-13 17:08:25 | 显示全部楼层
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

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2018-3-17
在线时间
32 小时
发表于 2018-11-26 12:12:18 | 显示全部楼层
你把整个工程发给我看看呗 @qq
回复

使用道具 举报

3

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2018-3-17
在线时间
32 小时
发表于 2018-11-26 12:12:45 | 显示全部楼层
把整个工程给我看看呗975967232@qq.com
回复

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-4-26
在线时间
12 小时
发表于 2019-1-7 15:06:22 | 显示全部楼层
如果是usb 应该是能实现的 ,我们就是这样用的 但是otg的 好像不能发出去
回复

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2017-4-26
在线时间
12 小时
发表于 2019-1-7 15:27:07 | 显示全部楼层
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;
}}
回复

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2018-10-31
在线时间
19 小时
发表于 2021-11-3 20:22:08 | 显示全部楼层
现在调试,遇到同样的问题了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 10:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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