What is issue with STM32 Virtual Com Port? I can not open it

13,250

I had the same problem, i could read the device and see which com port but i could not open one. (for a CDC)

then i encountered following post with the last answer having the solution for my problem: https://community.st.com/s/question/0D50X00009XkgIYSAZ/unable-to-configure-serial-port-error-for-usb-cdc

there it mentions you need to add several lines if you want to communicate RS232 through a VCP.

I added following in usbd_cdc_if.c file:

/*******************************************************************************/
/* Line Coding Structure                                                       */
/*-----------------------------------------------------------------------------*/
/* Offset | Field       | Size | Value  | Description                          */
/* 0      | dwDTERate   |   4  | Number |Data terminal rate, in bits per second*/
/* 4      | bCharFormat |   1  | Number | Stop bits                            */
/*                                        0 - 1 Stop bit                       */
/*                                        1 - 1.5 Stop bits                    */
/*                                        2 - 2 Stop bits                      */
/* 5      | bParityType |  1   | Number | Parity                               */
/*                                        0 - None                             */
/*                                        1 - Odd                              */
/*                                        2 - Even                             */
/*                                        3 - Mark                             */
/*                                        4 - Space                            */
/* 6      | bDataBits  |   1   | Number Data bits (5, 6, 7, 8 or 16).          */
/*******************************************************************************/
static uint8_t lineCoding[7] // 115200bps, 1stop, no parity, 8bit
    = { 0x00, 0xC2, 0x01, 0x00, 0x00, 0x00, 0x08 };

and adjusted CDC_Control_FS function:

