Liebes Forum,
ich programmiere einen STM32 und möchte über SPI mit einem Slave
(ade7912) kommunizieren. Verwende hierfür auch die stm32_library!
Mein Problem ist, dass manchmal/meistens der Master falsche Bytes
sendet. Es kommt nicht immer vor und daher fällt es mir so schwer den
Fehler zu finden. Jenachdem, was ich in meinem Code ändere, versendet
der Master manchmal die richtigen Bytes, aber meistens eben nicht. Und
mit Code-Änderung meine ich nicht bei der SPI-Initialisierung, sondern
einen Code-Teil, der nicht einmal etwas mit SPI zu tun hat.
Im unteren Teil findet ihr die Initialisierung der SPI und als Test habe
ich eine While-Schleife erstellt, in welcher Bytes mit laufender Numer
versendet werden sollen. Das heißt, die Bytes sollten folgende Werte
beinhalten: 0x00, 0x01, 0x02,... usw.
Im Anhang findet ihr ein Bild, was tatsächlich versendet wird!
In diesem Bild also: 0xD7, 0xF9, 0xCF, 0xFA, 0xC7, ...
Und beim nächsten mal Starten (debuggen) sind wieder andere Werte
vorhanden!!
Bitte um Hilfe! Bin für jeden Hinweis dankbar!
stip schrieb:> Jenachdem, was ich in meinem Code ändere, versendet> der Master manchmal die richtigen Bytes, aber meistens eben nicht. Und> mit Code-Änderung meine ich nicht bei der SPI-Initialisierung, sondern> einen Code-Teil, der nicht einmal etwas mit SPI zu tun hat.
Dann dürfte wohl einem durch Programmierfehler zerschossenen Heap oder
Stack eine gewisse Wahrscheinlichkeit zukommen.
Was passiert, wenn du alle Warnungen des Compilers einschaltest und ihn
alle Warnungen als Fehler behandeln läßt?
;o)
Ahnungslos schrieb:> Wie bewegst du NSS?
Ist im oberen geposteten Code-Teil nicht vorhanden, da ich es
übersichtlich darstellen wollte.
Ich mache es folgendermaßen:
In der angehängten Datei im Bild heißt die NSS-Leitung: "I1_CS"
Aber unabhängig von der NSS-Leitung und unabhängig vom Slave, sollten
vom Master zumindest die richtigen Bytes versendet werden....
Mein Verdacht war auch, dass wenn der SPI nicht richtig abgedreht wird,
dass es beim wieder einschalten zu Fehlern kommt. Wenn also zum Beispiel
während dem Senden die Verbindung abgedreht wird, weil ich mit dem
Debuggen aufhöre, dass im TX-Buffer falsche/alte Werte vorliegen und
diese dan beim nächsten Einschalten das Senden beeinflussen???
Bin um jeden Hinweis und um jede Idee dankbar!
stip schrieb:> Verwende hierfür auch die stm32_library!
Welche bitte?
Die Funktion SPI_SendData8(..) finde ich nicht in Libraries,
ist das was Selbstgeschriebenes? Wenn ja, dann zeige sie bitte.
OMG schrieb:> stip schrieb:>> Verwende hierfür auch die stm32_library!>> Welche bitte?>> Die Funktion SPI_SendData8(..) finde ich nicht in Libraries,> ist das was Selbstgeschriebenes? Wenn ja, dann zeige sie bitte.
verwende folgende Library: STMF32F30x_StdPeriph_Driver
Hier ist auch die Funktion SPI_SendData8() dabei.
Hier ein Ausschnitt aus der Library:
1
/**
2
* @brief Transmits a Data through the SPIx peripheral.
3
* @param SPIx: where x can be 1, 2, 3 or 4 to select the SPI peripheral.
Da wirst du wohl mal dein ganzes Programm zeigen müssen,
oder ein kleines daraus abgeleitetes welches den Fehler
reproduzierbar macht.
So wie es aussieht wirst du einen Programmierfehler haben
den du uns noch nicht gezeigt hast.
Denke beim Posten von Code daran:
-----------------------------------------------
Wichtige Regeln - erst lesen, dann posten!
............
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
-----------------------------------------------