Forum: Mikrocontroller und Digitale Elektronik STM32 USB CDC über Debugger


von USB_CDC (Gast)


Lesenswert?

Hallo,

ich habe ein STM32 Board, bei welchem keine zweite USB - Anschluss (bis 
auf die Debugger - Schnittstelle) ausgeführt ist. Es sind die Anschlüsse 
für USB_DM und USB_DP zwar vorhanden, aber ich wollte darauf verzichten 
sondern über die USB - Debugger - Schnittstelle die Kommunikation (CDC - 
Klasse /Device) aufbauen. Jedoch scheitere ich derzeit daran, da stets 
nur die bereits bestehende Schnittstelle "STMicroelectronics STLink 
Virtual COM Port" und nicht die über HAL - konfigurierte CDC 
Schnittstelle im Gerätemanager (Windows 10) angezeigt wird.

Könnte mir jemand sagen, ob das überhaupt funktionieren kann, oder was 
ich falsch gemacht habe. Falls ihr es benötigt, kann ich auch das 
Projekt hochladen.

Einstellungen:
USB - CDC FS Device
Ich habe das Debugging über das Konfigurationstool deaktiviert.

NUCLEO-L432KC: https://os.mbed.com/platforms/ST-Nucleo-L432KC/

Da habe ich das LineCoding eingefügt. Ansonsten habe ich nichts 
verändert.
usbd_cdc_if.c
1
USBD_CDC_LineCodingTypeDef linecoding =
2
  {
3
    115200, /* baud rate*/
4
    0x00,   /* stop bits-1*/
5
    0x00,   /* parity - none*/
6
    0x08    /* nb. of bits 8*/
7
  };
8
9
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
10
{
11
  /* USER CODE BEGIN 5 */
12
  switch(cmd)
13
  {
14
    case CDC_SEND_ENCAPSULATED_COMMAND:
15
16
    break;
17
18
    case CDC_GET_ENCAPSULATED_RESPONSE:
19
20
    break;
21
22
    case CDC_SET_COMM_FEATURE:
23
24
    break;
25
26
    case CDC_GET_COMM_FEATURE:
27
28
    break;
29
30
    case CDC_CLEAR_COMM_FEATURE:
31
32
    break;
33
34
    case CDC_SET_LINE_CODING:
35
    linecoding.bitrate    = (uint32_t)(pbuf[0] | (pbuf[1] << 8) |\
36
                            (pbuf[2] << 16) | (pbuf[3] << 24));
37
    linecoding.format     = pbuf[4];
38
    linecoding.paritytype = pbuf[5];
39
    linecoding.datatype   = pbuf[6];
40
    break;
41
42
    case CDC_GET_LINE_CODING:
43
    pbuf[0] = (uint8_t)(linecoding.bitrate);
44
    pbuf[1] = (uint8_t)(linecoding.bitrate >> 8);
45
    pbuf[2] = (uint8_t)(linecoding.bitrate >> 16);
46
    pbuf[3] = (uint8_t)(linecoding.bitrate >> 24);
47
    pbuf[4] = linecoding.format;
48
    pbuf[5] = linecoding.paritytype;
49
    pbuf[6] = linecoding.datatype;
50
    break;
51
52
    case CDC_SET_CONTROL_LINE_STATE:
53
54
    break;
55
56
    case CDC_SEND_BREAK:
57
58
    break;
59
60
  default:
61
    break;
62
  }
63
64
  return (USBD_OK);
65
  /* USER CODE END 5 */
66
}

von Stefan F. (Gast)


Lesenswert?

Du bist da mit CDC_IRGENDWAS auf dem völlig falschen Weg. Das wäre nur 
verwendbar, wenn du die Pins DP und DM mit einem zweiten USB Kabel 
verbinden würdest.

Der ST-Link Adapter enthält drei Komponenten gleichzeitig:

a) Ein Debugger für SWD
b) Ein USB-UART Adapter für eine serielle (also USART) Schnittstelle
c) Ein USB Speicherstick Emulator zum Hochladen von Firmware

Du willst b nehmen. Also musst auf dem Mikrocontroller die damit 
verbundene USART Schnittstelle programmieren.

Schaue ins User-manual 
https://www.st.com/resource/en/user_manual/dm00231744-stm32-nucleo32-boards-mb1180-stmicroelectronics.pdf

"Thanks to SB2 and SB3, the USART interface of STM32 available on PA2 
(TX) and PA15 (RX), can be connected to ST-LINK/V2-1."

Diese beiden Brücken sind standardmäßig ON.

von USB_CDC (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Du bist da mit CDC_IRGENDWAS auf dem völlig falschen Weg. Das wäre
> nur
> verwendbar, wenn du die Pins DP und DM mit einem zweiten USB Kabel
> verbinden würdest.

Ok, dann habe ich mich wohl geirrt.

> Der ST-Link Adapter enthält drei Komponenten gleichzeitig:
>
> a) Ein Debugger für SWD
> b) Ein USB-UART Adapter für eine serielle (also USART) Schnittstelle
> c) Ein USB Speicherstick Emulator zum Hochladen von Firmware
>
> Du willst b nehmen. Also musst auf dem Mikrocontroller die damit
> verbundene USART Schnittstelle programmieren.
> Schaue ins User-manual
> 
https://www.st.com/resource/en/user_manual/dm00231744-stm32-nucleo32-boards-mb1180-stmicroelectronics.pdf
>
> "Thanks to SB2 and SB3, the USART interface of STM32 available on PA2
> (TX) and PA15 (RX), can be connected to ST-LINK/V2-1."
>
> Diese beiden Brücken sind standardmäßig ON.

Dann muss ich mich entscheiden, ob es sinnvoller ist die USB - Pins oder 
die virtuelle Schnittstelle zu verwenden. Vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.