STM32 L471 SPI3 komplett resetten

OP #5601594
Hallo,

ich hätte mal ne Frage zu einem "kompletten" SPI-Reset.

Ich nutze bei einem STM32L471 die SPI3 im Full-Duplex mit Hardwaree NSS 
Signal "disabled".

Die SPI-Kommunikation zum Master läuft via DMA. Daten werden alle 6 ms 
vom Master gesendet.

Ein CS-Signal geht an einen Ausgangspin und wird dort via IRQ 
ausgewertet.

Wenn am Ende der Kommunikation der IRQ am CS ausgelöst wird, dann werden 
die empfangenen Daten ausgewertet (z.B. CRC-Prüfung), dann in ein 
anderes Array kopiert und mit der SPI1 als Full-Duplex-Master zu einem 
Feldbus-Prozessor geschickt. Dieser setzt diese Daten dann auf den 
Feldbus um bzw. liefert Ausgangsdaten vom Feldbus (über API-Funktionen 
die vom Feldbus-Prozessor-Hersteller kommen).

Gibt es auf dem Feldbus keine Probleme, dann läuft das alles problemlos. 
Gibt es auf dem Feldbus Probleme, dann haben die aufgerufenen Funktionen 
Timeouts, die länger sind als die "Wartezeit" für die nächste 
SPI-Kommunikation zu meinem SPI-Master aus SPI3.

Dort werden dann die empfangenen Daten "versetzt"  im Empfangsarray 
angezeigt.

Wenn es beim Feldbus-Prozessor keine Probleme mehr gibt, dann 
"verschwindet" dieser Versatz nicht mehr, obwohl ich bei erkannten 
Fehlern im CS-IRQ folgendes ausführe:

    if (hspi3.ErrorCode != HAL_SPI_ERROR_NONE)
    {
        __HAL_SPI_CLEAR_OVRFLAG(&hspi3);
        __HAL_SPI_CLEAR_MODFFLAG(&hspi3);
        __HAL_SPI_CLEAR_FREFLAG(&hspi3);
    }
    HAL_DMA_Abort(&hdma_spi3_rx);
    HAL_DMA_Abort(&hdma_spi3_tx);
    HAL_DMA_Abort_IT(&hdma_spi3_rx);
    HAL_DMA_Abort_IT(&hdma_spi3_tx);

    HAL_SPI_Abort_IT(&hspi3);
    HAL_SPI_Abort(&hspi3);
    HAL_SPI_AbortCpltCallback(&hspi3);
    HAL_SPIEx_FlushRxFifo(&hspi3);
    HAL_SPI_DeInit(&hspi3);
    MX_SPI3_Init();

Jetzt hab ich schon gelesen, dass bei Nutzung des HW-NSS eine steigende 
Flanke an diesem PIN dis SPI komplett zurück setzt. Ich habe aber noch 
nicht raus gefunden, wie ich das machen kann, wenn ich die HW-NSS nicht 
nutze.

Ich arbeite mit der HAL von STM, vielleicht könnt Ihr mir hier noch 
einen Tip geben?

Grüße
Volker

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.