用vc++实现usb接口通信编程的一般步骤

用vc++实现usb接口通信编程的一般步骤,第1张

我来说下我做过的USB通信,我没有做过DSP跟上位机的通信,我只做过ARM类的STM32跟上位机的数据传递,虽然做过但是也不是很 懂,只是略知一二,我来说说我怎么做的吧,我是这么实现的:

USB是个很复杂的协议,你如果完全搞懂,我估计没有几个月专心钻研是不行的,但是如果只是能实现你的这个功能,我估计不是很复杂。

首先来说说USB通信:

USB通信传输方式分为四种:控制,中断,批量,同步传输四种,这个你可以看看网上资料,然后我用STM32通信,因为数据量不是很大,我用的是中断传输方式,但是DSP数据量应该会比较大,不知道中断传输行不行,但是一般问题不大。

传输方式说完了,再说说USB设备类型,你每次插usb设备到电脑上的时候就会有提示,这是一个什么设备,USB设备类型就是说的这个意思,是鼠标还是键盘还是别的什么的,如果你选用标准的类,你就不用自己写上位机(PC)的驱动程序,但是如果不用标准的类,就是用自乱好定义的类就要自己写上层的设备驱动程序,就是所谓的DDK,WDM,WDF什么的,你没乱衡写过这方面的还真有点棘手,但是也不一定要写驱动程序,你可以试试有个类叫HID类,这个类在USB通信的时候用的还挺多的,不过这个类也有缺点,这个地方还要说一点,USB还分低速,全速,高速三种,不太了解DSP,不知道他支持什么模式,但是USB2.0的全速应该至少可以支持的。

USB2.0全速模式HID用中断方式每秒最多可以传输64KB的数据,不知道能不能达到你的要求,但是我估计一哗陪铅般问题不大了,如果你这歀DSP能支持高速模式,每秒用这种方式可以传输高达22MB的数据,这个速度一般问题不大了。

你可以照着我说的思路,去网上搜搜人家写好的程序,肯定有人做过DSP的USB通信,然后你按照自己的要求改一改,主要应该是USB的设备描述符部分要自己修改,然后可能还要根据自己的电路改改配置什么的,上位机软件网上有源代码的多的是,然后自己摸索摸索,我估计你要是编程水平还可以的话,只是摸索USB,一两个星期完全没有问题,祝你好运!

1、新建MFC对话框工程如下

2、给编辑框控件添加变量,其中Edit Box添加Value变量,Button添加Control变量,ID和变量分别为:

IDC_BTNOPEN()    数橘源           伍链                   CButton m_cBtnOpen

IDC_BTNSEND()                                  CButton m_cBtnSend

IDC_EDIT_RXDATA()                          CString m_sRXDATA

IDC_EDIT_TXDATA()                           CString m_sTXDATA

3、右击插入Active X控件:

右击电话图标选择“Class Wirzard”,添加变量m_comm1,添加Function:

双击两个薯态Button按钮;

代码中显示如下:

[cpp] view plain copy print?

void CMSCommTestDlg::OnBnClickedBtnopen()

{

// TODO: Add your control notification handler code here

}

void CMSCommTestDlg::OnBnClickedBtnsend()

{

// TODO: Add your control notification handler code here

}

void CMSCommTestDlg::OnOncommMscomm1()

{

// TODO: Add your message handler code here

}

void CMSCommTestDlg::OnBnClickedBtnopen()

{

// TODO: Add your control notification handler code here

}

void CMSCommTestDlg::OnBnClickedBtnsend()

{

// TODO: Add your control notification handler code here

}

void CMSCommTestDlg::OnOncommMscomm1()

{

// TODO: Add your message handler code here

}

5、将上面代码补全如下:

[cpp] view plain copy print?

void CMSCommTestDlg::OnClickedBtnopen()

{

// TODO: Add your control notification handler code here

//如果端口已经开启,那么先关闭

if (m_comm1.get_PortOpen())

{

m_comm1.put_PortOpen(FALSE)

}

m_comm1.put_CommPort(3)                //选择com3,可以根据具体情况更改

m_comm1.put_InBufferSize(1024)         //设置输入缓冲区的大小,Bytes

m_comm1.put_OutBufferSize(1024)        //设置输出缓冲区的大小,Bytes

m_comm1.put_Settings(_T("9600,n,8,1")) //波特率9600,无校验,8个数据位,停止位1

m_comm1.put_InputMode(1)               //1:表示以二进制方式检索数据

m_comm1.put_RThreshold(1)              //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

m_comm1.put_InputLen(0)                //设置当前接收区长度是0

if (!m_comm1.get_PortOpen())

{

m_comm1.put_PortOpen(TRUE)

}

else

{

AfxMessageBox(_T("Can not open serial port!"))

}

m_comm1.get_Input()                    //先预读缓冲区以清除残留数据

UpdateData(FALSE)

}

void CMSCommTestDlg::OnClickedBtnsend()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE)

m_comm1.put_Output(COleVariant(m_sTXDATA))//发送数据

}

void CMSCommTestDlg::OnOncommMscomm1()

{

// TODO: Add your message handler code here

VARIANT variant_inp

COleSafeArray safearray_inp

LONG len, k

BYTE rxdata[2048]

CString strtemp

if (m_comm1.get_CommEvent() == 2)       //事件值为2表示缓冲区内有字符

{

variant_inp = m_comm1.get_Input()  //读缓冲区

safearray_inp = variant_inp        //VARIANT型变量转换为ColeSafeArray型变量

len = safearray_inp.GetDim()       //得到有效数据长度

for (k = 0 k < len k++)

{

safearray_inp.GetElement(&k, rxdata + k)//转换为BYTE型数组

}

for (k = 0 k < len k++)            //将数组转换为CString型变量

{

BYTE bt = *(char*)(rxdata + k) //字符型

strtemp.Format(_T("%c"), bt)   //将字符送入临时变量strtemp存放

m_sRXDATA += strtemp           //接收到的数据放到编辑框对应的变量中

}

}

SetDlgItemText(IDC_EDIT_RXDATA, m_sRXDATA)

}

什么是C语言?C语言的简介。

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。

它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用棚嫌程序设计语言,编写不依赖计算机硬件的应用程序。

因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,梁丛具体应用比如单片机以及嵌入式系统开发。

语言特点:C是中级语言/C是结构式语言/C语言功能齐全/C语言适用范围大/简洁紧凑、灵活方便/运算符丰富/数据类型丰富/C是结构式语言/语法限制不太严格,程序设计自由度大/适用范围橡和樱大,可移植性好。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12512058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存