2017-11-09 01:37 AM
Hi,
I am trying to start with USB CDC on stm32h7. I create new project with CubeMx + STM32Cube_FW_H7_V1.1.0 (cubemx file attached). After compile usb device doesnt appear on the system.
Regards
Mike
#stm32h743 #virtual-comport-stm32 #cdc #stm32h7 #usb-device #usb-fs-cdcSolved! Go to Solution.
2018-05-08 09:37 AM
Hi Marina,
I dont use the Nucleo board. I have designed a custom board using the STM32H743II. I am using PB13,PB14,PB15 for USB host connectivity and PF2,PF3 for USB_HOST_PWRON and USB_HOST_OVERCURR using a STMPS2141 to provide power to the host connector. The Cube MX driver does not handle the power switching and overcurrent handling you have to implement this by yourself.
I hope this is useful.
Best regards
Dirk
2018-05-08 09:45 AM
Yep, it does!
2018-08-16 06:33 AM
HI, I have similar issue, but
HAL_PWREx_EnableUSBVoltageDetector() doesn't do the trick for me, my bet is incorrect codebase generated by stm32cubeMX 4.26 + FW 1.3
Is there anyone who deal with that problem?
Actually usb33den bit doesn't set after function call, in debugger at least.
2018-09-27 11:12 PM
I am using PB13,PB14,PB15 for USB host connectivity and PF2,PF3 for USB_HOST_PWRON and USB_HOST_OVERCURR using a STMPS2141 to provide power to the host connector.
https://www.brotherprintersupportnumber.com/brother-printer-setup/
2019-06-07 02:04 AM
I have same problem with NUCLEO STM32H743ZI Virtual Com Port - I can not open port on PC
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
2019-06-07 02:06 AM
STM32H743ZI USB FullSpeed Virtual Com Port: 'Com port parameter is incorrect'
For data exchange with MCU on Windows 10 I use C function: fopen("COM6", "r+"), fwrite, fgetc, fclose, - without COM port parameters and it's work. But if I use C++ Qt or C# libraries, when I try to open the COM port I catch exception 'The parameter is incorrect'. Same exception I catch in PuTTY and RealTerm programs. I tried setting various parameters. I think USB device cannot accept COM port parameters from PC. I used Nucleo and my board with same result.
I use CubeMX 5.2.1 and FW 1.4.0. If I use CubeMX 4.27.0 and FW 1.3.2 PC is not found USB device.
Also USB description has error in field bDeviceSubClass in FW 1.4.0 and FW 1.3.2.
Microsoft UsbView program:
===>Device Descriptor<===
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0x02 -> This is a Communication Device
bDeviceSubClass: 0x02
*!*ERROR: bDeviceSubClass of 2 is invalid
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) "383A34463137"
bNumConfigurations: 0x01
2019-06-07 02:06 AM
---===>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
2020-04-09 08:01 AM
I have the same problem, did you find a solution?
Thanks
2020-04-22 06:28 AM
Yes, I was answered this question on stackoverflow. You must edit function in file USB_DEVICE\App\usbd_cdc_if.c
Connection parameters are not stored in STM.
/**
* @brief Manage the CDC class requests
* @param cmd: Command code
* @param pbuf: Buffer containing command data (request parameters)
* @param length: Number of data to be sent (in bytes)
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
{
/* USER CODE BEGIN 5 */
/*******************************************************************************/
/* 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 };
switch(cmd)
{
case CDC_SEND_ENCAPSULATED_COMMAND:
break;
case CDC_GET_ENCAPSULATED_RESPONSE:
break;
case CDC_SET_COMM_FEATURE:
break;
case CDC_GET_COMM_FEATURE:
break;
case CDC_CLEAR_COMM_FEATURE:
break;
case CDC_SET_LINE_CODING:
memcpy(lineCoding, pbuf, sizeof(lineCoding));
break;
case CDC_GET_LINE_CODING:
memcpy(pbuf, lineCoding, sizeof(lineCoding));
break;
case CDC_SET_CONTROL_LINE_STATE:
break;
case CDC_SEND_BREAK:
break;
default:
break;
}
return (USBD_OK);
/* USER CODE END 5 */
}
2020-04-22 07:18 AM
Yess! now works!
I had already found a solution using a NuGet Packages: SerialPortStream
But your is a better solution
Thank you