Ich fürchte, dass deine Alternate-Function Einstellung falsch ist.
// Definition von GPIO A Pin 2 und 3 als alternative Funktion und PA5 als Output
Dein Code stellt nichts für PA5 ein.
// Definition von GPIO A Pin 2 und 3 als alternative Funktion
AF5 (Clock und MOSI für SPI 1)
Schau mal in den Anhang, welche Funktion AF5 bei diesen Pins ist. Wolltest du nicht den USART2 benutzten? Das wäre AF7. In den folgenden Zeilen stellst du AF7 ein.
Falsche Kommentare sind schlimmer als gar keine Kommentare!
Ich gebe dir mal ein Beispiel, wie man den Code für die Konfiguration der I/O Pin besser lesbar macht:
Hier sieht man direkt die Nummer des AF Modus, in diesem Fall 14.
Das MODIFY_REG Marko hat 3 Parameter:
Register
Bitmaske, legst fest welche Bits du einstellen willst
Der konkreten Wert für diese Bits. Wenn du mehrere Bits setzen willst, kannst du das wie oben mit der 14 machen, oder indem du mehrere Bits mit + oder | kombiniert. Angenommen ich wollte im MODER Register Bit 0 und 1 setzen, dann so:
Sind die zwei Kommentar-Zeilen (line 5 and 8) wirklich gewuenscht?
Th.
Dort und an einigen anderen Stellen habe ich wohl vergessen die
Kommentare zu löschen ^^ Ich hab viel hin und her gelöscht und
kommentiert. Danke für den Hinweis.
Ich fürchte, dass deine Alternate-Function Einstellung falsch ist.
// Definition von GPIO A Pin 2 und 3 als alternative Funktion und PA5 als Output
Dein Code stellt nichts für PA5 ein.
// Definition von GPIO A Pin 2 und 3 als alternative Funktion
AF5 (Clock und MOSI für SPI 1)
Schau mal in den Anhang, welche Funktion AF5 bei diesen Pins ist.
Wolltest du nicht den USART2 benutzten? Das wäre AF7. In den folgenden
Zeilen stellst du AF7 ein.
Falsche Kommentare sind schlimmer als gar keine Kommentare!
Ich gebe dir mal ein Beispiel, wie man den Code für die Konfiguration
der I/O Pin besser lesbar macht:
1
>// PA11 = USB D-, alternate function 14 push/pull
Hier sieht man direkt die Nummer des AF Modus, in diesem Fall 14.
Das MODIFY_REG Marko hat 3 Parameter:
Register
Bitmaske, legst fest welche Bits du einstellen willst
Der konkreten Wert für diese Bits. Wenn du mehrere Bits setzen
willst, kannst du das wie oben mit der 14 machen, oder indem du mehrere
Bits mit + oder | kombiniert. Angenommen ich wollte im MODER Register
Bit 0 und 1 setzen, dann so:
Die Baudrate musst du schon noch einstellen, auskommentiert kann das
nicht funktionieren.
// Prozessor-Frequenz (Hier: 16.000.000 Hz)
Ist das so? Im Schaltplan sehe ich einen 8 MHz Quarz.
Überprüfe das Ausgangssignal mit einem Oszilloskop oder einen Logic
Analyzer. Dann siehst du sofort, ob die Baudrate stimmt.
Hallo,
erstmal danke für die ausführliche Antwort.
Das mit den Kommentaren war Käse, da daurauf ich nächstesmal.
PA5 können wir erstmal vergessen. Ziel war es PA2 und PA3 als AF7 zu konfigurieren für USART2.
Das mit MODIFY_REG ist eine Verbesserung, das behalte ich im Hinterkopf für später. Ich möchte erstmal, dass es läuft ^^
Die Baudrate ist drin, trotzdem funktioniert das irgendwie nicht so, wie gewollt. Ich habe ein kleines Oszilloskop, welche Pinne müsste ich messen, damit ich die Prozessorfrequenz messen kann?
Ich habe den Code
geändert auf USART1 und es hat geklappt.
Dann ändere ihn lieber noch einmal - und zwar dahingehend, daß du sowas wie E/A-Routinen und die dazu nötigen Initialisierungen aus main verbannst und sowas in einer separaten Quelle anordnest. Treiber für Kommunikationskanäle, Displays, Tasten, I2C und anderes Gedöns solcher Art gehören in jeweils separate Dateien und sollen eine gut überlegte Schnittstelle haben, damit man beim Programmieren sich nicht in einem Code-Urwald verläuft.
Ein gewisses Maß an Ordnung muß sein, auch wenn es dem einen oder anderen am Anfang vielleicht als übertrieben erscheint.
// Alle Pins werden mit der schnellsten Geschwindigkeit betrieben
Nur nebenbei: Alle Pins nach Möglichkeit mit der langsamsten Gechwindigkeit betreiben. Geringe Flankensteilheit => geringe Störstrahlung.
Hohe Schaltgeschwindigkeit der Ausgangspins wird erst ab dem MHz-Bereich notwendig bzw. sinnvoll. Beispielsweise für schnelles SPI oder ext. RAM per FSMC.
Genaue Angaben finden sich im Datenblatt.
// Alle Pins werden mit der schnellsten Geschwindigkeit betrieben
Nur nebenbei: Alle Pins nach Möglichkeit mit der langsamsten
Gechwindigkeit betreiben. Geringe Flankensteilheit => geringe
Störstrahlung.
Hohe Schaltgeschwindigkeit der Ausgangspins wird erst ab dem MHz-Bereich
notwendig bzw. sinnvoll. Beispielsweise für schnelles SPI oder ext. RAM
per FSMC.
Genaue Angaben finden sich im Datenblatt.