在libusb的bin目录下有一个inf_wirzedexe的文件,该文件是生成驱动所用,具体步骤可以网上百度,很是傻瓜式 *** 作,安装好驱动之后就可以使用其通讯函数了,
安装好驱动之后的情况如下

使用visual studio开发,将lib_msvc目录下的libusblib文件添加到工程目录并将lusb0_usbh文件加入工程,如下

之后在MFC工程中如下 *** 作
OnInitDialog方法中调用usb_init函数,这是初始化函数库的,每个工程需要而且仅仅需要初始化一次
查找系统中全部USB的方法如下
usb_find_busses();
usb_find_devices();//重新寻找设备
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
usbCount++;
deviceNameEmpty();
handle = usb_open(dev);
usb_get_string_simple(handle,dev->descriptoriProduct,nameBuffer,128);
usb_close(handle);
pidBuffer[usbCount-1] = dev->descriptoridProduct;//枚举所有设备
vidBuffer[usbCount-1] = dev->descriptoridVendor;
pvnBuffer[usbCount-1] = dev->descriptorbcdDevice;
deviceNameAppendFormat("%s",nameBuffer);
((CComboBox)GetDlgItem(IDC_COMBO_USB_DEVICE_ENMU))->AddString(deviceName);
}
}
打开usb设备的方法如下
//现在遍历全部设备,找到对应PID vid的设备打开
usb_find_busses();
usb_find_devices();//重新寻找设备
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
if(dev->descriptoridProduct == myPid && dev->descriptoridVendor)
{
//PID VID相同
usb_handle = usb_open(dev);
}
}
}
发送数据的方法
char sendBuffer[64] = {0};
CString sendString;
GetDlgItem(IDC_EDIT_USB_SEND_MESSAGE)->GetWindowText(sendString);
for(int i = 0; i < 64; i++)
{
if(i >= sendStringGetLength())sendBuffer[i] = 0;
else
{
sendBuffer[i] = sendStringGetAt(i);
}
}
usb_claim_interface(usb_handle, 0);//默认设备
usb_interrupt_write(usb_handle,0x01,sendBuffer,64,100);
usb_release_interface(usb_handle, 0);
接收数据的方法
char receiveBuffer[64] = {0};
CString receiveString;
int recvCount = 0;
usb_claim_interface(usb_handle, 0);//默认设备
recvCount = usb_interrupt_read(usb_handle,0x81,receiveBuffer,64,100);
usb_release_interface(usb_handle, 0);
if(recvCount > 0)
{
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->GetWindowText(receiveString);
for(int i = 0; i < recvCount; i++)
{
receiveStringAppendChar(receiveBuffer[i]);
}
GetDlgItem(IDC_EDIT_USB_RECV_SHOW)->SetWindowText(receiveString);
每次发送和接手之前需要调用usb_claim_interface将函数库和 *** 作系统关联起来
有了这些基本方法,通讯应该就不成问题了
详细代码见链接
>你好
给你一点小小的建议:
(1)嵌入式系统是当前最热门最有发展前途的IT应用领域之一。是一门非常新的学科,国内外嵌入式系统开发都不像开发应用软件和生产一般硬件这么成熟,真正的是一门朝阳产业,所以坚定你做嵌入式开发是绝对有前途的
(2)嵌入式开发的语言主要是用C,但是不只有C,做底层用汇编的也不少,所以对于你说的MFC,ATL,COM这些知识对以后搞嵌入式开发有用吗,肯定是有用的,但是和你做嵌入式开发却并无多大联系,人的精力是有限的,只在你所从事的领域做好做精,这才是你当前最明智的选择
(3)鉴于你是学电子工程、通信工程等偏硬件专业出身的人,而你们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package(像PC的BIOS一样,往下驱动硬件,往上支持 *** 作系统),最初级的硬件驱动程序等。你们的优势是对硬件原理非常清楚,不足在于对复杂软件系统往往力不从心(例如嵌入式 *** 作系统原理和复杂应用软件等,所以针对你们专业需要补充的方面下工夫,这样才能在大学有限的时间里做到事半功倍。
谢谢,一点建议不一定正确,希望对你有帮助
祝你好运什么是API?
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
你既然学了API敢问你学会了没有API。学API是为了什么。你这些都没有弄清楚。
Windows不是万能的。你如果只想做一个WINDOWS程序员,就去学MFC,如果不想就不要去学。API的作用不仅仅是交你会用API,而是一种学习手段。各种程序都有API,你想用它就得去学。怎么学,在才是你得到的,仅仅是windowsAPI的话拿就是扯淡了。而且,只要你不和windows沾边,MFC这辈子都不一定会用的上
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)