static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
{
  /* USER CODE BEGIN 5 */
  switch(cmd)
  {
   ...
    case CDC_SET_LINE_CODING:
      memcpy(lineCoding, pbuf, sizeof(lineCoding));
    break;

    case CDC_GET_LINE_CODING:
      memcpy(pbuf, lineCoding, sizeof(lineCoding));
    break;
    ...
}

I hope this is still useful for you.

Share:
13,250

Related videos on Youtube

Papayaved
Author by

Papayaved

Hello, I am looking for a visa sponsorship for relocation. I am an electronics and FPGA engineer, a microcontroller and PC programmer. My main experience is in programming Altera FPGA chips (now IntelFPGA). You can see my portfolio on the Opencores website (link above). I'm using Verilog/SystemVerilog hardware description language (HDL) and Quartus IDE for FPGA, and C programming language for microcontrollers. I have experience with NIOS, STM32, XMOS, NXP, AVR8 microcontrollers. I can write programs with a graphic user interface (GUI) for Windows in C# and for Linux Ubuntu or Raspberry PI in Qt/C++. I have experience with Ethernet (UDP/IP, ARP, GOOSE) protocols, USB 3.0/2.0 controllers (Cypress FX3/FX2, FTDI), DSP (FIR, CIC, FFT, correlation processing, PSK modulation), CAN and CANopen protocols, PCI, MIL-STD-1553B, ARINC 429, UART, ModBus, I2C, SPI, SerDes LVDS, NOR flash, SDRAM controllers, radar systems, asynchronous, stepper and servo motors, ultrasonic phased array testing systems, wire-cut EDM CNC machines. I can create, route and solder electronic circuits. I am familiar with P-CAD and Altium Designer programs. I'm always interested in learning new technologies, new programs and new fields of knowledge independently that are needed for work. Recently I have been working on my projects alone, but I also enjoy working in a team. My main achievements are: a prototype of a mechanical radar system. I created programs for FPGA, microcontrollers and computer, and some electronic circuits. I emitted and received a phase manipulated signal. I implemented vector control for asynchronous motors using a Sin-Cos encoder and PWM, and I depicted a radiolocation image in MatLab; a prototype of an ultrasonic phased array system. I have developed FPGA design, a microcontroller program and a debug program for PC. I formed an ultrasonic beam and calculated a synthetic aperture, but it was only a 32-element linear array of transducers; an experience with XMOS multicore processor that has a specific architecture that can replace the FPGA in some tasks; a spark cutting 4-axis multipass CNC machine. I developed a circuit design, FPGA and microcontroller programs, and an user interface for Linux that is compatible with Raspberry PI and x86. I am able to pass an English exam for a work visa, but not for an immigration program. I will improve my English in a language environment.

Updated on June 04, 2022

Comments

  • Papayaved
    Papayaved almost 2 years

    I have Nucleo STM32H743ZI board. I'm using CubeMX HAL (I tried several versions) and TrueStudio. "Virtual COM port" appearances in Windows 10 (I tried default Windows driver and ST driver) but I can not open port. My C# program write me "The parameter is incorrect" when I try open it:

    SerialPort port = new SerialPort("COM8", 9600, Parity.None, 8, StopBits.One);
    port.Open(); // System.IO.IOException: 'The parameter is incorrect.'
    

    same message writes me program Realterm, PuTTY do nothing and "Tera Term" program works correct - I can send and receive data to my MCU program.

    May anyone know what is it?

    In my C# program and in terminal programs I use same parameters

    USB Device viewer information:

                [Port1]  :  STMicroelectronics Virtual COM Port
    
    
                Is Port User Connectable:         yes
                Is Port Debug Capable:            no
                Companion Port Number:            17
                Companion Hub Symbolic Link Name: USB#ROOT_HUB30#4&2f29167c&0&0#{f18a0e88-c30c-11d0-8815-00a0c906bed8}
                Protocols Supported:
                 USB 1.1:                         yes
                 USB 2.0:                         yes
                 USB 3.0:                         no
    
                Device Power State:               PowerDeviceD0
    
                       ---===>Device Information<===---
                English product name: "STM32 Virtual ComPort"
    
                ConnectionStatus:                  
                Current Config Value:              0x01  -> Device Bus Speed: Full (is not SuperSpeed or higher capable)
                Device Address:                    0x0A
                Open Pipes:                           3
    
                          ===>Device Descriptor<===
                bLength:                           0x12
                bDescriptorType:                   0x01
                bcdUSB:                          0x0200
                bDeviceClass:                      0x02  -> This is a Communication Device
                bDeviceSubClass:                   0x00
                bDeviceProtocol:                   0x00
                bMaxPacketSize0:                   0x40 = (64) Bytes
                idVendor:                        0x0483 = STMicroelectronics
                idProduct:                       0x5740
                bcdDevice:                       0x0200
                iManufacturer:                     0x01
                     English (United States)  "STMicroelectronics"
                iProduct:                          0x02
                     English (United States)  "STM32 Virtual ComPort"
                iSerialNumber:                     0x03
                     English (United States)  "354BB9433137"
                bNumConfigurations:                0x01
    
                          ---===>Open Pipes<===---
    
                          ===>Endpoint Descriptor<===
                bLength:                           0x07
                bDescriptorType:                   0x05
                bEndpointAddress:                  0x82  -> Direction: IN - EndpointID: 2
                bmAttributes:                      0x03  -> Interrupt Transfer Type
                wMaxPacketSize:                  0x0008 = 0x08 bytes
                bInterval:                         0x10
    
                          ===>Endpoint Descriptor<===
                bLength:                           0x07
                bDescriptorType:                   0x05
                bEndpointAddress:                  0x01  -> Direction: OUT - EndpointID: 1
                bmAttributes:                      0x02  -> Bulk Transfer Type
                wMaxPacketSize:                  0x0040 = 0x40 bytes
                bInterval:                         0x00
    
                          ===>Endpoint Descriptor<===
                bLength:                           0x07
                bDescriptorType:                   0x05
                bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
                bmAttributes:                      0x02  -> Bulk Transfer Type
                wMaxPacketSize:                  0x0040 = 0x40 bytes
                bInterval:                         0x00
    
                       ---===>Full Configuration Descriptor<===---
    
                          ===>Configuration Descriptor<===
                bLength:                           0x09
                bDescriptorType:                   0x02
                wTotalLength:                    0x0043  -> Validated
                bNumInterfaces:                    0x02
                bConfigurationValue:               0x01
                iConfiguration:                    0x00
                bmAttributes:                      0xC0  -> Self Powered
                MaxPower:                          0x32 = 100 mA
    
                          ===>Interface Descriptor<===
                bLength:                           0x09
                bDescriptorType:                   0x04
                bInterfaceNumber:                  0x00
                bAlternateSetting:                 0x00
                bNumEndpoints:                     0x01
                bInterfaceClass:                   0x02  -> This is Communications (CDC Control) USB Device Interface Class
                bInterfaceSubClass:                0x02
                bInterfaceProtocol:                0x01
                iInterface:                        0x00
                  -> This is a Communications (CDC Control) USB Device Interface Class
    
                          ===>Descriptor Hex Dump<===
                bLength:                           0x05
                bDescriptorType:                   0x24
                05 24 00 10 01 
                  -> This is a Communications (CDC Control) USB Device Interface Class
    
                          ===>Descriptor Hex Dump<===
                bLength:                           0x05
                bDescriptorType:                   0x24
                05 24 01 00 01 
                  -> This is a Communications (CDC Control) USB Device Interface Class
    
                          ===>Descriptor Hex Dump<===
                bLength:                           0x04
                bDescriptorType:                   0x24
                04 24 02 02 
                  -> This is a Communications (CDC Control) USB Device Interface Class
    
                          ===>Descriptor Hex Dump<===
                bLength:                           0x05
                bDescriptorType:                   0x24
                05 24 06 00 01 
    
                          ===>Endpoint Descriptor<===
                bLength:                           0x07
                bDescriptorType:                   0x05
                bEndpointAddress:                  0x82  -> Direction: IN - EndpointID: 2
                bmAttributes:                      0x03  -> Interrupt Transfer Type
                wMaxPacketSize:                  0x0008 = 0x08 bytes
                bInterval:                         0x10
    
                          ===>Interface Descriptor<===
                bLength:                           0x09
                bDescriptorType:                   0x04
                bInterfaceNumber:                  0x01
                bAlternateSetting:                 0x00
                bNumEndpoints:                     0x02
                bInterfaceClass:                   0x0A  -> This is a CDC Data USB Device Interface Class
                bInterfaceSubClass:                0x00
                bInterfaceProtocol:                0x00
                iInterface:                        0x00
    
                          ===>Endpoint Descriptor<===
                bLength:                           0x07
                bDescriptorType:                   0x05
                bEndpointAddress:                  0x01  -> Direction: OUT - EndpointID: 1
                bmAttributes:                      0x02  -> Bulk Transfer Type
                wMaxPacketSize:                  0x0040 = 0x40 bytes
                bInterval:                         0x00
    
                          ===>Endpoint Descriptor<===
                bLength:                           0x07
                bDescriptorType:                   0x05
                bEndpointAddress:                  0x81  -> Direction: IN - EndpointID: 1
                bmAttributes:                      0x02  -> Bulk Transfer Type
                wMaxPacketSize:                  0x0040 = 0x40 bytes
                bInterval:                         0x00
    
    • Papayaved
      Papayaved almost 5 years
      I am tried C++ Qt program: on Windows 10 don't work, on Ubuntu works (but slow ~256 kbit/s Request - Acknowledge protocol)
  • Michaël
    Michaël almost 5 years
    Your Welcome, i think ST has deleted these lines in the new repository. They better should add it again so people can program faster, thats mostly what people wanna do with usb CDC.
  • ChrisR
    ChrisR over 4 years
    Thanks for the tip @Michaël. I am running F7 Disco. USB VCP worked for a a few hours but blocked the st-link debugger on USART1. Now I have the opposite - ST-Link working on USART1 but USB VCP broken. I also commented out the FMC, DCMI, ETH and LTDC as per below. I think it may be FreeRTOS setting all IRQ priorities to 5.
  • Anton Bakulev
    Anton Bakulev about 3 years
    Thanks. Really helpful answer. Saves a lot of time for me. It works also on Nucleo-F722ZE