CH563 usb学习

[复制链接]
1419|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的程序,需要将显示函数改为:
void ShowUpdata(PCHAR addbuf,ULONG AddLen){//向上传数据框内添加数据
        int TextLen;
        TextLen = ::GetWindowTextLength(GetDlgItem(WndHandle,IDC_UPDATABuf));
        if(TextLen>0){
                char prestr[2048];
                ::GetDlgItemText(WndHandle,IDC_UPDATABuf,(PCHAR)prestr,2048);
                strncat_s(prestr,"\r\n",2);
                strncat_s(prestr,addbuf,AddLen+1);
                ::SetDlgItemText(WndHandle,IDC_UPDATABuf,(PCHAR)prestr);
        }
        else{//当前数据框内没有数据
                ::SetDlgItemText(WndHandle,IDC_UPDATABuf,addbuf);
        }       
        return;
}

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

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

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

void USBDev_EP2_OUT_Deal( void )
{
    UINT32    len;

#if  MY_DEBUG_PRINTF         
    printf(" USBDev_EP2_OUT_Deal... \n");
#endif

    /* 从下传缓冲区中提取数据 */
    if( gUsbSpeed == USB_DEV_SPEED_HS )                                         /* 高速模式 */
    {
        len = USBDev_RD_FIFOx( USB_DMA_ACC_F2, 512, (PUINT8)USB_Recv_Buf );     /* 读取EP2_OUT*/               
    }
    else
    {
        len = USBDev_RD_FIFOx( USB_DMA_ACC_F2, 64, (PUINT8)USB_Recv_Buf );      /* 读取EP2_OUT*/               
    }

    /* 将数据取反后通过上传端点返回 */
    gRecvLen = len;
    for( len = 0; len < gRecvLen; len++ )
    {   
          USB_Tran_Buf[ len ] = USB_Recv_Buf[ len ]+1; //USB_Tran_Buf[ len ] = ~USB_Recv_Buf[ len ];
    }
    USBDev_EP2_IN_Deal( );
}

将缓冲区的数据修改为UINT8, 缓冲区按照字节进行修改。

后续问题:在这种情况下,设备数据交互的速度如何,实在不知道如何测试。
Any question QQ 67259275mail:67259275@qq.com

DEBUG372.zip

74.97 KB, 下载次数: 18

我是叨叨叨1 发表于 2018-11-7 09:25 | 显示全部楼层
看资料CH563是USB2.0的吧,传输啊速度能达到多少?
wetrat 发表于 2020-2-22 19:33 | 显示全部楼层
~~~~哼..哼..哼...............

10

主题

33

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部