What is issue with STM32 Virtual Com Port? I can not open it
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.
Related videos on Youtube
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, 2022Comments
-
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 almost 5 yearsI am tried C++ Qt program: on Windows 10 don't work, on Ubuntu works (but slow ~256 kbit/s Request - Acknowledge protocol)
-
-
Michaël almost 5 yearsYour 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 over 4 yearsThanks 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 about 3 yearsThanks. Really helpful answer. Saves a lot of time for me. It works also on Nucleo-F722ZE