Elektroda.de
Elektroda.de
X
Elektroda.de
Computer Controls

[STM32][USB CDC] - Keine Verbindung

687 13
This content has been translated » The original version can be found here
  • Niveau 3  
    Ich besitze das STM32F411VET6 Board. Ich wollte ein USB-CDC-Projekt erstellen. Nach dem Kompilieren und dem Beginn der Fehlerbeseitigung, tritt bei der Verbindung zu uC mit RealTerm oder PuTTY ein Fehler auf. Ich suchte nach Möglichkeiten, es zu reparieren,
    aber nichts funktionierte.
    Er verbindet sich einmal, aber beim nächsten Versuch will er es nicht mehr tun.

    [STM32][USB CDC] - Keine Verbindung
  • Computer Controls
  • Computer Controls
  • Niveau 26  
    BlueDraco hat geschrieben:
    ... und vergrößern Sie die Größe des Stapels.

    In diesem Fall spielt es aus zwei Gründen keine Rolle:
    1. Standard STM Linker-Dateien platzieren einen Stapel am Ende des RAM, so dass der Stapel beliebig wachsen kann (oder andere Daten und UB schreiben) und keine eingegebenen Werte halten ihn auf. Der dort eingegebene Wert ist also nur für die hoffnungslose (zumindest in der mit openstm32 ausgestatteten Toolchain) Implementierung von _sbrk oder für den Abschnitt _user_heap_stack (NOLOAD) von rechnerischer Bedeutung, der auch nur höchstens verwendet wird, um eine Nachricht mit zu viel RAM-Belegung zu erhalten. Wie auch immer, ist es auch dumm anzunehmen, dass der Stapel und der Heap im gleichen Speicher liegen sollen und in einem Abschnitt platziert werden können.
    2. Auch wenn dieser Wert signifikant wäre, ist der Standardwert ausreichend für den von CubeMX generierten Code mit einem großen Überschuss.
  • Niveau 3  
    BlueDraco hat geschrieben:
    ... und vergrößern Sie die Größe des Stapels.

    Ich habe die Größe des Stapels in CubeMX erhöht, als ich ein Projekt von 0x400 auf 0x800 generiert habe und es hat nicht funktioniert.
  • Niveau 26  
    Raziel95 hat geschrieben:
    Ich habe die Größe des Stapels in CubeMX beim Erzeugen eines Projekts erhöht.
    Ich habe dir wohl geschrieben, es ist nicht wirklich die Größe des Stapels, weil es nichts wirklich beeinflusst. Das Erhöhen hat also den gleichen Effekt wie das Setzen eines Kommentars im Code.

    Was hast du im Geräte-Manager?

    Raziel95 hat geschrieben:
    und dem Beginn der Fehlerbeseitigung


    Aber stoppst du das Programm nicht?
  • Niveau 3  
    stmx hat geschrieben:
    Raziel95 hat geschrieben:
    Ich habe die Größe des Stapels in CubeMX beim Erzeugen eines Projekts erhöht.
    Ich habe dir wohl geschrieben, es ist nicht wirklich die Größe des Stapels, weil es nichts wirklich beeinflusst. Das Erhöhen hat also den gleichen Effekt wie das Setzen eines Kommentars im Code.

    Was hast du im Geräte-Manager?

    Raziel95 hat geschrieben:
    und dem Beginn der Fehlerbeseitigung


    Aber stoppst du das Programm nicht?


    Ich stoppe nicht. Ich klicke auf diesen grünen Pfeil und das Programm funktioniert und die COM-Diode auf der Platine blinkt.
    Der Geräte-Manager erkennt mein Gerät.
    [STM32][USB CDC] - Keine Verbindung
  • Niveau 18  
    Für dieses F103 muss der empfangende Rückruf den Puffer verarbeiten, bevor er die Steuerung übergibt. Auf diese Weise wird der Datenempfang durch den DMA ausgeschlossen. Ich weiß nicht, wie es bei deinem Prozessor ist, aber ich nehme an, dass es nicht besser gemacht wird. Ich spreche von dem von CubeMX generierten Code. Also gibt es hier vielleicht (?) ein Problem. Man weiß aber es nicht, weil du aussagst, als würdest du Worte sparen.
  • Niveau 3  
    Ich habe das TeraTerm-Terminal heruntergeladen und es funktioniert einwandfrei. Es kann an PuTTY- und RealTerm liegen, und nicht selbst an CubeMX und Platine.
    Ich werde jedoch sehen, wie es weitergehen wird.

    ex-or hat geschrieben:
    Man weiß aber es nicht, weil du aussagst, als würdest du Worte sparen.

    Ich verstehe nicht?
  • Niveau 26  
    ex-or hat geschrieben:
    Für dieses F103 muss der empfangende Rückruf den Puffer verarbeiten, bevor er die Steuerung übergibt.
    Der vom Cube generierte Code macht es.
  • Spezialist Mikrocontroller
    Die aktuelle CDC-Version von CubeMX bis F4 (nur) setzt die Stapelgröße zu klein. Wo sich der Stapel befindet, hängt von der Umgebung ab, z.B. in Keil CDC auf F4 mit dem Standardstapel stürzt zu 100 % ab.
    Teraterm verträgt die Trennung des Geräts bei geöffneter Klemme und reagiert korrekt auf deren Verbindung. Jedes andere Terminalprogramm gibt in diesem Fall auf.
    Das Übertragungsverfahren MUSS von einer USB-Unterbrechung oder von einer anderen Unterbrechung mit gleicher Priorität aufgerufen werden. Andernfalls wird das Gerät irgendwann in der Zukunft sicher abstürzen.
  • Niveau 26  
    BlueDraco hat geschrieben:
    Die aktuelle CDC-Version von CubeMX bis F4 (nur) setzt die Stapelgröße zu klein.
    Ich machte mir die Mühe und machte zwei Projekte für F103 und F446.

    Den Stapel stellen Sie in der Konfiguration für die Projektgenerierung ein. Die Standardwerte sind für F1 und F4 identisch.
    [STM32][USB CDC] - Keine Verbindung

    So ist es immer 1 kB 100 % ausreichend (ich gehe immer noch von Standardwerten aus).

    Beide Projekte habe ich kompiliert und getestet (mit Keil). Sie gehen ohne Probleme.

    BlueDraco hat geschrieben:
    Wo sich der Stapel befindet, hängt von der Umgebung ab.

    Ich stimme nicht zu - es kommt auf Linker/Scatter File + File Skripte an, in denen ein Vektor-Array definiert ist. In jeder Umgebung kann man einen Stapel (oder zwei) an einem Ort nach eigener Wahl einrichten.
  • Spezialist Mikrocontroller
    Ich habe auch kürzlich 2 CDC-Projekte durchgeführt. Das von F4 benötigte den Stapel zu vergrößern, ansonsten hing er sich auf.

    Die Standardform des Linker-Skripts hängt von der Umgebung ab. In Keil landet der Stapel standardmäßig nicht am Ende des Speichers.

    Natürlich haben Sie das Recht, mit den Fakten nicht einverstanden zu sein.
  • Niveau 26  
    BlueDraco hat geschrieben:
    Das von F4 benötigte den Stapel zu vergrößern, ansonsten hing er sich auf
    Man konnte dort etwas eigenes haben, was den Stapel gefressen hat.

    Wie ich gestern geschrieben habe, habe ich 2 Projekte auf F4 und F1 gemacht. Beide liefen sehr gut. Cube stellt standardmäßig für beide die gleichen Werte der Stapelgröße ein.

    BlueDraco hat geschrieben:
    Die Standardform des Linker-Skripts hängt von der Umgebung ab. In Keil landet der Stapel standardmäßig nicht am Ende des Speichers.
    Es landet nicht, aber diese 1024 Bytes reichen aus. Sie können nicht ausreichen, wenn die Funktionen des Programmierers viel Stapel verbrauchen.