STM32 USB Endpunkte

Gast #5916410
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.
Gast #5917812
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.
Gast #5996700
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.
#5996716
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.
Gast #5996721
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 :-)
Gast #5996879
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren