CH32V103C8T6用USB HOST与CH340通信问题

从CH32F103操作CH340代码移植到CH32V103C8T6,目前可以接受到CH340上传的数据,但是数据发送不过去,程序标志是显示发送成功。

/*发送数据长度*/
UINT8 TXDUsbCH341BulkOut( PUINT8 pBuf,UINT8 len )  // 341批量发送
{
    UINT8 TxCnt,s,endp = ThisUsbDev.GpVar[1];

    printf("CH341 Out data: \r\n");
    while ( len )
    {
        Delay_Us( 200 );
        R8_UH_TX_LEN = len >= 32 ? 32 : len;
        for ( TxCnt = 0; TxCnt != R8_UH_TX_LEN; TxCnt ++ ) {
            TxBuffer[ TxCnt ] = *pBuf;
            printf("x%02X ",TxBuffer[ TxCnt ]);
            pBuf ++;
        }
        s = USBHostTransact( USB_PID_OUT << 4 | (endp & 0x7F), endp & 0x80 ? RB_UH_R_TOG | RB_UH_T_TOG : 0, 0 );  // OUT数据
        if ( s == ERR_SUCCESS ){
            len -= R8_UH_TX_LEN;
            endp ^= 0x80;  // 同步标志翻转
            ThisUsbDev.GpVar[1] = endp;  // 保存同步标志位
        }
        else
        {
            return( s );
            printf("\r\n");
        }
    }
    printf("\r\n");

    return ERR_SUCCESS;
}
/*返回数据接收长度,数据存放RxBuffer*/
UINT8 RXDUsbCH341BulkIn( void )  // 341批量接收
{
    UINT8 i,s,len,endp = ThisUsbDev.GpVar[0];

    // CH559传输事务,获取数据,NAK不重试
    s = USBHostTransact( USB_PID_IN << 4 | (endp & 0x7F), endp & 0x80 ? RB_UH_R_TOG | RB_UH_T_TOG : 0, 0 );

    if ( s == ERR_SUCCESS )
    {
        endp ^= 0x80;  // 同步标志翻转
        ThisUsbDev.GpVar[0] = endp;  // 保存同步标志位
        len = R8_USB_RX_LEN;  // 接收到的数据长度
        if ( len )
        {
            printf("CH341 In data: \r\n");
            for ( i = 0; i < len; i ++ )
                printf("x%02X ",(UINT16)(RxBuffer[i]) );
            printf("\r\n");
        }
        return len;
    }
    else if ( s != ( USB_PID_NAK | ERR_USB_TRANSFER ) )
        printf("CH341 error %02x\r\n",(UINT16)s);// 可能是断开了

    return 0;
}

icon_rar.gifCH32V103C8T6.zip


和CH341T可以实现发送接受,但和CH340N只能接受发送不了


您好,这边用你的例程与CH340N通信测试没有问题。你可以检查一下是否是你的CH340N出了问题或者引脚接错,后续若有问题,可将问题发我邮箱(lzs@wch.cn)联系。


那我先买一块CH340N模块在试试,我这是集成在板子上的,与电脑通信就正常,与CH32V103C8T6通信就接收不到。

电路应该不会有什么问题把?

image.png

image.png


您好,单看电路感觉没什么问题,主要要确保做主机时那个R11K5要删除掉。


9600的波特率你试过吗?源码啥的9600数据,实际是4800。


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