搜索
bottom↓
回复: 114

STM32F407VG实现USB自定义HID加VC上位机

  [复制链接]

出0入0汤圆

发表于 2012-8-23 18:54:10 | 显示全部楼层 |阅读模式
经过几天努力总算把STM32F407VG的USB自定义HID调出来了。个人怀疑ST的官方库STM32_USB-Host-Device_Lib_V2.1.0有问题,问题应该在CMSIS中。之前想的是通过修改STM32_USB-Host-Device_Lib_V2.1.0库中的HID例程实现自定义HID。但做相应修改后程序下载到Discovery板子上,插上USB,电脑提示是无法识别的USB设备。而把STM32F4-Discovery_FW_V1.1.0中的Demonstration例程下载进去就能实现鼠标功能。然后修改Demonstration例程只保留USB的初始化,电脑也可识别。后面用STM32F4-Discovery_FW_V1.1.0中的STM32_USB_OTG_Driver库程序和STM32_USB_Device_Library库程序,加入自己建的工程,编译下载,电脑能识别。然后用STM32_USB-Host-Device_Lib_V2.1.0中的USB库文件替换相应文件,编译下载,电脑能识别。替换我工程里的STM32F4xx_StdPeriph_Driver文件夹和CMSIS文件夹,编译下载,电脑就不能识别了。再把CMSIS文件夹替换回来,编译下载,电脑又能识别了。所以怀疑STM32_USB-Host-Device_Lib_V2.1.0的CMSIS文件夹中程序有问题。
电脑能识别了,后面的程序修改成自定义HID就简单了,具体在程序的readme中。VC上位机还是用的之前那个http://www.amobbs.com/thread-5493024-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-8-23 21:28:11 | 显示全部楼层
沙发  居然 第一次沙发呢  我的407板子也快出来了

出0入0汤圆

 楼主| 发表于 2012-8-23 22:04:06 | 显示全部楼层
恭喜楼上快有自己的板子了。

出0入0汤圆

发表于 2012-8-23 22:33:58 | 显示全部楼层
学习 f4 hid

出0入0汤圆

发表于 2012-8-24 06:55:36 | 显示全部楼层
谢谢,收下了。
头像被屏蔽

出0入0汤圆

发表于 2012-8-29 09:34:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2012-8-29 13:19:40 | 显示全部楼层
这个好,楼主好样的

出0入0汤圆

发表于 2012-9-15 11:51:00 | 显示全部楼层
好人,,正需要这个,用USB转串口调试太麻烦了。。呵呵

出0入0汤圆

发表于 2012-9-19 00:53:38 | 显示全部楼层
感謝~~解了我的疑惑啊!!! 我自己也做了個開發版也是遇到認不到USB.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-9-19 01:28:44 | 显示全部楼层
本帖最后由 cctsao1008 于 2012-9-19 01:31 编辑

找到問題的根本原因了!!!!

請注意!!!!!!!!! STM32F4 discovery 的 HSE 是 25Mhz!!!!

我的是 8 Mhz

所以 CMSIS 的檔案 (system_stm32f4xx.c )要改

1.
#define HSE_VALUE  80000000  // 原本是 25000000

2.
/************************* PLL Parameters *************************************/
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      25 <-----這個要改為"8"
#define PLL_N      336

/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2

/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7

/******************************************************************************/


我猜樓主的 clock 因該是 8Mhz的!!!!!!!!

出0入0汤圆

发表于 2012-9-19 17:09:22 | 显示全部楼层
我也弄了几天了,只能识别到输入设备,但设备不能启动,实在搞不懂了

出0入0汤圆

 楼主| 发表于 2012-9-19 17:54:52 | 显示全部楼层
cctsao1008 发表于 2012-9-19 01:28
找到問題的根本原因了!!!!

請注意!!!!!!!!! STM32F4 discovery 的 HSE 是 25Mhz!!!!

时钟设置我是用STM32F4xx_Clock_Configuration_V1.0.1.xls生成的,不过被替换没有就忘了。现在板子也不在我这了,只有过几天在试试。

出0入0汤圆

 楼主| 发表于 2012-9-19 17:57:31 | 显示全部楼层
zhangyb 发表于 2012-9-19 17:09
我也弄了几天了,只能识别到输入设备,但设备不能启动,实在搞不懂了

