机器人小组资料 AVR 软件USB使用方法简述 作者:haihuawu 略有 ....DOCVIP

机器人小组资料 AVR 软件USB使用方法简述 作者:haihuawu 略有 ....DOC

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
机器人小组资料 AVR 软件USB使用方法简述 作者:haihuawu 略有 ...

AVR 软件USBAVRUSB技术探讨》作者:邵子扬、王育强、吕益光 《AVR309: Software Universal Serial Bus (USB)》作者:ATMEL 本文所述并不完整,仅入门用 AVR单片机可以直接以IO口模拟USB端口,与电脑通讯。构成一个低成本的USB设备,不过有如下局限性: 1.只能模拟低速设备,带宽为1.5Mb/S。事实上通讯速度只有大概20KB/s。 2.USB通讯部分占用了单片机约90%的CPU资源。 虽然如此,但对一些小设备来说,用AVR单片机来实现USB通讯还是很有吸引力的,下面简单说一下使用方法。 首先说一下本文所使用的软件和编译环境。 计算机方面所用的是VC++ 6.0,单片机所使用的是GCC。考虑到大家所用的编译环境可能不同,本文所用的代码全部符合ANSI C标准。 AVR单片机与电脑之间主要采用控制传输通讯,有关控制传输的具体内容请参看《usb-in-a-nutshell》。 一:硬件电路 现在来看一下avr单片机作usb设备的硬件电路。USB共有四根线,两根5v电源,两根差分信号线D+、D-。由于是低速设备,D-必须要有1.5K的上拉电阻。对于3.3v供电的单片机,只要把D+和D-之间连在单片机的同一组IO上就可以了,同时还要把D-连在外中断INT0上。 对于5V供电的单片机,则需要有电平转化,最简单有效的是用3.6V稳压管。有关USB的具体内容,可以查看参考资料中的《usb-in-a-nutshell》。#includeavr\interrupt.h //要使用中断,这个文件当然是必须的 #include usbdrv\usbdrv.h // usb驱动接口文件的头文件 #include usbdrv\usbdrv.c // usb驱动接口文件 然后是把“usbdrvasm.S”这个文件添加到你的工程里。这是一个用汇编编写的函数文件,添加起来比较困难,我是在makefile文件中加了:ASRC =usbdrv/usbdrvasm.S这样一句来实现的。 最后一步是修改配置文件,在USBDRV文件夹中一般都有一个usbconfig-prototype.h文件,这个文件是用户配置文件usbconfig.h的原始模板,我们需要将这个文件改名为usbconfig.h。 usbconfig.h中的主要参数 USB_CFG_IOPORTNAME 定义USB数据线使用的端口。只要是通用的IO都可以,没有特殊的要求。 USB_CFG_DMINUS_BIT USB数据线D-使用的引脚。 USB_CFG_DPLUS_BIT USB数据线D+使用的引脚。因为D+要求同时连接到INT0上,所以一般情况下需要使用3个IO口。如果D+使用的引脚就是INT0,那么可以少使用一个IO端口。 USB_CFG_VENDOR_ID 设备生产商的ID号 USB_CFG_DEVICE_ID 设备的产品ID号。这两个参数就是Windows识别USB设备的主要参数。需要注意的是,这两个参数都是低字节在前,高字节在后。 USB_CFG_DEVICE_VERSION 设备的版本号次版本号在前,主版本号在后。在Windows的设备管理中可以看到这个版本号 USB_CFG_VENDOR_NAME 设备生产商的名称,它在Windows的设备管理中可以看到。这里一般写入的是网址。 USB_CFG_VENDOR_NAME_LEN 设备生产商名称的长度。 USB_CFG_DEVICE_NAME 设备的名称,它在Windows的设备管理中可以看到。设备名称和生产商的名称都是以字符的方式定义的,它们目前不支持中文。 USB_CFG_DEVICE_NAME_LEN 设备名称的长度。 ? VID PID 控制类 0x16C0 0x05DC CDC类 0x16C0 0x05DF HID类 0x16C0 0x05E1 int main(void) { //这里可以初始化一些用户函数 usbInit(); //初始化USB函数 sei(); //允许中断 while(1) { usbPoll(); //这个必须在主循环内,而且被调用的时间间隔不能大于//50ms //其它用户函数 } } usbMsgLen_t usbFunctionSetup(uchar data[8]) { //这里处理USB请求 } 下面介绍一下另一个接口函数 usbMsgLen_t usbFunctionSetup(uchar data[8])的用法。 当单片机收到电脑发来的请求时,如果不是总线默认的请求类型,就会调用这个函数。单片机所收到的请求参数会放在一个8字节的数

文档评论(0)

170****0571 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档