STM32F1 mit cubemx: printf über virtual serial port ausgeben

OP #4427132
Lesenswert?
• ▲
▼
Ich habe heute angefangen, mir den/die/das STM32cubeMx anzuschauen. Als 
Entwicklungumgebung nutze ich Keil Uvision 5.

Als erstes wollte ich etwas vermeintlich einfaches machen: Datenausgabe 
per printf über den virtuellen seriellen port per USB.

Leider scheint das ganze doch nicht straightforward zu sein - gibt es 
schon eine fertige Lösung?

Hier stecke ich fest:

- CubeMX hat mir  brav den Initialisierungscode generiert, so dass mein 
Controller als entsprechendes USB-Device gefunden wird.

- Danach habe ich versucht, mit "CDC_Transmit_FS" Strings zu 
verschicken. Die Funktion scheint fehlerhaft zu sein, denn 
"hUsbDevice_0" kann nicht initialisiert werden. Das konnte ich durch 
manuelle initialsierung der Variable beheben.

- Um printf umzulenken, muss man in der Keil-Lib "fputc" überladen. 
Funktioniert so weit.

- Leider habe ich feststellen müssen, dass das CubeMX USB_CDC_IF keinen 
vernünftigen Ringbuffer zur Verfügung stellt.

-> keine Lust mehr...
OP #4427296
Lesenswert?
• ▲
▼
Nachtrag, falls jemand ähnliche Probleme hat:

1) Habe den pragmatischen Weg genommen und mit sprintfs in einen string 
geprintent - dann Blocktransfer

2) CubeMX fängt einige Nullpointer nicht ab, was zu einer Exception 
führt wenn das USB-Interface noch nicht initialisiert ist.

Fix:

in usbd_cdc_if.c:

1
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
2
{
3
  uint8_t result = USBD_OK;
4
  /* USER CODE BEGIN 7 */ 
5
   hUsbDevice_0 = &hUsbDeviceFS;
6
  
7
  if (hUsbDevice_0->pClassData) {
8
    USBD_CDC_SetTxBuffer(hUsbDevice_0, Buf, Len);   
9
    result = USBD_CDC_TransmitPacket(hUsbDevice_0);
10
  }
11

12
  /* USER CODE END 7 */ 
13
  return result;
14
}

So wird nur dann gesendet, wenn das USB-Device initialisiert ist.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.