识别但不能启动,不知道什么意思,等楼下讲解。

出0入0汤圆

发表于 2012-9-20 09:38:39 | 显示全部楼层
就是PC能识别到输入设备,但WINDOWS显示设备不能启用!
找到原因了,还是输入端点的描述的问题!
我一直以为硬件有什么问题呢?
谢谢楼主的代码,我参考了你的代码改动了一下就没问题了!

出0入0汤圆

发表于 2012-10-1 16:53:08 | 显示全部楼层
学习,备用

出0入0汤圆

发表于 2012-10-10 10:47:37 | 显示全部楼层
顶一个!

出0入0汤圆

发表于 2012-10-10 11:04:02 | 显示全部楼层
不错,学习了

出0入0汤圆

发表于 2012-10-11 18:14:01 | 显示全部楼层
正需要,学习拉!

出0入0汤圆

发表于 2012-10-11 18:54:24 | 显示全部楼层
                                                         。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-11-17 10:40:38 | 显示全部楼层
mark~~~~~~~~~~~~~~

出0入0汤圆

发表于 2012-11-17 12:28:01 | 显示全部楼层
stm32f407 的 usb 标记下

出0入0汤圆

发表于 2012-11-17 13:47:34 | 显示全部楼层
标记一下,回头学习

出0入0汤圆

发表于 2012-11-23 14:55:27 | 显示全部楼层
MARK                  

出0入0汤圆

发表于 2012-11-23 19:34:37 | 显示全部楼层
好东西,USB+VC上位机

出0入0汤圆

发表于 2012-11-24 19:48:24 | 显示全部楼层
mark..用到的  再来看

出0入0汤圆

发表于 2012-12-1 07:52:44 | 显示全部楼层
快要做板了

出0入0汤圆

发表于 2012-12-4 09:43:30 | 显示全部楼层
先谢谢 楼主哦 。。。

出0入0汤圆

发表于 2012-12-4 15:35:04 | 显示全部楼层
为什么下不了啊?

出0入0汤圆

发表于 2012-12-26 11:54:54 | 显示全部楼层
楼主程序可用,不过我猜想楼主之所以库不同的问题原因就像10楼说的那样。对楼主的程序进行10楼所说的修改,可用!谢谢!

出0入0汤圆

 楼主| 发表于 2012-12-26 18:10:19 | 显示全部楼层
正如我在12楼说的,改了又被替换了,所以识别不了。

出0入0汤圆

发表于 2013-1-17 22:50:22 | 显示全部楼层
我也是最近才跑通417的usb的full-speed,高速还要好好研究下

出0入0汤圆

发表于 2013-3-15 12:46:10 | 显示全部楼层
不cuo !               

出0入0汤圆

发表于 2013-3-18 08:46:17 | 显示全部楼层
正想学这个呢,呵呵

出0入0汤圆

发表于 2013-3-19 21:52:26 | 显示全部楼层
learner123 发表于 2013-1-17 22:50
我也是最近才跑通417的usb的full-speed,高速还要好好研究下

求帮助啊   怎么跑fullspeed

出0入0汤圆

发表于 2013-3-19 22:16:54 | 显示全部楼层
ding                        

出0入0汤圆

发表于 2013-3-22 00:35:11 | 显示全部楼层
10楼正解啊

出0入0汤圆

发表于 2013-3-22 10:54:25 | 显示全部楼层
顶一个~

出0入0汤圆

发表于 2013-3-25 17:03:27 | 显示全部楼层
LZ,能否用f4来的usb来传输摄像头的数据到PC机,其他的速率无法跟上。

出0入0汤圆

 楼主| 发表于 2013-3-25 18:42:34 | 显示全部楼层
xuefeiying1 发表于 2013-3-25 17:03
LZ,能否用f4来的usb来传输摄像头的数据到PC机,其他的速率无法跟上。

这个没试过,板子也早还给同学了。

出0入0汤圆

发表于 2013-3-29 13:20:09 | 显示全部楼层
谢谢!!十分有用,官方的并没有接受只有发送,看了你的很有启发

出0入0汤圆

 楼主| 发表于 2013-3-29 16:46:59 | 显示全部楼层
这里就是一个相互学习的平台

出0入0汤圆

发表于 2013-4-18 10:45:46 | 显示全部楼层
很好!!!

