纬图虚拟仪器论坛

 找回密码
 立即注册
搜索
楼主: wdluo

STM32例程之USB HID双向数据传输(源码下载)

  [复制链接]
发表于 2013-4-18 22:24:36 | 显示全部楼层
学习,谢谢
回复 支持 反对

使用道具 举报

发表于 2013-4-25 14:50:40 | 显示全部楼层
下载的人真多呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-25 15:03:43 | 显示全部楼层
jzlin0 发表于 2013-4-25 14:50
下载的人真多呀

回复评论的少,大家应该积极发帖回帖共同探讨学习啊
回复 支持 反对

使用道具 举报

发表于 2013-4-25 15:18:33 | 显示全部楼层
wdluo 发表于 2013-4-25 15:03
回复评论的少,大家应该积极发帖回帖共同探讨学习啊

恩,大牛。真是方便了大家
回复 支持 反对

使用道具 举报

发表于 2013-5-4 23:47:56 | 显示全部楼层
vs2010的上位机软件在win7的系统编译错误,Windows 已在 STM32_HID.exe 中触发一个断点;
回复 支持 反对

使用道具 举报

发表于 2013-5-20 15:42:07 | 显示全部楼层
楼主辛苦了!
回复 支持 反对

使用道具 举报

发表于 2013-6-6 07:50:34 | 显示全部楼层
非常感谢楼主,已经下载了,正在研究中!
有啥问题我再发帖讨论
回复 支持 反对

使用道具 举报

发表于 2013-7-17 11:01:24 | 显示全部楼层
请问楼主 USB_DISCONNECT是DP线上的上拉吗?
回复 支持 反对

使用道具 举报

发表于 2013-7-17 11:07:42 | 显示全部楼层
补充:就是程序中的那个IO口PB14是用来做什么的?如果是DP线上的上拉,楼主图中应该是PE11呀,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-17 15:14:28 | 显示全部楼层
西部经典 发表于 2013-7-17 11:01
请问楼主 USB_DISCONNECT是DP线上的上拉吗?

是用于控制上拉的,有可能在程序中和原理图有所不同
回复 支持 反对

使用道具 举报

发表于 2014-1-5 12:23:06 | 显示全部楼层
我的板子是用ST32F105,为什么接上电脑提示“无法识别的USB设备”?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-6 08:36:35 | 显示全部楼层
为了思想的飞跃 发表于 2014-1-5 12:23
我的板子是用ST32F105,为什么接上电脑提示“无法识别的USB设备”?

这个程序只能在103的片子上跑,105/107是另外的USB库
回复 支持 反对

使用道具 举报

