Hallo,
ich habe hier ein STM32 Discovery Board (CPU: STM32F103RB).
Versuche den Uart1 zum Laufen zu bringen, doch leider kommt an dem
angeschlossenen USB->Serial Konverter nichts an. PA9 -> RX und PA10-> TX
Sourcecode:
stm32uart schrieb:> Der STM läuft mit 24Mhz.
Sicher? In deinem Code wird die PLL nicht konfiguriert. Wo ist z.B.
"SystemInit()"?
> Das komische ist es kommt überhaupt nichts an....
Wie hast du das verifiziert? Nur mit dem Adapter oder mit einem Oszi?
Ich denke, die Baudrate ist einfach so falsch, dass der Adapter alles
ignoriert.
Michael Frangenberg schrieb:> Sicher? In deinem Code wird die PLL nicht konfiguriert. Wo ist z.B.> "SystemInit()"?
Und wo sind die Clock Freigaben? Anbei mal ein bisschen Code dafür, hier
wird USART1 auf PortB 6 und 7 initialisiert (und dieser Code läuft auf
dem VL Discovery):
Hallo,
danke für die Hilfe. Mit dem Code von Matthias kommt nun zumindest ein
Zeichensalat an.
Hatte mich beim Umsetzen an dem
http://visualgdb.com/tutorials/arm/stm32/uart/ Tutorial orientiert, da
wurde dies mit der Clock und dem Port anderst dargestellt.
SystemInit muss nicht aufgerufen werden dies wird wohl im Hintergrund
von der Library übernommen. Laut Datenblatt von ST sollte der UART1 doch
auf Port A liegen? Er läuft aber nur auf Port B?
Liege ich richtig in der Annahme das ich jetzt noch die Baudrate
"ausrechnen" muss damit diese mit den 24Mhz läuft?
Du kannst auch die neue HAL von St verwenden. Da kannst du die Hardware
sogar Grafisch konfigurieren (Cube-MX). Und er aktiviert die benötigten
Clocks.
Die neue HAL berechnet die Vorteiler selbst. Hier musst du vermutlich
anhand der UART-Clock die Parameter berechnen. Du kannst die IP-Pins an
unterschiedlichen Positionen legen, das musst du auch mappen.
Btw. Cube-MX macht manchmal noch ein paar Fehler. Z.B. wird der PLL
nicht immer richtig konfiguriert (oder ich bedienen den falsch)
stm32uart schrieb:> Es lag wirklich nur am Port. Clock_init kann man komplett weg lassen und> er läuft trotzdem....
Es ist möglich, das es hier Unterschiede in den verschiedenen Startup
Codes gibt. Mein Code ist für Atollic Lite und evtl. machen andere
Umgebungen andere Setups bzw. initialisieren diverse Clocks bereits. Ich
mach immer auf sicher :-)
Matthias Sch. schrieb:> stm32uart schrieb:>> Es lag wirklich nur am Port. Clock_init kann man komplett weg lassen und>> er läuft trotzdem....>> Es ist möglich, das es hier Unterschiede in den verschiedenen Startup> Codes gibt. Mein Code ist für Atollic Lite und evtl. machen andere> Umgebungen andere Setups bzw. initialisieren diverse Clocks bereits. Ich> mach immer auf sicher :-)
Gibt es für die ganzen Befehle eine brauchbare Doku?
VisualGDB scheint CMSIS von ST zu nutzen, jedoch listet die "Doku" nur
alle Befehle auf ohne jegliche Beschreibung wo für was Hand angelegt
werden muss.
Auf der anderen Seite gibt es noch die "Programming PDFs" von ST, es
wird grob beschrieben wie die Peripherie programmiert werden muss aber
es gibt keinen Bezug zur Library.
Als Anfänger ist es wirklich schwer hier die richtigen Funktionen etc.
herauszupicken. Würde fast schon sagen ohne Tutorials nicht möglich.
Beim AVR war das einfacher, dort gab es in der Perihperie Beschreibung
direkt konkrete Funktionen welche benutzt werden konnten....
stm32uart schrieb:> Gibt es für die ganzen Befehle eine brauchbare Doku?> VisualGDB scheint CMSIS von ST zu nutzen, jedoch listet die "Doku" nur> alle Befehle auf ohne jegliche Beschreibung wo für was Hand angelegt> werden muss.
Da ich mittlerweile Coocox nehme, greife ich oft auf die 'Popup' Hilfe
zurück, die beim Eintippen erscheint. Wenn da nicht das richtige bei
ist, schaue ich mir die 'peripherie'.h oder .c Dateien, die sowieso im
Projekt drin sind, nach. Also z.B. 'stm32_adc.h' oder 'stm32_rcc.c'.
Um aber die Register im Einzelnen zu kapieren, wirst du um das F1
Reference Manual nicht drumrum kommen.