出0入0汤圆

发表于 2013-4-19 16:41:09 | 显示全部楼层
我是新手,我用楼主分享的工程,请问为什么上位机打开设备失败呢?是没有驱动吗?求解。。。用的板载的USB接口

出0入0汤圆

 楼主| 发表于 2013-4-20 10:50:35 | 显示全部楼层
guidiantanglei 发表于 2013-4-19 16:41
我是新手,我用楼主分享的工程,请问为什么上位机打开设备失败呢?是没有驱动吗?求解。。。用的板载的USB ...

USB接上后你要看设备管理器有没有你的设备

出0入0汤圆

发表于 2013-4-20 23:50:40 | 显示全部楼层
学习一下。。。

出0入0汤圆

发表于 2013-4-21 01:12:05 | 显示全部楼层
MARK~

出0入0汤圆

发表于 2013-4-21 07:27:19 | 显示全部楼层
好资料,学习了。

出0入0汤圆

发表于 2013-5-3 15:39:12 | 显示全部楼层
支持喜欢                                          

出0入0汤圆

发表于 2013-5-9 21:27:29 | 显示全部楼层
看下. mark下

出0入0汤圆

发表于 2013-5-9 22:50:16 | 显示全部楼层
标记一下,谢谢了

出0入0汤圆

发表于 2013-5-10 08:27:02 | 显示全部楼层
好东西,USB+VC上位机

出0入0汤圆

发表于 2013-5-21 18:28:38 | 显示全部楼层
好东西,一定要顶!楼主啊,上位机能给个编译好的exe文件吗?这全是源代码,我没有编译环境啊。

出0入0汤圆

 楼主| 发表于 2013-5-21 20:17:33 | 显示全部楼层
5260111 发表于 2013-5-21 18:28
好东西,一定要顶!楼主啊,上位机能给个编译好的exe文件吗?这全是源代码,我没有编译环境啊。 ...

这个你可以试试。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-5-26 15:16:46 | 显示全部楼层
兄弟啊,还是用不了。运行显示“没找到MFC42D.DLL”。

出0入0汤圆

发表于 2013-5-26 17:12:32 | 显示全部楼层
蛋黄派 发表于 2012-9-15 11:51
好人,,正需要这个,用USB转串口调试太麻烦了。。呵呵

好处就是不用usb转串口线了,还有其他方便之处吗。看看有没有必要自己也弄成usb调试。

出0入0汤圆

 楼主| 发表于 2013-5-26 22:33:07 | 显示全部楼层
5260111 发表于 2013-5-26 15:16
兄弟啊,还是用不了。运行显示“没找到MFC42D.DLL”。

试试这个,修改成发行版本了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-5-29 11:01:03 | 显示全部楼层
谢谢,收下了。回头我测试一下。

出0入0汤圆

发表于 2013-6-1 13:21:29 | 显示全部楼层
学习学习,赞一个。

出0入0汤圆

发表于 2013-6-13 09:07:52 | 显示全部楼层
楼主,为什么我把你的例子下到我的stm32f407vg板子上,插上USB,电脑不提示找到设备呢,而且在设备管理器中也没看到相应的设备呢,这是什么情况哦?

出0入0汤圆

 楼主| 发表于 2013-6-13 22:52:21 | 显示全部楼层
hzhena 发表于 2013-6-13 09:07
楼主,为什么我把你的例子下到我的stm32f407vg板子上,插上USB,电脑不提示找到设备呢,而且在设备管理器中 ...

程序是给官方探索板,如果不是就要修改。

出0入0汤圆

发表于 2013-6-13 23:23:23 | 显示全部楼层
都是好东西

出0入0汤圆

发表于 2013-8-29 10:59:04 | 显示全部楼层
kongan 发表于 2013-6-13 22:52
程序是给官方探索板,如果不是就要修改。

要改些什么?

出0入0汤圆

 楼主| 发表于 2013-8-29 12:47:00 | 显示全部楼层
USB硬件相关部分

出0入0汤圆

发表于 2013-8-30 12:52:11 | 显示全部楼层
kongan 发表于 2013-8-29 12:47
USB硬件相关部分

楼主能否详细一些?我正在做这个stm32F407 USB HID通信,移植官网的例程,也试了你的程序,都提示无法识别设备。晶振部分我用的8M,这个地方我注意到了。硬件部分要改成什么样的?