发表于 2014-1-7 22:40:55 | 显示全部楼层
本帖最后由 为了思想的飞跃 于 2014-1-7 22:56 编辑
wdluo 发表于 2014-1-6 08:36
这个程序只能在103的片子上跑,105/107是另外的USB库
我看里面有个STM32F015/107的压缩包啊,这个也不行
_P]KZPGR8VU[[GS)~$26TO9.jpg
回复 支持 反对

使用道具 举报

发表于 2014-4-2 15:46:18 | 显示全部楼层
习惯就好 发表于 2013-4-3 15:23
你这个挺好的,请问怎么弄啊,谢谢!

楼主,我下载了,学习去了。你幸苦苦
回复 支持 反对

使用道具 举报

发表于 2014-4-15 09:40:27 | 显示全部楼层
两个启动文件有什么用?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-15 13:20:55 | 显示全部楼层
archi 发表于 2014-4-15 09:40
两个启动文件有什么用?

可以设置用哪一个的,如果是103的片子就用HD的,如果是107或者105的就要cl的
回复 支持 反对

使用道具 举报

发表于 2014-4-15 15:24:36 | 显示全部楼层
wdluo 发表于 2014-4-15 13:20
可以设置用哪一个的,如果是103的片子就用HD的,如果是107或者105的就要cl的

谢谢版主,我的编辑环境是MDK5.1 想把这个例程移植到我的project 里面去用做usb通信接收电脑发来的命令,现在我把c文件 和H文件都copy过去了,其中h文件全部copy到工程下一个inc目录,并设置了project option/c c++里面的include路径,但编辑的时候老是提示有这几个个头文件找不到:usb_lib.h usb_type.h platform_config.h这可能是什么原因?我确保文件copy对了。
回复 支持 反对

使用道具 举报

发表于 2014-4-15 15:34:01 | 显示全部楼层
另外想问版主如果我的硬件没用那个usb en信号开关三极管链接DP,直接1.5K电阻上拉到3.3V不用理会connect  disconnect就可以了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-15 18:05:49 | 显示全部楼层
archi 发表于 2014-4-15 15:34
另外想问版主如果我的硬件没用那个usb en信号开关三极管链接DP,直接1.5K电阻上拉到3.3V不用理会connect  d ...

是的,他会自动连接上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-15 18:06:27 | 显示全部楼层
archi 发表于 2014-4-15 15:24
谢谢版主,我的编辑环境是MDK5.1 想把这个例程移植到我的project 里面去用做usb通信接收电脑发来的命令, ...

库没拷贝全
回复 支持 反对

使用道具 举报

发表于 2014-4-15 21:44:59 | 显示全部楼层
wdluo 发表于 2014-4-15 18:06
库没拷贝全

工程没copy回家,明天再试试。我原来的工程已经默认把mdk3.5的库全部copy到工程目录下了。
回复 支持 反对

使用道具 举报

发表于 2014-4-16 11:58:22 | 显示全部楼层
wdluo 发表于 2014-4-15 18:06
库没拷贝全

可能是IC选型的原因,我现在用版主您给的工程文件用默认的103ZE工程是可以通过编辑,但改C8的IC编辑提示stm32f10x.h头文件语法出错
..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h(298): error:  #67: expected a "}"
是不是要比较C8和Ze的资源然后把那些没用的注销掉?
回复 支持 反对

使用道具 举报

发表于 2014-4-16 12:05:57 | 显示全部楼层
本帖最后由 archi 于 2014-4-16 12:11 编辑
wdluo 发表于 2014-4-15 18:06
库没拷贝全

如果移植到我原来的工程选MD的startup文件就是昨天提的无法include 头文件,如果改用您默认的工程,选HD MD的 startup文件改IC型号都是提示语法错误。我已经把usb使能的那个io脚改到PA了
回复 支持 反对

使用道具 举报

发表于 2014-4-16 14:57:27 | 显示全部楼层
经实验好像版主这个工程只能移植到f103XXXC系列大容量mcu上。如果要移植到小容量IC上需要更改那些文件?
回复 支持 反对

使用道具 举报

发表于 2014-4-16 23:10:03 | 显示全部楼层
折腾一天发现MDK5.1环境下在只能设高容量ic编辑完了再下载到mcu里面
,枚举成功了,通信暂时无法验证。先将就这个搞吧,明天继续折腾。
回复 支持 反对

使用道具 举报

发表于 2014-4-16 23:11:44 | 显示全部楼层
经室友验证mdk4.2下更换project device 和startup编辑没事
回复 支持 反对

使用道具 举报

发表于 2014-5-22 11:24:08 | 显示全部楼层
支持楼主,帮大忙了,网上找了好久,一直没有VS2010的USB通信
回复 支持 反对

使用道具 举报

发表于 2014-6-2 22:32:07 | 显示全部楼层
是否上传的源代码不对,我用F103无法读取,能发送
回复 支持 反对

使用道具 举报

发表于 2014-6-2 22:54:25 | 显示全部楼层
starstqr 发表于 2014-6-2 22:32
是否上传的源代码不对,我用F103无法读取,能发送

总算成功了,USB_SendData函数需要把EP2改成EP1:
        UserToPMABufferCopy(data, ENDP1_TXADDR, dataNum);
        SetEPTxCount(ENDP1, REPORT_COUNT);
        SetEPTxValid(ENDP1);

CustomHID_Reset函数里需要添加
         SetEPTxAddr(ENDP1, ENDP1_TXADDR);
     SetEPTxCount(ENDP1, REPORT_COUNT);
    // SetEPTxStatus(ENDP2, EP_TX_DIS);
     SetEPTxStatus(ENDP1, EP_RX_VALID);

配置描述符里面,把端点描述符从0x82改成0x81,这样一来,使用端点1进行接收和发送,而原来使用端点2发送数据给PC端,使用端点1接收PC发给设备的数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-4 09:10:54 | 显示全部楼层
starstqr 发表于 2014-6-2 22:54
总算成功了,USB_SendData函数需要把EP2改成EP1:
        UserToPMABufferCopy(data, ENDP1_TXADDR, dataNum);
...

这些都是基础问题,稍加注意下一般都不会有什么问题的
回复 支持 反对

使用道具 举报

发表于 2014-6-12 20:55:47 | 显示全部楼层
学习了,多谢分享
回复 支持 反对

使用道具 举报

发表于 2014-6-15 22:41:31 | 显示全部楼层
本帖最后由 cc1989 于 2014-6-15 22:42 编辑

楼主,我把你的代码移植到了我的工程文件中,基本功能实现了,但是主函数中直接调用USB_SIL_Write()函数,没有办法发送数据。必须要在接收到数据后才能发送出数据:
                       if(USB_Received_Flag)
                        {
                        USB_Received_Flag=0;
                        ret = USB_GetData(data,sizeof(data));

                        //USB_SendData(data,sizeof(data));

                        GPIO_SetBits(GPIOC, GPIO_Pin_0);
                        Delay(0xfffff);
                        GPIO_ResetBits(GPIOC, GPIO_Pin_0);
                        Delay(0xfffff);        
                        
                        /*for(i=0;i<8;i++)
                        {
                           can1_send_data=data;
                        } */
                        
                        

                        //USB_SendData(data,sizeof(data));
                        USB_SIL_Write(EP2_IN, data, 20);
                    }
                        
                        
                        USB_SIL_Write(EP2_IN, data, 20);

只有if内的USB_SIL_Write发送的数据电脑能接收到,后面一个不可以。但是  EP2_IN_Callback(void)  函数一直都能执行,完全不知道怎么设置了。。。。
还望楼主指点下啊, 不胜感激
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-17 09:14:28 | 显示全部楼层
cc1989 发表于 2014-6-15 22:41
楼主,我把你的代码移植到了我的工程文件中,基本功能实现了,但是主函数中直接调用USB_SIL_Write()函数,没 ...

你要明白USB数据传输的基本特性,也就是从机是不能主动传输数据的,任何数据的传输都是由主机发起,也就是说,只有当主机执行读数据操作时,从机再发送数据,这个数据才能正确的被传输到主机,否则主机虽然调用写数据函数,但是数据是不能正确的传输到从机的。
回复 支持 反对

使用道具 举报

发表于 2014-7-2 19:44:49 | 显示全部楼层
你好,我想问一下,为什么我的枚举不成功呢?  我的板是STM32F103C8的,我把USB的使能引脚改成了相应的PA引脚,编译没问题,可是设备不能被检测到。  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-3 21:01:10 | 显示全部楼层
gqqsherry 发表于 2014-7-2 19:44
你好,我想问一下,为什么我的枚举不成功呢?  我的板是STM32F103C8的,我把USB的使能引脚改成了相应的PA引 ...

硬件是一样的吗?上拉电阻接好了没?
回复 支持 反对

使用道具 举报

发表于 2014-7-4 13:28:50 | 显示全部楼层
本帖最后由 gqqsherry 于 2014-7-4 13:30 编辑
wdluo 发表于 2014-7-3 21:01
硬件是一样的吗?上拉电阻接好了没?

我用的是现成的开发板STM32F103C8-PKT
usb部分的连接图如下
usb.jpg
回复 支持 反对

使用道具 举报

发表于 2014-7-9 10:26:56 | 显示全部楼层
先感谢楼主,需要这个代码,刚在STM32F103上测试可行,需要慢慢研究。可能楼主有些地方没说清楚,楼主图上的PE11应该是USB检测脚吧,在STM32F103 和107上面不一样。楼主帖的源码第一份是103的,第二份是107的。103的检测要改成PB14,OTG那个脚不知道干啥用的,现在没用到,空着。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-9 13:33:16 | 显示全部楼层
vgezi 发表于 2014-7-9 10:26
先感谢楼主,需要这个代码,刚在STM32F103上测试可行,需要慢慢研究。可能楼主有些地方没说清楚,楼主图上的 ...

PE11就是实现软件断开或者连接功能,比如程序在某个时候需要和主机断开连接就可以通过控制这个引脚来实现。
回复 支持 反对

使用道具 举报

发表于 2014-7-9 22:04:19 | 显示全部楼层
wdluo 发表于 2014-7-9 13:33
PE11就是实现软件断开或者连接功能,比如程序在某个时候需要和主机断开连接就可以通过控制这个引脚来实现 ...

多谢,今天浏览了一下圈圈那本书,感觉不错,里面说的很详细。
回复 支持 反对

使用道具 举报

发表于 2014-7-31 14:51:50 | 显示全部楼层
正好在学习中  参考一下
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|纬图虚拟仪器

GMT+8, 2024-12-22 12:18 , Processed in 0.333814 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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