Forum: Mikrocontroller und Digitale Elektronik STM32 USB Endpunkte


von STM32 (Gast)


Lesenswert?

Hallo,

ich bräuchte einmal Hilfe bei dem Umgang mit der USB-Bilbiothek von 
ST-Micro.

Es findet sich dort der Endpoint-Typedef:
1
typedef struct
2
{
3
uint8_t   num;            
4
uint8_t   is_in;          
5
uint8_t   is_stall;       
6
uint8_t   type;           
7
uint8_t   data_pid_start; 
8
uint8_t   even_odd_frame; 
9
uint16_t  tx_fifo_num;   
10
uint32_t  maxpacket;     
11
uint8_t   *xfer_buff;    
12
uint32_t  dma_addr;       
13
uint32_t  xfer_len;       
14
uint32_t  xfer_count;    
15
}USB_OTG_EPTypeDef;

Dummerweise weiß ich nicht, wo ich diese Struktur in meiner 
USBH_HandleTypeDef wieder finde (USB-OTG)

Dort gibt es nämlich nur den EP_Descriptor
1
typedef struct EndpointDescriptor
2
{
3
  uint8_t   bLength;
4
  uint8_t   bDescriptorType;
5
  uint8_t   bEndpointAddress;   
6
  uint8_t   bmAttributes;       
7
  uint16_t  wMaxPacketSize;    
8
  uint8_t   bInterval;         
9
}
10
USBH_EpDescTypeDef;

Also die doofe Frage, wie komme ich an die offenbar vorhandenen 
zusätzlichen Inhalte des Enpointes heran, wo liegt die Adresse dieser 
Daten.

von Jim M. (turboj)


Lesenswert?

Schau Dir mal lieber vorhandenen Beispielcode an.

USB Host ist nicht-trivial zu implementieren. Die Endpoints z.B. muss 
man via Endpoint Deskriptor(en) vom Device abfragen.

von Guido Körber (Gast)


Lesenswert?

Die Strukturen für USB in den STM32 Libraries sind grausam…

Ich habe da mittlerweile etliche Teile umgeschrieben, oder komplett 
ersetzt.

Der Endpoint Descriptor hat nichts mit der ersten Struktur zu tun, der 
ist Teil der Desriptoren, die das USB Gerät liefert, um dem Host zu 
deklarieren was es ist und wie es bedient wird.

Die erste Struktur müsste irgendwo in der USBD_Handle - Struktur mit 
drin sein und das mehrfach.

von NichtWichtig (Gast)


Lesenswert?

Sind die mit CubeMX erzeugten USB Beispiele brauchbar?

von Guido Körber (Gast)


Lesenswert?

NichtWichtig schrieb:
> Sind die mit CubeMX erzeugten USB Beispiele brauchbar?

Als abschreckendes Beispiel…

Man kann die als Basis nehmen, um dann was Ordentliches draus zu machen.

von NichtWichtig (Gast)


Lesenswert?

Guido Körber schrieb:
> NichtWichtig schrieb:
>> Sind die mit CubeMX erzeugten USB Beispiele brauchbar?
>
> Als abschreckendes Beispiel…
>
> Man kann die als Basis nehmen, um dann was Ordentliches draus zu machen.

Immerhin läßt sich per CubeMX  ein BluePill dazu bewegen per USB Daten 
via ACM an einen LinuxPC zu schicken ohne das man eine Zeile Code 
schreiben muß.
Nee halt, CDC_Transmit_FS(...) braucht es schon das cutecom was anzeigt.

Die HAL scheint schon heftig aber man kann zumindest im lauffähigen Code 
recherchieren.

von Benedikt S. (benedikt_s)


Lesenswert?

NichtWichtig schrieb:
> Immerhin läßt sich per CubeMX  ein BluePill dazu bewegen per USB Daten
> via ACM an einen LinuxPC zu schicken ohne das man eine Zeile Code
> schreiben muß.
> Nee halt, CDC_Transmit_FS(...) braucht es schon das cutecom was anzeigt.
>
> Die HAL scheint schon heftig aber man kann zumindest im lauffähigen Code
> recherchieren.

Hat du einen link zu einem Beispiel, das ich mit mal angucken kann.

von NichtWichtig (Gast)


Lesenswert?

Öhm ..nööö

CubeMX anwerfen und unter Connectivity USB aktivieren.
In Middleware USB_DEVICE dann oben in CLASS VirtualComPort einstellen 
und ab dafür.

Nach etwas Suchen dann die genannte Transmit Function gefunden und heute 
.. siehe da .. cutecom empfängt mein sekündlich gesendetes Päckchen am 
angesteckten LinuxPC :-)

von Niklas Gürtler (Gast)


Lesenswert?

Benedikt S. schrieb:
> Hat du einen link zu einem Beispiel, das ich mit mal angucken kann.

Eine andere Möglichkeit:

USB-Tutorial mit STM32

von Stefan F. (Gast)


Lesenswert?

NichtWichtig schrieb:
> Sind die mit CubeMX erzeugten USB Beispiele brauchbar?

Sie funktionieren. Zumindest die, die ich ausprobiert habe. Der Code ist 
allerdings italienischer Spaghetti Style.

von Stefan F. (Gast)


Lesenswert?

Benedikt S. schrieb:
> Hat du einen link zu einem Beispiel, das ich mit mal angucken kann.

http://stefanfrings.de/stm32/stm32f1.html#vcphal

Direkt darunter findest du ein anderes Beispiel (von W.S.), das in die 
umgekehrte Richtung extrem ist: Alles in einer Datei und direkte 
Registerzugriffe über Hex-Adressen.

Beide Methoden funktionieren und sind zu Recht umstritten. Wenn für Dich 
C++ in Frage kommt, schau Dir das Beispiel von Niklas Gürtler an: 
https://www.mikrocontroller.net/articles/USB-Tutorial_mit_STM32

Das gefällt mir Stil-Mäßig noch am besten, obwohl ich es nie so ganz 
durchblickt habe.

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.