调研:有人把STM32的USB虚拟串口VCP、CDC类用于产品吗?

2019-12-10 18:27发布


把STM32的USB虚拟串口(VCP、CDC类)用于产品,设备与PC机间进行通信,有人做过吗?

实际上想了解,这样应用的兼容性、稳定性、可靠性方面的情况如何,敢不敢用于产品中?

如果情况不好,用在批量产品中就麻烦了,后患无穷。

另外,官方的例程和驱动文件可信吗?

我做实验,发现PC驱动很难安装,总是出现两个设备;即使驱动成功了,也不能通信;也成功过一段时间,但后来又不行了。

求经验!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
33条回答
skyxjh
2019-12-13 04:55
菜包 发表于 2013-4-23 15:01
挺好的啊,我们公司一直在用,上位机按串口方式编程,驱动就一个文件,很简单。
尤其适合以前用串口通讯, ...

你好,我是修改的 官方的 usb 库····

现在发现,给PC 发送一个字符,为什么不停的发送呢?
对USB了解不是很深,就会修改····
我发现,我通过串口 给他发送 0x53,他会不停的发  hello world;
发54呢,好么,mt 和 hello world 一起发···
真心求助啊···
我实验的一段函数
  1.         c=usb_cdc_getc();
  2.                 switch(c){
  3.                         case 0x53:
  4.                                 c = 0;
  5.                                 usb_cdc_putc("hello world!!",20);
  6.                                
  7.                                 break;
  8.                         case 0x54:
  9.                                 c = 0;
  10.                                 usb_cdc_putc("I'm Mt!!",20);
  11.                                
  12.                                 break;
  13.                        
  14.                
  15.                 }
复制代码
================================
mcu----》PC
调用的是这个
  1. static uint16_t VCP_DataTx (uint8_t* Buf,uint32_t Len)
  2. {
  3.         int i;
  4.         for(i = 0;i<Len;i++){
  5.                 APP_Rx_Buffer[APP_Rx_ptr_in] = *Buf++;
  6.                 APP_Rx_ptr_in++;

  7.                 /* To avoid buffer overflow */
  8.                 if(APP_Rx_ptr_in >= APP_RX_DATA_SIZE)
  9.                 {
  10.                         APP_Rx_ptr_in = 0;
  11.                 }
  12.         }

  13.   return USBD_OK;
  14. }
复制代码
=============================================
PC------->mcu 是这个
  1. static uint16_t VCP_DataRx (uint8_t* Buf, uint32_t Len){
  2.         uint32_t i;

  3.         for (i = 0; i < Len; i++){
  4.                 APP_Tx_Buffer[APP_tx_ptr_head] = *(Buf + i);
  5.                 APP_tx_ptr_head++;

  6.                 if(APP_tx_ptr_head == APP_TX_BUF_SIZE){
  7.                         APP_tx_ptr_head = 0;
  8.                 }

  9.                 if(APP_tx_ptr_head == APP_tx_ptr_tail){
  10.                         return USBD_FAIL;
  11.                 }
  12.         }
  13.         return USBD_OK;
  14. }
复制代码

一周热门 更多>