AVR-USB(V-USB)学习过程(一)

    从10月26号到11月24号,接触AVR差不多1个月了,学习V-USB(AVR-USB)整整花了我4天时间,从下位机程序到上位机程序,遇到了无数的困难,浏览了N多的外国论坛,现在把我对V-USB的理解写出来给后来者提供一些参考。

    V-USB是用软件模拟USB通讯,需要一个下位机驱动vusb和一个上位机驱动libusbdotnet(供.net编程环境调用的库文件,其他的编程环境可以用libusb-win32)。

    下位机需要一个底层vusb的驱动(都是老外写的),介绍地址下载地址 。在写下位机程序之前,最好看一下AVR软件模拟USB的介绍

    在你看完介绍之后,需要先根据原理图(vusb下载包里的circuit目录下)焊接一个简单电路。

 

然后下载vusb的驱动,把驱动(usbdrv文件夹)发到你的GCC项目文件夹中,并把usbdrv文件夹中的usbconfig-prototype.h拷贝到上一级目录-GCC项目文件夹,并重命名为usbconfig.h,在对里面的宏定义做一些必要的修改。

其他设置使用默认即可,当然你可以修改PID(VendorID)和VIP(DeviceID)以及ProductName(Vendor Name)和CompanyName (Device Name)。

   这时请在你的主程序main.c中include必要的头文件,下面是必须要包含的头文件。

    然后在主循环中加入usb轮询函数usbPoll(),用来侦测usb事件 。在主程序中定义个usbFunctionSetup()函数,这个函数就是usb事件处理函数usbPoll()侦测到上位机有usb通讯请求时,usbdrv就会调用这个usbFunctionSetup()函数来处理请求。

    现在你就可以试试编译程序了(当然是在你准备了makefile并编辑好之后),也许你会得到一个错误(undefined reference to 'usbCrc16Append'),而无法编译通过。这个错误折腾我很久,这里直接告诉大家解决办法。在Makefile里面修改

ASRC = usbdrv/usbdrvasm.S

解释一下:usbCrcAppend()函数是在usbdrvasm.S里面用汇编定义的一个函数,我们当然需要把这个汇编文件加入我们的项目啦。

Makefile里面的Src为C源程序,ASRC为汇编的源程序。(千万不要试图#include usbdrv/usbdrvasm.S)

   好了,现在再编译一下,会提示一切OK,把你的.hex文件烧入到你的avr芯片中,上电,通过usb线连接电脑,如果你的电路没有问题,电脑会提示找到新硬件,提示安装驱动。此时浏览到你预先准备好的驱动,然后安装即可,安装完成之后,在你的设备管理器里面就可以看到你的v-usb的设备的。如果你没有usb驱动,这里有一个模板,你下载后修改里面的.ini文件皆可。(主要是修改pid,vid,device Name,company name)

   至此,下位机的程序准备基本完成,当然还没有写和上位机通信的模块。

   先把所有程序传上来,包括上位机(C#)和下位机(GCC). 点击下载

   下一篇:上位机C#详解

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
v-usb 是一个开源的 USB 软件库,可以用于在 AVR 微控制器上实现 USB 设备功能。下面是一个简单的 v-usb 编译成功的案例: 1. 安装 AVR 工具链:你需要安装 AVR 工具链来编译和烧录代码。你可以从官方网站下载并安装 AVR 工具链。 2. 下载 v-usb 库:你可以从 v-usb 的官方网站或 GitHub 上下载最新的 v-usb 库。 3. 创建一个新的项目文件夹:在你的工作目录中创建一个新的文件夹,用于存放你的 v-usb 项目。 4. 复制 v-usb 文件到项目文件夹:将下载的 v-usb 文件夹中的所有文件复制到你创建的项目文件夹中。 5. 创建你的 USB 设备代码:在项目文件夹中创建一个新的 C 文件,用于编写你的 USB 设备代码。你可以参考 v-usb 提供的示例代码来编写你自己的代码。 6. 编写 Makefile:在项目文件夹中创建一个名为 Makefile 的文件,用于配置编译选项和规则。以下是一个简单的示例 Makefile: ```makefile MCU = atmega328p F_CPU = 16000000 TARGET = main CC = avr-gcc OBJCOPY = avr-objcopy AVRDUDE = avrdude CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os all: $(TARGET).hex $(TARGET).hex: $(TARGET).elf $(OBJCOPY) -O ihex -R .eeprom $< $@ $(TARGET).elf: $(TARGET).c usbdrv.c usbdrvasm.S $(CC) $(CFLAGS) -o $@ $^ program: $(TARGET).hex $(AVRDUDE) -p $(MCU) -c usbasp -U flash:w:$(TARGET).hex clean: rm -f $(TARGET).hex $(TARGET).elf .PHONY: all program clean ``` 在 Makefile 中,你需要根据你的项目修改 MCU、F_CPU 和 TARGET 变量,以及 avrdude 命令的参数。 7. 编译和烧录代码:打开终端,进入到你的项目文件夹,并执行以下命令: ``` make all make program ``` 这将编译你的代码,并使用 usbasp 烧录器将程序烧录到 AVR 微控制器中。 这只是一个简单的 v-usb 编译成功的案例,你可以根据你的需求和硬件平台进行更复杂的开发。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值