CH573 CDC 模拟usb转串口精简版-已验证

在官方的cdc例程icon_rar.gifCH573_CDC_OK.zip,基础上修改,原版程序文件太复杂,不便学习


所以在其基础上,删除了shell文件夹(应该是用于调试的),key按键等代码。仅保留cdc相关代码。最终例程如下:

icon_rar.gifCH573_CDC_Lite.zip

程序功能:

模拟CDC设备,将usb接口模拟成串口设备,实现USB和串口0之间的数据互传。也可以将串口0代码删除,并修改usb处理函数如下,实现usb模拟串口自发自收。

/**
 * USB<-->串口数据处理
*/
void usb_uart_comm_handle(void)
{
  uint8_t len = 0;
  static uint8_t tempbuf[128] = {0};
  len = ring_buffer_num_items(&usb_to_uart_rb);
  if (len != 0)
  {
    len = len >= 64 ? 64 : len;
    ring_buffer_dequeue_arr(&usb_to_uart_rb, pEP2_IN_DataBuf, len);
    DevEP2_IN_Deal(len);
  }
}


感谢分享


源码中该处建议修改成如下字符编写方式,直观易懂,并且源码中序列号描述符实测是错误的,按如下编写才可正常显示。

其中字符可自行修改内容,每个字符后都要接一个0x00。但注意每个数组第一个成员表示成员个数,需要随成员数量改变。第二个0x03是固定的。

// 语言描述符
const UINT8 MyLangDescr[] = {0x04, 0x03, 0x09, 0x04};
// 厂家信息 wchcn
const UINT8 MyManuInfo[] = {0x0E, 0x03, 'w', 0, 'c', 0, 'h', 0, '.', 0, 'c', 0, 'n', 0};
// 产品信息 CH57x
const UINT8 MyProdInfo[] = {0x0C, 0x03, 'C', 0, 'H', 0, '5', 0, '7', 0, 'x', 0};
// 序列号描述符 TEST
const UINT8 MySerDes[] = {0x0A, 0x03,'T', 0x00, 'E', 0x00, 'S', 0x00, 'T', 0x00};

请问一下,我在这个文件里面操作flash data,总是会报错,是我调用的哪里有问题吗?而且我调了好半天,中间还遇到过,操作flash这句没报错,反而之前正常的语句报错了,屏蔽了flash这句,其他地方也不报错了。

1699113769179412.png

1699113770198607.png



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