CH372UPDOWN.EXE

UINT mThreadDown2(LPVOID pParam) //端点2下传线程 { ULONG dlen,datalen; UCHAR mBuf[mCH375_PACKET_LENGTH*8];

CCH372UpDownDlg *pDlg = (CCH372UpDownDlg *)pParam; pDlg->m_btndown2.EnableWindow(FALSE); if(pDlg->m_open && pDlg->m_trddown2) { /**************在线程中用CreateFile打开设备,因为每个句柄同一时候只能执行一个API**************************/ if ( pDlg->T2DHandle != INVALID_HANDLE_VALUE ) { datalen = strlen(pDlg->m_downdata2); if((LONG)datalen/2 > pDlg->m_downlen2) //取数据长度与输入长度中偏小值 datalen = pDlg->m_downlen2; else{ datalen = datalen/2; pDlg->m_downlen2 = datalen; }

memcpy(mBuf,pDlg->m_downdata2,datalen*2); pDlg->mStrtoVal(&mBuf[0],datalen*2); dlen = datalen; if(!CH375WriteData((ULONG)pDlg->T2DHandle,&mBuf[0],&dlen)) { if ( !pDlg->m_close ) MessageBox(NULL,"端点2下传失败!如果设备断开过那么请先关闭本程序","USB实验调试软件",MB_OK|MB_ICONSTOP); } else{//更新长度显示 char tem[50]=""; DownCount=DownCount+dlen; sprintf(tem,"Down: %d",DownCount); SetDlgItemText(pDlg->m_hWnd,IDC_DownCount,tem); } } } pDlg->m_trddown2 = FALSE; pDlg->m_btndown2.EnableWindow(TRUE); //ExitThread(0); return 0; }

这个是官方给的CH372updown调试软件中 端2点的下传线程

PUCHAR CCH372UpDownDlg::mStrtoVal(PUCHAR str, ULONG strlen) { ULONG i,j; ULONG len; UCHAR strRev[mMAX_BUFFER_LENGTH]; if( strlen % 2 != 0 ) { str[strlen] = 0; strlen += 1; } len = strlen / 2; for(i=0,j=0;i { strRev[j] = (UCHAR)((mCharToBcd(str[i])<<4) + mCharToBcd(str[i+1])); i++; } strRev[j]='\0'; memcpy( str,strRev,len); return str; }

UCHAR CCH372UpDownDlg::mCharToBcd(UCHAR iChar) { UCHAR mBCD; if ( iChar >= '0' && iChar <= '9' ) mBCD = iChar -'0'; else if ( iChar >= 'A' && iChar <= 'F' ) mBCD = iChar - 'A' + 0x0a; else if ( iChar >= 'a' && iChar <= 'f' ) mBCD = iChar - 'a' + 0x0a; // else mBCD = 0xff; else mBCD = 0; return( mBCD ); }

通过mStrtoVal函数还有mCharToBcd函数把输入的数据改变成什么了 8位的BCD码?

可是最后进行写操作的不是还是 CH375WriteData((ULONG)pDlg->T2DHandle,&mBuf[0],&dlen); 这不是就是直接把输入对话框端点2下传的数据 直接通过API CH375WriteData函数 下传的芯片上。。。

那这mStrtoVal和mCharToBcd两个函数作用什么啊。

还有看mCharToBcd函数 似乎输入对话框的数据只可以是0-9 A-F a-f

麻烦高手指点下。。。

唉 悲剧 不知道为什么 硬件连接可以 就是不可以传数据

大神 99俺

[font=新宋体]文字[/font][font=宋体]文字[/font]

“这不是就是直接把输入对话框端点2下传的数据”注意mStrtoVal函数里面有个memcpy( str,strRev,len); 会改变str所指向的缓冲区,这个改变之后的缓冲区内容,就是通过API CH375WriteData函数下传下去的。 输入框里输入的是16进制的数据,如输入123456A89f ,实际发送下去的是0x12 0x34 0x56 0xa8 0x9f


谢谢LS


请问官方给的这个上位机程序可以直接用吗,我现在是FPGA开发板上面应用CH376芯片,能将采集到的数据利用这个上位机程序显示到上位机上面吗、、要不要根据自己的下位机再改这个程序啊??求各位大神大侠帮忙解答一下


我们提供的软件对应的FPGA程序只是实现了TEST的功能,简单实现了芯片的初始化和端点2数据收发。


嗯,我现在初期就是只想能建立与上位机的连接,能实现数据的接发就好。请问这个这个FPGA的TEST程序与DEBUG372里的上位机程序是不是可以配套使用。。另外,我用的是CH376,是不是可以直接用这些程序


具体后面的功能会自己添加,现在就是想怎么让这个开发板和上位机通讯上,能够简单的收发数据。那TEST里是不是完全可以实现啊


是的 TEST的功能就是与上位机正常通讯,简单实现数据收发。


以下是端点2上传的线程部分程序 if(pDlg->m_open && pDlg->m_trdup2) //设备打开,线程启动 { /**************在线程中用CreateFile打开设备,因为每个句柄同一时候只能执行一个API**************************/ if ( pDlg->T2UHandle != INVALID_HANDLE_VALUE ) { // 打开设备成功 datalen = min( pDlg->m_uplen2, sizeof(mBuf)); dlen = datalen; if(CH375ReadData((ULONG)pDlg->T2UHandle,&mBuf[0],&dlen)) {//操作成功输出数据 CHAR buffer[mCH375_PACKET_LENGTH*8*2+1]; ULONG i,j; for(i=0,j=0;i{ sprintf(&buffer[j],"%02X ",mBuf); j += 3; } buffer[j] = '\0'; //每次数据用空格隔开 ShowUpdata(buffer,j); //显示数据 {//更新长度显示 char tem[50]=""; UpCount=UpCount+dlen; sprintf(tem,"Up: %d",UpCount); SetDlgItemText(pDlg->m_hWnd,IDC_UpCount,tem); } } else if ( !pDlg->m_close ) MessageBox(NULL,"端点2上传失败!如果设备断开过那么请先关闭本程序","DEBUG372",MB_OK|MB_ICONSTOP); } } 请问在ShowUpdata(buffer,j); //显示数据 这句后面的中括号前是不是少了什么代码


没有少代码,“{”“}”是可以省略的,中间的代码要保留。主要当时写代码时习惯C语言的风格,在C语言中定义变量时要放在{括号的后面,不能在代码中间定义。C++是没有这个限制的。注意:VC在遇到.C文件时是按照C语言来编译的,.CPP文件时是C++语言。


请问这个上位机适用于单片机吗,它对应的单片机下位机程序在哪


上位机程序是不能适用到单片机的。下位机的程序你可以参考TEST的FPGA程序


只有登录才能回复,可以选择微信账号登录