打印

CH563 usb学习

[复制链接]
1248|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanzp_2014|  楼主 | 2018-10-9 16:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USB, TE, ST, AN, ui
CH563 USB数据交互测试
目的:实验实现CH563通过USB接口和PC进行数据下载和上传。
测试前准备:
1. 演示开发板;
2. DEBUG372 VisualStudio工程或测试程序;(使用VS2010编译后,该程序有BUG。)
3. CH563CH563EVT\EXAM\USB\DEVICE\CH372 单片机程序。

测试开发环境:Win7 64bituVision4VS2010.

一.测试过程
所有功能修改完毕后。
Step1:启动CH563演示板;
Step2:在PC的控制面板可以看到外部接口\USB CH372/CH375.
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps74B7.tmp.jpg
Step3: 启动DEBUG372.exe。然后点击“启动设备”;点击“下传”,将数据发送到MCU;点击“上传”,可以收到从MCU反馈回来的数据。结果如下图。 下传的6个字节的数据,上传后,每个字节的数据被增加了1.
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps74D7.tmp.jpg
这样就实现了数据上传和下载。

二.程序修改
下面介绍程序的修改。
使用VS2010 修改PC的程序,需要将显示函数改为:
[size=9.5000pt]void[size=9.5000pt] ShowUpdata(PCHAR addbuf,ULONG AddLen){[size=9.5000pt]//向上传数据框内添加数据
[size=9.5000pt]        [size=9.5000pt]int[size=9.5000pt] TextLen;
[size=9.5000pt]        [size=9.5000pt]TextLen = ::GetWindowTextLength(GetDlgItem(WndHandle,IDC_UPDATABuf));
[size=9.5000pt]        [size=9.5000pt]if[size=9.5000pt](TextLen>0){
[size=9.5000pt]        [size=9.5000pt]        [size=9.5000pt]char[size=9.5000pt] prestr[2048];
[size=9.5000pt]        [size=9.5000pt]        [size=9.5000pt]::GetDlgItemText(WndHandle,IDC_UPDATABuf,(PCHAR)prestr,2048);
[size=9.5000pt]        [size=9.5000pt]        [size=9.5000pt]strncat_s(prestr,[size=9.5000pt]"\r\n"[size=9.5000pt],2);
[size=9.5000pt]        [size=9.5000pt]        [size=9.5000pt]strncat_s(prestr,addbuf,AddLen+1);
[size=9.5000pt]        [size=9.5000pt]        [size=9.5000pt]::SetDlgItemText(WndHandle,IDC_UPDATABuf,(PCHAR)prestr);
[size=9.5000pt]        [size=9.5000pt]}
[size=9.5000pt]        [size=9.5000pt]else[size=9.5000pt]{[size=9.5000pt]//当前数据框内没有数据
[size=9.5000pt]        [size=9.5000pt]        [size=9.5000pt]::SetDlgItemText(WndHandle,IDC_UPDATABuf,addbuf);
[size=9.5000pt]        [size=9.5000pt]}[size=9.5000pt]       
[size=9.5000pt]        [size=9.5000pt]return[size=9.5000pt];
[size=9.5000pt]}

原来的代码内存处理有问题。这个代码不是完美的,但是演示使用没问题。

使用uVision4修改单片机程序,修改的地方如下:

[size=8.0000pt]UINT8  USB_Recv_Buf[ 512 ]; [size=8.0000pt]//UINT32  USB_Recv_Buf[ 512/4 ];  /* USB设备数据接收缓冲区 */
[size=8.0000pt]UINT8  USB_Tran_Buf[ 512 ];[size=8.0000pt] //UINT32  USB_Tran_Buf[ 512/4 ];  /* USB设备数据发送缓冲区 */

[size=8.0000pt]void USBDev_EP2_OUT_Deal( void )
[size=8.0000pt]{
[size=8.0000pt]    UINT32    len;
[size=8.0000pt]
[size=8.0000pt]#if  MY_DEBUG_PRINTF         
[size=8.0000pt]    printf(" USBDev_EP2_OUT_Deal... \n");
[size=8.0000pt]#endif

[size=8.0000pt]    /* 从下传缓冲区中提取数据 */
[size=8.0000pt]    if( gUsbSpeed == USB_DEV_SPEED_HS )                                         /* 高速模式 */
[size=8.0000pt]    {
[size=8.0000pt]        len = USBDev_RD_FIFOx( USB_DMA_ACC_F2, 512, (PUINT8)USB_Recv_Buf );     /* 读取EP2_OUT*/               
[size=8.0000pt]    }
[size=8.0000pt]    else
[size=8.0000pt]    {
[size=8.0000pt]        len = USBDev_RD_FIFOx( USB_DMA_ACC_F2, 64, (PUINT8)USB_Recv_Buf );      /* 读取EP2_OUT*/               
[size=8.0000pt]    }
[size=8.0000pt]
[size=8.0000pt]    /* 将数据取反后通过上传端点返回 */
[size=8.0000pt]    gRecvLen = len;
[size=8.0000pt]    for( len = 0; len < gRecvLen; len++ )
[size=8.0000pt]    {   
[size=8.0000pt]        [size=8.0000pt]  [size=8.0000pt]USB_Tran_Buf[ len ] = USB_Recv_Buf[ len ]+1; [size=8.0000pt]//USB_Tran_Buf[ len ] = ~USB_Recv_Buf[ len ];
[size=8.0000pt]    }
[size=8.0000pt]    USBDev_EP2_IN_Deal( );
[size=8.0000pt]}
[size=8.0000pt]
[size=12.0000pt]将缓冲区的数据修改为UINT8, 缓冲区按照字节进行修改。
[size=12.0000pt]
[size=12.0000pt]后续问题:在这种情况下,设备数据交互的速度如何,实在不知道如何测试。
[size=12.0000pt]Any question QQ 67259275mail:67259275@qq.com

DEBUG372.zip

74.97 KB

使用特权

评论回复

相关帖子

沙发
我是叨叨叨1| | 2018-11-7 09:25 | 只看该作者
看资料CH563是USB2.0的吧,传输啊速度能达到多少?

使用特权

评论回复
板凳
wetrat| | 2020-2-22 19:33 | 只看该作者
~~~~哼..哼..哼...............

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

33

帖子

0

粉丝