出0入0汤圆

 楼主| 发表于 2013-8-30 13:12:56 | 显示全部楼层
对比电路图修改

出0入0汤圆

发表于 2013-9-5 15:47:11 | 显示全部楼层
kongan 发表于 2013-8-30 13:12
对比电路图修改


谢谢分享,我也在玩STM32F2的USB,用官方2.1.0的库移植VCP成USB自定义设备,可以成功通信但是速度很慢(FS模式)。每次控制传输都要4-5ms才有响应。

http://www.amobbs.com/thread-5539272-1-1.html

出0入0汤圆

发表于 2013-10-25 15:32:05 | 显示全部楼层
非常好,谢谢分享,最好能有个说明文档~

出0入0汤圆

发表于 2013-10-25 16:40:48 | 显示全部楼层
试过了,能用。

出0入0汤圆

发表于 2013-10-25 16:41:24 | 显示全部楼层
试过了,能用。

出0入0汤圆

发表于 2013-11-4 14:43:21 | 显示全部楼层
我也正在做407的主从实验。我现在的现象是:当为主机时,usb_bsp中的延时需要使用#define USE_ACCURATE_TIME
当定义为从设备时,就需要把这句屏蔽掉,正在想是什么原因呢。有知道的请不吝赐教

出0入0汤圆

发表于 2013-11-5 23:40:24 | 显示全部楼层
楼主,你好!请问你做过批量传输的嘛?

出0入0汤圆

发表于 2013-11-6 08:53:49 | 显示全部楼层
用你的例子,我改成批量传输的话是不是就只需要把端点配置改成批量传输就可以了?当我一次传输大于256个字节的时候就出现丢数而且丢的挺多,谢谢LZ不吝指教

出0入0汤圆

 楼主| 发表于 2013-11-6 09:00:14 | 显示全部楼层
我只是修改了一下官方程序作为测试用,并没有深入研究USB。

出0入0汤圆

发表于 2013-11-6 15:09:28 | 显示全部楼层
kongan 发表于 2013-11-6 09:00
我只是修改了一下官方程序作为测试用,并没有深入研究USB。

那朋友你那有没有批量传输的例程啊?

出0入0汤圆

发表于 2013-11-6 15:13:16 | 显示全部楼层
kongan 发表于 2013-11-6 09:00
我只是修改了一下官方程序作为测试用,并没有深入研究USB。

哥们,你能告一下你的QQ嘛,我有一些测试的问题想咨询你,谢谢!主要最近做USB急的

出0入0汤圆

发表于 2013-11-6 19:01:21 | 显示全部楼层
asun1388 发表于 2013-10-25 16:40
试过了,能用。

哥们,你有研究过LZ的程序嘛?

出0入0汤圆

发表于 2013-11-6 20:22:27 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-11-13 15:45:22 | 显示全部楼层
kongan 发表于 2013-11-6 09:00
我只是修改了一下官方程序作为测试用,并没有深入研究USB。

当pc机向设备发数据的时候,怎么判断下位机到底接受的是什么数据啊?

出0入0汤圆

发表于 2013-11-14 17:55:40 | 显示全部楼层
楼主,小弟近期正在做 stm32 usbhid 通信,现在想发送两个ad数据,有些不会处理,可以指导一二吗?

出0入0汤圆

发表于 2013-11-17 17:24:15 | 显示全部楼层
这个先标记。

出0入0汤圆

发表于 2013-11-17 21:57:43 | 显示全部楼层
支持一下楼主

出0入0汤圆

发表于 2014-1-7 14:09:29 | 显示全部楼层
谢谢,很完美的代码!感谢!

出0入0汤圆

发表于 2014-1-10 09:12:34 | 显示全部楼层
顶,,,,,,,,

出0入0汤圆

发表于 2014-1-22 22:33:04 | 显示全部楼层
zhangyb 发表于 2012-9-20 09:38
就是PC能识别到输入设备,但WINDOWS显示设备不能启用!
找到原因了,还是输入端点的描述的问题!
我一直以为 ...

我也遇到同样问题,不知端点描述符哪里有问题?我直接复制的103的custom hid的描述符。

出0入0汤圆

