专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
用STM32F103ZET6写的USB HID设备与计算机通信程序,可以接收数据,但发送有问题,请教一下大家
2019-07-21 03:04
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
11212
41
1776
USB枚举过程是成功了的,计算机设备管理器中看到的设备:
用PortHelper调试USB如下:
点击发送后,STM32接收到数据并且从串口返回接收到的数据如下:
我的STM32 USB通信程序中,当端点1接收到一次数据后就每隔一段时间通过端点2发送数据(内容是:哦艾斯黛拉),然后从串口返回的数据发现STM32每隔一段时间端点2都会产生IN中断,但是
PortHelper软件并没有接收到数据,然后我用Bus Hound抓取USB包,首先抓取的是HID-compliant device设备,如下图:
然后用
PortHelper USb调试器与STM32通信,Bus Hound只抓取到了OUT数据包,如下:
从端点2发送到计算机IN的数据包没有,但是STM32 USB每隔一段时间产生了IN中断,也就是说STM32发送了数据给电脑,但
PortHelper中端点2没有收到数据,接着我有用Bus Hound抓取“USB输入设备”的数据,如下图:
用
PortHelper与STM32进行USB通信,Bus Hound抓取到的数据包如下:
从抓取到的数据包看到“USB输入设备”收到的STM32发来的数据,图中圈出来的就是“
哦艾斯黛拉”的十六进制数据,我想问的是为什们“
HID-compliant device”收不到IN数据?而
“USB输入设备”
可以?(USB的各种描述符是直接从一个STM USB HID例程复制过来的,那个例程
“
HID-compliant device”和
“USB输入设备”都可以收到STM32从端点2发送上来的数据。
)
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
41条回答
wlff
2019-07-22 05:17
回复【7楼】yarmin:
---------------------------------
在USB报告描述符中这两句
0x75,0x08, // REPORT_SIZE (8)
0x95,0x16, // REPORT_COUNT (22)
就规定了传输数据为8bit为一个单位,共22个单位也就是22字节。
PMA缓冲地址范围是1KB的,而手册中说USB缓冲区是512字节,其原因我在网上搜的:
1. usb和can公用512B的RAM,但是RAm地址为0x40006000-0x40006400,分明为1KB啊,为什么还是说512B.
2. 若PC机读RAM中数据时,我同时对RAM进行写操作,怎么办,我感觉库中并没有对这种操作进行处理啊。
3. 对于缓冲区,不理解为什么给了个地址,又同时给了个USB本地地址,并且我认为,地址偏移应该为[USB_BTABLE]*2+n*16+(0,4,8,12),也就是缓冲区描述表也应该扩大2倍,不知道是不是
1)这个缓冲区是个双端口RAM,CPU一端是以32位宽访问,而USB一端是以16位宽访问,因此从CPU端看浪费了一半的地址空间,即从CPU端读出32位数据时只有16位是有效的;所以1KB的地址空间,实际只有512字节的存储空间。
2)因为这个缓冲区是个双端口RAM,所以你不用担心访问冲突的问题,硬件会协调它们之间的操作。
3)因为这个缓冲区是个双端口RAM,所以有2个地址空间,一个是从CPU端看,另一个是从USB收发器那一端看。
至于传输速度,我只测试了在中断时间为1ms,每次传输22字节时,速率为22KB/s。鼠标键盘失灵倒是没遇到过
加载中...
查看其它41个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
---------------------------------
在USB报告描述符中这两句
0x75,0x08, // REPORT_SIZE (8)
0x95,0x16, // REPORT_COUNT (22)
就规定了传输数据为8bit为一个单位,共22个单位也就是22字节。
PMA缓冲地址范围是1KB的,而手册中说USB缓冲区是512字节,其原因我在网上搜的:
1. usb和can公用512B的RAM,但是RAm地址为0x40006000-0x40006400,分明为1KB啊,为什么还是说512B.
2. 若PC机读RAM中数据时,我同时对RAM进行写操作,怎么办,我感觉库中并没有对这种操作进行处理啊。
3. 对于缓冲区,不理解为什么给了个地址,又同时给了个USB本地地址,并且我认为,地址偏移应该为[USB_BTABLE]*2+n*16+(0,4,8,12),也就是缓冲区描述表也应该扩大2倍,不知道是不是
1)这个缓冲区是个双端口RAM,CPU一端是以32位宽访问,而USB一端是以16位宽访问,因此从CPU端看浪费了一半的地址空间,即从CPU端读出32位数据时只有16位是有效的;所以1KB的地址空间,实际只有512字节的存储空间。
2)因为这个缓冲区是个双端口RAM,所以你不用担心访问冲突的问题,硬件会协调它们之间的操作。
3)因为这个缓冲区是个双端口RAM,所以有2个地址空间,一个是从CPU端看,另一个是从USB收发器那一端看。
至于传输速度,我只测试了在中断时间为1ms,每次传输22字节时,速率为22KB/s。鼠标键盘失灵倒是没遇到过
一周热门 更多>