如何利用stm32cubemx usb hid的usb实现通信

基于USB OTG实现STM32与手机间的通信--《工业控制计算机》2016年10期
基于USB OTG实现STM32与手机间的通信
【摘要】:提出一种以手机来控制STM32的控制系统,该设计通过USB OTG使手机为主机代替触摸屏的功能控制STM32从机,实现了对下面采集器,控制器等的配置,并接受STM32返回的数据。
【作者单位】:
【分类号】:TP273;TN929.53
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【相似文献】
中国期刊全文数据库
周桔蓉;孙旭日;;[J];自动化应用;2013年11期
张逢雪;王香婷;王通生;徐广瑞;;[J];自动化技术与应用;2011年08期
武玉婷;张娜;;[J];单片机与嵌入式系统应用;2011年07期
刘威龙;孙明磊;王頔;王启伟;;[J];数字技术与应用;2012年03期
陈致远;朱叶承;周卓泉;祝磊;;[J];电子技术应用;2012年09期
李世光;杨晓雷;;[J];Journal of Measurement Science and I2014年02期
韩晓英;张方樱;朱静;;[J];硅谷;2013年12期
朱贵国;汪党;;[J];数字技术与应用;2013年05期
张旭;亓学广;李世光;芮昱;邱彪;;[J];电子测量技术;2010年11期
胡光武;赵胜;任庆朋;刘春晖;高志伟;;[J];自动化应用;2014年07期
中国重要会议论文全文数据库
吕远;张喜平;张荣奎;;[A];2012中国消防协会科学技术年会论文集(上)[C];2012年
肖亚锋;王金海;;[A];天津市生物医学工程学会第三十三届学术年会论文集[C];2013年
宋建成;刘国瑞;付峻青;宋玉峰;樊志坚;黄保柱;;[A];煤矿自动化与信息化——第20届全国煤矿自动化与信息化学术会议暨第2届中国煤矿信息化与自动化高层论坛论文集[C];2010年
王铁流;伍毅;;[A];全国第4届信号和智能信息处理与应用学术会议论文集[C];2010年
马骁;郭书军;刘洋;;[A];第十七届全国青年通信学术年会论文集[C];2012年
中国硕士学位论文全文数据库
田秀;[D];天津理工大学;2015年
郭力;[D];西安工程大学;2015年
杨晓艳;[D];成都理工大学;2015年
江巧;[D];杭州电子科技大学;2015年
王锦;[D];西安工程大学;2015年
方帆;[D];广西师范大学;2015年
刘嘉奇;[D];辽宁科技大学;2015年
贾卫东;[D];辽宁科技大学;2015年
朱亚晨;[D];南京信息工程大学;2016年
马敏;[D];中国地质大学(北京);2016年
&快捷付款方式
&订购知网充值卡
400-819-9993关于STM32 USB作为从机设备时管脚连 接以及通讯的简易验证方法 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
关于STM32 USB作为从机设备时管脚连 接以及通讯的简易验证方法
16:01:49  
前言USB作为从机设备时,管脚连接以及通讯的验证方法其实就是下载一段简单USB程序,在不需要任何驱动的前提下实现简单的USB通讯。通过这个简单程序的运行情况来判断USB管脚和通讯是否正常。
问题分析USB作为从机设备时,其硬件验证相对简单。当硬件工程师怀疑自己的硬件有问题时,就自己写一个简单的测试程序。但这对一般的硬件工程师来说还是有一定难度的。通过STM32CubeMX这个工具,这个过程就变的非常简单了。方法如下:
1/在STM32CubeMX中选择您需要使用的开发板,我们以STM32F401C-Discovery板子为例(在选择板子的时候,是不需要需改时钟配置+管脚配置的,所以流程更加简单)
注意:如果你选择的不是开发板,而是自己做的板子请参考如下简易配置流程:1.选STM32Fxxx2.在PinOut项中配置RCC的HSE外部时钟开启(这个是必须的,除了STM32F0x2系列MCU)&&3.开启USB_OTG_HS/USB_OTG_FS/USB中的InternalFS PHY为Device Only4.设置Middleware 中的USB_Device为HumanInterface device5.配置时钟的输入为‘x’M(默认是25M,这里的‘x’是需要与实际连接晶体频率相等),设置系统时钟为72M(建议使用时钟自动分配功能,际具体数据需要根据实际所选芯片的时钟范围来设置)6.直接生成代码运行即可
2/在Pinout中选择USBOTG FS选项中的Device Only选项。
之后在Middleware中选择USBDevice选项中的Human Interface deviceclass3/直接生成工程,并编译下载到STM32F401C-Discovery板子上就可以验证了。如果可以看到HID的设备,那么就是USB部分的硬件联系没有什么问题了.总结:该工程只是完成了一个USBHID类的枚举工作,不需要工程师添加任何代码,其作用就是为了验证USB作为从机设备时的硬件管脚连接以及通讯是否有问题。且一般windows都是支持HID这个基本类,故此方法有广泛的实用意义。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
高级工程师
16:48:13  
工程师职场
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司&>&PC端连接USB设备通信案例(STM32实现USB设备)
PC端连接USB设备通信案例(STM32实现USB设备)
上传大小:33.05MB
实现PC端与USB设备之间的简单通信,可以帮助理解USB通信,PC端程序主要是驱动编写,USB设备通过STM32f103ZET6实现。
综合评分:3(3位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有3条
很不错,谢谢哈
很不错,谢谢哈
啃爹,下下来只有3.7KB
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
PC端连接USB设备通信案例(STM32实现USB设备)
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
PC端连接USB设备通信案例(STM32实现USB设备)想实现USB复合设备,使用STM32Cube.求助 - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 2546|回复: 12
想实现USB复合设备,使用STM32Cube.求助
在线时间27 小时
该用户从未签到主题帖子好友
中级会员, 积分 484, 距离下一级还需 16 积分
中级会员, 积分 484, 距离下一级还需 16 积分
想实现复合设备,使用STM32Cube,主芯片是STM32F072,需要实现的是键盘鼠标一体化设备,就是插在电脑上识别出键盘和鼠标.
首先我的Cube库的版本是这样的.
微信截图_43.png (57.14 KB, 下载次数: 0)
14:25 上传
我先生成了个HID普通设备.
微信截图_15.png (58.16 KB, 下载次数: 0)
14:26 上传
把接口数改成2.
微信截图_29.png (57.54 KB, 下载次数: 1)
14:27 上传
然后分别做了HID_MOUSE_ReportDesc和HID_KEYBOARD_ReportDesc.但是SETUP过程只让汇报了HID_MOUSE,如何让他们区分汇报呢?
微信截图_39.png (46.04 KB, 下载次数: 0)
14:29 上传
改完这两个还有多少步骤?EP的配置应该还好解决.
在线时间660 小时
该用户从未签到主题帖子好友
可以实现的,,,
(21.38 KB, 下载次数: 12)
15:05 上传
在线时间10 小时
该用户从未签到主题帖子好友
初级会员, 积分 158, 距离下一级还需 42 积分
初级会员, 积分 158, 距离下一级还需 42 积分
复合设备还是一个设备,获取描述符还是设备的描述符,主要是多接口和多端点
这是一个复合设备的描述符,对比看一下
这个用了81 82两个端点 分别是键盘与鼠标
你的程序得多打开个端点,还要对其进行配置,并进行数据传输
& && &&&------------------ Device Descriptor ------------------
bLength& && && && && && &: 0x12 (18 bytes)
bDescriptorType& && && & : 0x01 (Device Descriptor)
bcdUSB& && && && && && & : 0x200 (USB Version 2.00)
bDeviceClass& && && && & : 0x00 (defined by the interface descriptors)
bDeviceSubClass& && && & : 0x00
bDeviceProtocol& && && & : 0x00
bMaxPacketSize0& && && & : 0x08 (8 bytes)
idVendor& && && && && &&&: 0x046D (Logitech Inc.)
idProduct& && && && && & : 0xC52E
bcdDevice& && && && && & : 0x2300
iManufacturer& && && && &: 0x01 (String Descriptor 1)
Language 0x0409& && && &: &Logitech&
iProduct& && && && && &&&: 0x02 (String Descriptor 2)
Language 0x0409& && && &: &USB Receiver&
iSerialNumber& && && && &: 0x00 (No String Descriptor)
bNumConfigurations& && & : 0x01
& && &&&------------------ String Descriptors -----------------
& && && && & ------ String Descriptor 0 ------
bLength& && && && && && &: 0x04 (4 bytes)
bDescriptorType& && && & : 0x03 (String Descriptor)
Language ID[0]& && && &&&: 0x0409 (English - United States)
& && && && & ------ String Descriptor 1 ------
bLength& && && && && && &: 0x12 (18 bytes)
bDescriptorType& && && & : 0x03 (String Descriptor)
Language 0x0409& && && & : &Logitech&
& && && && & ------ String Descriptor 2 ------
bLength& && && && && && &: 0x1A (26 bytes)
bDescriptorType& && && & : 0x03 (String Descriptor)
Language 0x0409& && && & : &USB Receiver&
& && && && & ------ String Descriptor 4 ------
bLength& && && && && && &: 0x1E (30 bytes)
bDescriptorType& && && & : 0x03 (String Descriptor)
Language 0x0409& && && & : &RQR23.00_B0005&
& && &---------------- Configuration Descriptor -----------------
bLength& && && && && && &: 0x09 (9 bytes)
bDescriptorType& && && & : 0x02 (Configuration Descriptor)
wTotalLength& && && && & : 0x003B (59 bytes)
bNumInterfaces& && && &&&: 0x02
bConfigurationValue& && &: 0x01
iConfiguration& && && &&&: 0x04 (String Descriptor 4)
Language 0x0409& && && &: &RQR23.00_B0005&
bmAttributes& && && && & : 0xA0
D7: Reserved, set 1& &&&: 0x01
D6: Self Powered& && &&&: 0x00 (no)
D5: Remote Wakeup& && & : 0x01 (yes)
D4..0: Reserved, set 0&&: 0x00
MaxPower& && && && && &&&: 0x31 (98 mA)
& && &&&---------------- Interface Descriptor -----------------
bLength& && && && && && &: 0x09 (9 bytes)
bDescriptorType& && && & : 0x04 (Interface Descriptor)
bInterfaceNumber& && && &: 0x00
bAlternateSetting& && &&&: 0x00
bNumEndpoints& && && && &: 0x01 (1 Endpoint)
bInterfaceClass& && && & : 0x03 (HID - Human Interface Device)
bInterfaceSubClass& && & : 0x01 (Boot Interface)
bInterfaceProtocol& && & : 0x01 (Keyboard)
iInterface& && && && && &: 0x00 (No String Descriptor)
& && &&&------------------- HID Descriptor --------------------
bLength& && && && && && &: 0x09 (9 bytes)
bDescriptorType& && && & : 0x21 (HID Descriptor)
bcdHID& && && && && && & : 0x0111 (HID Version 1.11)
bCountryCode& && && && & : 0x00 (00 = not localized)
bNumDescriptors& && && & : 0x01
Descriptor 1:
bDescriptorType& && && & : 0x22 (Class=Report)
wDescriptorLength& && &&&: 0x003B (59 bytes)
Error reading descriptor : ERROR_GEN_FAILURE
& && &&&----------------- Endpoint Descriptor -----------------
bLength& && && && && && &: 0x07 (7 bytes)
bDescriptorType& && && & : 0x05 (Endpoint Descriptor)
bEndpointAddress& && && &: 0x81 (Direction=IN&&EndpointID=1)
bmAttributes& && && && & : 0x03 (TransferType=Interrupt)
wMaxPacketSize& && && &&&: 0x0008 (8 bytes) (8 bytes)
bInterval& && && && && & : 0x08 (8 ms)
& && &&&---------------- Interface Descriptor -----------------
bLength& && && && && && &: 0x09 (9 bytes)
bDescriptorType& && && & : 0x04 (Interface Descriptor)
bInterfaceNumber& && && &: 0x01
bAlternateSetting& && &&&: 0x00
bNumEndpoints& && && && &: 0x01 (1 Endpoint)
bInterfaceClass& && && & : 0x03 (HID - Human Interface Device)
bInterfaceSubClass& && & : 0x01 (Boot Interface)
bInterfaceProtocol& && & : 0x02 (Mouse)
iInterface& && && && && &: 0x00 (No String Descriptor)
& && &&&------------------- HID Descriptor --------------------
bLength& && && && && && &: 0x09 (9 bytes)
bDescriptorType& && && & : 0x21 (HID Descriptor)
bcdHID& && && && && && & : 0x0111 (HID Version 1.11)
bCountryCode& && && && & : 0x00 (00 = not localized)
bNumDescriptors& && && & : 0x01
Descriptor 1:
bDescriptorType& && && & : 0x22 (Class=Report)
wDescriptorLength& && &&&: 0x00B1 (177 bytes)
Error reading descriptor : ERROR_GEN_FAILURE
& && &&&----------------- Endpoint Descriptor -----------------
bLength& && && && && && &: 0x07 (7 bytes)
bDescriptorType& && && & : 0x05 (Endpoint Descriptor)
bEndpointAddress& && && &: 0x82 (Direction=IN&&EndpointID=2)
bmAttributes& && && && & : 0x03 (TransferType=Interrupt)
wMaxPacketSize& && && &&&: 0x0014 (20 bytes) (20 bytes)
bInterval& && && && && & : 0x02 (2 ms)
在线时间40 小时
ST金币1283
该用户从未签到主题帖子好友
高级会员, 积分 578, 距离下一级还需 422 积分
高级会员, 积分 578, 距离下一级还需 422 积分
wvalue判断完了,具体的设备需要判断一下windex
两个设备的是不一样的。
在线时间27 小时
该用户从未签到主题帖子好友
中级会员, 积分 484, 距离下一级还需 16 积分
中级会员, 积分 484, 距离下一级还需 16 积分
wvalue判断完了,具体的设备需要判断一下windex
两个设备的是不一样的。
是不一样,但是差距很大,也不知道实际上判断哪一位
在线时间27 小时
该用户从未签到主题帖子好友
中级会员, 积分 484, 距离下一级还需 16 积分
中级会员, 积分 484, 距离下一级还需 16 积分
复合设备还是一个设备,获取描述符还是设备的描述符,主要是多接口和多端点
这是一个复合设备的描述符,对 ...
我现在是不知道怎么增加返回,我知道要开端点,8个双向端点除了EP0还有7个,完全够用啊
在线时间24 小时
该用户从未签到主题帖子好友
中级会员, 积分 372, 距离下一级还需 128 积分
中级会员, 积分 372, 距离下一级还需 128 积分
我是来赚积分的。
在线时间234 小时
ST金币1817
该用户从未签到主题帖子好友
金牌会员, 积分 3862, 距离下一级还需 1138 积分
金牌会员, 积分 3862, 距离下一级还需 1138 积分
我也是来赚积分的,帮顶
在线时间10 小时
该用户从未签到主题帖子好友
初级会员, 积分 158, 距离下一级还需 42 积分
初级会员, 积分 158, 距离下一级还需 42 积分
我现在是不知道怎么增加返回,我知道要开端点,8个双向端点除了EP0还有7个,完全够用啊 ...
但是你得把端点打开啊,还要配置缓冲
具体键盘的读写我没做过,但是中断型in端点的读到是要把数据放到缓冲,并置成valid,主机会自动读取,被读走了会有端点通知,你该装备下一次的数据
在线时间40 小时
ST金币1283
该用户从未签到主题帖子好友
高级会员, 积分 578, 距离下一级还需 422 积分
高级会员, 积分 578, 距离下一级还需 422 积分
if(wvalue)
if(windex == 0){}
else if(windex == 1){}
大体这个意思。
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅲ
狂欢节专属(分享宝宝)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /2
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
授人以渔 第五节:基于stm32f4实现usb自定义大数据传输
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
这一节,准备基于usb_cdc 例程修改成自定义的大数据传输,我只是抛砖引玉,如果说的有什么不对的地方还请大家指教。在很多时候通用的usb协议是不能满足我们的使用的,比如我们要传我们自定义的数据和上位机通信(bootloader等),很多人可能会说可以用cdc虚拟串口啊还是现成的,但是这样就面临3个问题1.虚拟串口的速度根本达不到usb的最大速度,2.就是它的上位机驱动是st公司自己的,在成功驱动后显示的是st的名字,这对于很多公司来说是不可接受的。3.就是你不能按照自己的格式发送,只能按照它的要求发送数据。不废话直接上代码:1.& && &用stm32cubemx生成1个usb_cdc 例程,这里就不贴教程了,应该很简单。2.& && &修改usbd_desc.c中的报告描述符,原因在与在上位机获取设备描述符时,不让上位机讲我们的设备识别成任何一种设备。将:bDeviceClass,bDeviceSubClass,bDeviceProtocol,全部改成0x00/* USB Standard Device Descriptor */__ALIGN_BEGIN uint8_tUSBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =&&{& &0x12,& && && && && && && & /*bLength */& &USB_DESC_TYPE_DEVICE,& && &/*bDescriptorType*/& &0x00,& && && && && && && &&&/*bcdUSB */& &0x00,& & & &0x00,& && && && && && && &&&/*bDeviceClass*/& &0x00,& && && && && && && & /*bDeviceSubClass*/& &0x00,& && && && && && && & /*bDeviceProtocol*/& &USB_MAX_EP0_SIZE,& && && &/*bMaxPacketSize*/& &LOBYTE(USBD_VID),& && && & /*idVendor*/& &HIBYTE(USBD_VID),& && && & /*idVendor*/& &LOBYTE(USBD_PID_FS),& && && & /*idVendor*/& &HIBYTE(USBD_PID_FS),& && && & /*idVendor*/& &0x00,& && && && && && && & /*bcdDevice rel. 2.00*/& &0x02,& &USBD_IDX_MFC_STR,& && && & /*Index of manufacturer&&string*/& &USBD_IDX_PRODUCT_STR,& && &/*Index of product string*/& &USBD_IDX_SERIAL_STR,& && & /*Index of serial number string*/& &USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/&&} ; 3.& && &修改报告描述符将接口描述数量改成1个,因为cdc通信默认使用两个接口/*Configuration Descriptor*/ 0x09,& &/* bLength: ConfigurationDescriptor size */ USB_DESC_TYPE_CONFIGURATION,& &&&/* bDescriptorType: Configuration */ USB_CDC_CONFIG_DESC_SIZ,& && && && && &/* wTotalLength:no of returned bytes */ 0x00,&&0x01,// 0x02,& &/* bNumInterfaces: 2interface */ 0x01,& &/* bConfigurationValue:Configuration value */ 0x00,& &/* iConfiguration: Indexof string descriptor describing the configuration */ 0xC0,& &/* bmAttributes: selfpowered */ 0x32,& &/* MaxPower 0 mA *//*********************************************************/然后修改接口描述符,修改接口类,接口子类等,注释掉Header Functional Descriptor,Call ManagementFunctional Descriptor,ACM Functional Descriptor,Union FunctionalDescriptor修改端点描述符整个配置描述符为: /* USB CDC deviceConfiguration Descriptor */__ALIGN_BEGINuint8_t USBD_CDC_CfgHSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END ={&&/*Configuration Descriptor*/&&0x09,&&/* bLength: Configuration Descriptor size */&&USB_DESC_TYPE_CONFIGURATION,& && &/* bDescriptorType: Configuration */&&USB_CDC_CONFIG_DESC_SIZ,& && && && && & /* wTotalLength:no of returnedbytes */&&0x00,&&0x01,// 0x02,& &/* bNumInterfaces: 2interface */&&0x01,&&/* bConfigurationValue: Configuration value */&&0x00,&&/* iConfiguration: Index of string descriptor describing theconfiguration */&&0xC0,&&/* bmAttributes: self powered */&&0x32,&&/* MaxPower 0 mA */&& /*---------------------------------------------------------------------------*/&&&&/*Interface Descriptor */&&0x09,&&/* bLength: Interface Descriptor size */&&USB_DESC_TYPE_INTERFACE,&&/* bDescriptorType: Interface */&&/*Interface descriptor type */&&0x00,&&/* bInterfaceNumber: Number of Interface */&&0x00,&&/* bAlternateSetting: Alternate setting */&&0x02,//0x01,&&/* bNumEndpoints: One endpoints used */&&&&0xDC,//0x02,&&/* bInterfaceClass: Communication Interface Class */&&0xA0,//0x02,&&/* bInterfaceSubClass: Abstract Control Model */&&0xB0,//0x01,&&/* bInterfaceProtocol: Common AT commands */&&0x00,&&/* iInterface: */&&//&&/*Header Functional Descriptor*///&&0x05,&&/* bLength: Endpoint Descriptor size *///&&0x24,&&/* bDescriptorType: CS_INTERFACE *///&&0x00,&&/* bDescriptorSubtype: Header Func Desc *///&&0x10,&&/* bcdCDC: spec release number *///&&0x01,//&&//&&/*Call Management Functional Descriptor*///&&0x05,&&/* bFunctionLength *///&&0x24,&&/* bDescriptorType: CS_INTERFACE *///&&0x01,&&/* bDescriptorSubtype: Call Management Func Desc *///&&0x00,&&/* bmCapabilities: D0+D1 *///&&0x01,&&/* bDataInterface: 1 *///&&//&&/*ACM Functional Descriptor*///&&0x04,&&/* bFunctionLength *///&&0x24,&&/* bDescriptorType: CS_INTERFACE *///&&0x02,&&/* bDescriptorSubtype: Abstract Control Management desc *///&&0x02,&&/* bmCapabilities *///&&//&&/*Union Functional Descriptor*///&&0x05,&&/* bFunctionLength *///&&0x24,&&/* bDescriptorType: CS_INTERFACE *///&&0x06,&&/* bDescriptorSubtype: Union func desc *///&&0x00,&&/* bMasterInterface: Communication class interface *///&&0x01,&&/* bSlaveInterface0: Data Class Interface *///&&//&&/*Endpoint 2 Descriptor*///&&0x07,& && && && && && && && && &/* bLength: EndpointDescriptor size *///&&USB_DESC_TYPE_ENDPOINT,& &/* bDescriptorType: Endpoint *///&&CDC_CMD_EP,& && && && && && && &/* bEndpointAddress *///&&0x03,& && && && && && && && && &/* bmAttributes: Interrupt *///&&LOBYTE(CDC_CMD_PACKET_SIZE),& &&&/* wMaxPacketSize: *///&&HIBYTE(CDC_CMD_PACKET_SIZE),//&&0x10,& && && && && && && && && &/* bInterval: */
/*---------------------------------------------------------------------------*/&&//&&/*Data class interface descriptor*///&&0x09,&&/* bLength: Endpoint Descriptor size *///&&USB_DESC_TYPE_INTERFACE,&&/* bDescriptorType: *///&&0x01,&&/* bInterfaceNumber: Number of Interface *///&&0x00,&&/* bAlternateSetting: Alternate setting *///&&0x02,&&/* bNumEndpoints: Two endpoints used *///&&0x0A,&&/* bInterfaceClass: CDC *///&&0x00,&&/* bInterfaceSubClass: *///&&0x00,&&/* bInterfaceProtocol: *///&&0x00,&&/* iInterface: */&&&&/*Endpoint OUT Descriptor*/&&0x07,&&/* bLength: Endpoint Descriptor size */&&USB_DESC_TYPE_ENDPOINT,& && &/* bDescriptorType: Endpoint */&&CDC_OUT_EP,& && && && && && && && &/* bEndpointAddress */&&0x02,& && && && && && && && && && &/* bmAttributes:Bulk */&&LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),&&/* wMaxPacketSize: */&&HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),&&0x00,& && && && && && && && && && &/* bInterval:ignore for Bulk transfer */&&&&/*Endpoint IN Descriptor*/&&0x07,&&/* bLength: Endpoint Descriptor size */&&USB_DESC_TYPE_ENDPOINT,& && &/* bDescriptorType: Endpoint */&&CDC_IN_EP,& && && && && && && && & /* bEndpointAddress */&&0x02,& && && && && && && && && && &/* bmAttributes:Bulk */&&LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),&&/* wMaxPacketSize: */&&HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),&&0x00& && && && && && && && && && & /* bInterval:ignore for Bulk transfer */} ;最好将下面的USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ]和uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] 也改了因为以备不时之需。4.& && &修改发送函数由于我们还是使用cdc的端点收发,所以不用重新初始化。我们只需要增加我们自己的bulk传输的收发函数就可以了 uint8_tBulkRxBuffer[512];uint8_t&&USBD_BULK_ReceivePacket(USBD_HandleTypeDef*pdev){& && &&&USBD_CDC_HandleTypeDef& &*hcdc = (USBD_CDC_HandleTypeDef*)pdev-&pClassD&&&&/* Suspend or Resume USB Out process */&&if(pdev-&pClassData != NULL)&&{& & if(pdev-&dev_speed == USBD_SPEED_HIGH&&) & & {& &&&& && &/* Prepare Out endpoint to receive nextpacket */& && &USBD_LL_PrepareReceive(pdev,& && && && && && && && && &&&CDC_OUT_EP,& && && && && && && && && &&&BulkRxBuffer,& && && && && && && && && &&&512);& & }& & else& & {& && &/* Prepare Out endpoint to receive nextpacket */& && &USBD_LL_PrepareReceive(pdev,& && && && && && && && && &&&CDC_OUT_EP,& && && && && && && && && &&&BulkRxBuffer,& && && && && && && && && &&&512);& & }& & return USBD_OK;&&}&&else&&{& & return USBD_FAIL;&&}}
uint8_tBulkTxBuffer[512];uint8_t&&USBD_BULK_TransmitPacket(USBD_HandleTypeDef*pdev){& && &&&USBD_CDC_HandleTypeDef& &*hcdc = (USBD_CDC_HandleTypeDef*)pdev-&pClassD&&&&if(pdev-&pClassData != NULL)&&{& & if(hcdc-&TxState == 0)& & {& && &/* Tx Transfer in progress */& && &hcdc-&TxState = 1;& && && && &/* Transmit next packet */& && &USBD_LL_Transmit(pdev,& && && && && && && &&&CDC_IN_EP,& && && && && && && &&&BulkTxBuffer,& && && && && && && &&&512);& && && && &return USBD_OK;& & }& & else& & {& && &return USBD_BUSY;& & }&&}&&else&&{& & return USBD_FAIL;&&}}已经就完成了自定义大数据传输的修改。调用以上两个函数就可以完成和pc机的通信。将我们的设备插到上位机上,使用libusb-win32 自动生成这个设备的驱动之后就能正常通信。是不是很简单。。。
谢谢分享;
高级技术员, 积分 893, 距离下一级还需 107 积分
高级技术员, 积分 893, 距离下一级还需 107 积分
高级技术员, 积分 893, 距离下一级还需 107 积分
高级技术员, 积分 893, 距离下一级还需 107 积分
不错,USB实在太复杂,只能用到哪儿看到哪儿。
高级工程师, 积分 7489, 距离下一级还需 511 积分
高级工程师, 积分 7489, 距离下一级还需 511 积分
高级工程师, 积分 7489, 距离下一级还需 511 积分
高级工程师, 积分 7489, 距离下一级还需 511 积分
USB开发还不是很懂。
高级工程师, 积分 7489, 距离下一级还需 511 积分
高级工程师, 积分 7489, 距离下一级还需 511 积分
高级工程师, 积分 7489, 距离下一级还需 511 积分
高级工程师, 积分 7489, 距离下一级还需 511 积分
这个上位机开发是固定的模式吗?
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
这个上位机开发是固定的模式吗?
对,导入libusb,调用函数就行了。
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
高级技术员, 积分 792, 距离下一级还需 208 积分
这个上位机开发是固定的模式吗?
对,导入libusb,调用函数就行了。
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
按照你接受介绍的方法&&对usb描述符进行配置& & :&&PC机驱动可以正常安装。& && && && && &&&但是下位机 每次只能发一次数据&&串口usb标志位显示一直busy ,关于收发函数这一块好像存在问题,怎么解决呢?lz给点意见&&
扫描二维码,随时随地手机跟帖
技术高手奖章
人才类勋章
时间类勋章
涓涓之细流
发帖类勋章
技术领袖奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章
时间类勋章
技术奇才奖章
人才类勋章
希望之星奖章
等级类勋章
技术新星奖章
人才类勋章
欢快之小溪
发帖类勋章
精华达人奖章
等级类勋章
时间类勋章
您需要登录后才可以回帖}

我要回帖

更多关于 stm32 usb uart cube 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信