打印

STM32F407的双向HID调试成功

[复制链接]
520|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一片混沌|  楼主 | 2018-7-11 21:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天在调STM32F407的通用HID通讯
看过http://www.openedv.com/posts/list/0/41991.htm#265954 的帖子;
增加了USBD_HID_DataOut 回调处理函数,测试不会调用,查了下代码,发现初始化函数&;USBD_Init 虽然将USBD_HID_cb和 USR_cb的回调关系建立了,但需要中间变量USBD_DCD_INT_fops的USBD_DataOutStage 调用,但Joystick例程中根本没处理 接收中断DCD_HandleOutEP_ISR 或USBD_OTG_EP1OUT_ISR_Handler;
所以简单增加的USBD_HID_DataOut 根本不会运行;
另外USBD_Init 中的DCD_Init(pdev , coreID);
DCD_Init里将;ep->xfer_buff0;数据缓存指针指到0地址了;这样HID的数据接收也就存到0地址去了。
这样 我们的中断处理USBD_OTG_ISR_Handler中
caseSTS_DATA_UPDT
(status.b.bcnt)
{USB_OTG_ReadPacket(pdev,ep->xfer_buff;status.b.bcnt)
ep->xfer_buff;+=&status.b.bcnt;
ep->xfer_count&+=status.b.bcnt;
}
break;
这肯定有内存访问问题;
解决方法如下:在;DCD_Init(pdev , coreID);后增加
ep = &pdev->dev.out_ep[1];        // add by hqp 2015-01-28
ep->xfer_buff = GUSBRxBuf;// add by hqp 2015-01-28GUSBRxBuf 是全局数组,空间不小于一包数据大小;

另外在OTG_FS_IRQHandler的最后
ep = &(USB_OTG_dev.dev.out_ep[1]);
;if(ep->xfer_count!=0)将;ep->xfer_buff中的接收数据取出 給应用处理。

至此双向HID收发调通。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

391

主题

391

帖子

0

粉丝