发表于 2014-1-22 22:39:02 来自手机 | 显示全部楼层
F4 HID设备开发学习

出0入0汤圆

发表于 2014-1-22 22:39:12 | 显示全部楼层
我的win7只能识别出HID-compliant mouse,无法启动设备。不知楼主是xp还是win7?我自己修改f4discovery的demostration也出现上述现象,xp上也如此,不知何故?

出0入0汤圆

发表于 2014-1-23 16:08:01 | 显示全部楼层
谢谢楼主分享,正在使用407U盘功能!

出0入0汤圆

发表于 2014-1-24 08:44:26 | 显示全部楼层
学习学习!。

出0入0汤圆

发表于 2014-1-25 20:12:00 | 显示全部楼层
boyz2 发表于 2014-1-22 22:33
我也遇到同样问题,不知端点描述符哪里有问题?我直接复制的103的custom hid的描述符。 ...

问题已解决,改个PID就OK了,调试了好久啊。。。

出0入0汤圆

发表于 2014-3-7 09:24:02 | 显示全部楼层
本帖最后由 xuexueaibeibei 于 2014-3-7 09:25 编辑

你好,我现在已经枚举完,就剩下数据的处理了~可以教一下那个decode函数怎么写么?
static void  Handle_Decode(uint8_t *data)
{

        uint8_t i=0;
        for(i = 0; i < 64; i++)
        {
                printf("data:%d\n",*(data+i));
                delay();
        }


  HID_Handle_Data.report            = data[0];       //报告ID 0x02固定不变,艾伯德系列
  HID_Handle_Data.no_1_state   = data[1];                 //第一点状态,按下/弹起:07/04或者03/02

  HID_Handle_Data.no_1_ID      = data[2];                //第一点ID
  
  USR_Handle_ProcessData(&HID_Handle_Data);

}
就是这种形式吧~

出0入0汤圆

发表于 2014-3-25 09:06:51 | 显示全部楼层
项目中正用到,mark

出0入0汤圆

发表于 2014-4-3 17:55:10 | 显示全部楼层
cctsao1008 发表于 2012-9-19 01:28
找到問題的根本原因了!!!!

請注意!!!!!!!!! STM32F4 discovery 的 HSE 是 25Mhz!!!!

谢谢   

出0入0汤圆

发表于 2014-5-29 02:48:01 | 显示全部楼层
mark.......

出0入0汤圆

发表于 2014-6-4 11:38:19 | 显示全部楼层
好东西~~~支持

出0入0汤圆

发表于 2014-6-13 11:37:37 | 显示全部楼层
多谢分析,正在搞host模式,参考下

出0入0汤圆

发表于 2014-9-12 11:43:52 | 显示全部楼层
很好的程序。。。。。顶一个

出0入0汤圆

发表于 2014-9-25 17:25:32 | 显示全部楼层
问一下,LZ的USB HID 速度怎么样

出0入0汤圆

发表于 2014-10-28 10:32:42 | 显示全部楼层
楼主,请教一个问题,在你的程序中
  1.         while (1)
  2.         {
  3.                 DCD_EP_PrepareRx(&USB_OTG_dev,HID_OUT_EP,buf,64);
  4.                 if(UsbHidReceiveComplete)                     
  5.                 {
  6.                         printf("receive %s",buf);
  7.                         UsbHidReceiveComplete=0;
  8.                         USBD_HID_SendReport (&USB_OTG_dev, buf, 64);
  9.                 }
  10.                 DelayMs(500);
  11.                 LED_Toggle(LED1);
  12.         }
复制代码

如何不在while(1)循环调用DCD_EP_PrepareRx(&USB_OTG_dev,HID_OUT_EP,buf,64);来接收数据?
有在中断中直接使用的方法吗?

出0入0汤圆

发表于 2014-10-28 10:52:05 | 显示全部楼层
不错的东西,支持

出0入0汤圆

发表于 2014-11-4 10:09:02 | 显示全部楼层
zhangyb 发表于 2012-9-20 09:38
就是PC能识别到输入设备,但WINDOWS显示设备不能启用!
找到原因了,还是输入端点的描述的问题!
我一直以为 ...

你好,我现在也出现这个问题,设备管理器可以设备到HID设备,但是PC软件检测不到。
麻烦能不能告知你说的“端点描述”这部分在哪里?谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 05:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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