Forum: Mikrocontroller und Digitale Elektronik STM32 USART falsche Ausgabe Terminal


von hugo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ich brauche eure Hilfe,

Problem:
Ich sende einen String über den USART2 , leider empfängt das Terminal 
nur komische Zeichen.

Benutze folgendes Board:
STM32-P103

IDE: Eclipse

Mein Code:
http://www.pastebin.com/m1b23db21

Folgender String würd übertragen:
"Buffer Send from USART2 to USART1 using Flags"

Das Terminal empfängt aber das hier (siehe Bild)

In der stm32f10x_conf.h war schon HSE auf 8MHz eingestellt

#define HSE_Value    ((u32)8000000) /* Value of the External oscillator 
in Hz*/

Auf dem Board ist ein 8Mhz oscillator und ein kleiner "Uhrenquarz" 
aufgelötet.

Ich hab auch schon ein wenig im Forum gesucht, da lags es meisten an dem 
Takt muss aber nichts heissen.

Ich hoffe jemand hat ne Idee wie ich das lösen kann.

Vielen Dank schon Mal

Mfg Hugo

von ... (Gast)


Lesenswert?

sieht nach falscher baud rate aus.

von hugo (Gast)


Lesenswert?

Hi nur wie krieg ich die richtige Baudrate raus?

Mfg

von Georg (Gast)


Lesenswert?

Du rufst Clk_Init nicht auf

von hugo (Gast)


Lesenswert?

Hi , so hab jetzt Clk_Init() aufgerufen, nach RCC_HSEConfig(RCC_HSE_ON);

Zeile 55 -> http://www.pastebin.com/m727d0b53

Leider bekomme ich dieselbe Ausgabe im Terminal

Mfg

von sdv (Gast)


Lesenswert?

Sieht immer noch nach falscher Baudrate aus.

Gast

von hugo (Gast)


Lesenswert?

Ja du bist der 2. der mir das sagt, wie stell ich die den richtig ein, 
wie kriege ich die richtige raus.

Mfg

von Plan (Gast)


Lesenswert?

Hast Du schon mal die FWLib von STM angeschaut?
Dort gibt es 12 Demos über UART !

Damit sollte es kein Problem mehr sein die richtige Baudrate und andere 
Parameter ein zu stellen. Bei mir gehts auch und ich nutze 115200 Baud 
bei 8MHz HSI.

von hugo (Gast)


Lesenswert?

Hi,
ich hab mir die eben runtergeladen welche Zip-Datei enthält den ein 
USART Beispiel?
Das einzigste was ich gefunden hab war etwas zu RC-Calibration

Mfg

von Plan (Gast)


Lesenswert?

Auf dieser Seite:
http://www.st.com/mcu/devicedocs-STM32F103RB-110.html

Dieses ZIP Archiv:
http://www.st.com/stonline/products/support/micro/files/stm32f10x_fw_archive.zip

In dem Archiv gib es "um0427.zip"
Darin gibt es FWLib\examples\

von Georg (Gast)


Lesenswert?

Soweit ich mich erinnern kann, musst du bei USARTS auch die Clocks 
konfigurieren. Siehe USART_ClockInitTypeDef Struktur und 
USART_ClockInit!

von hugo (Gast)


Lesenswert?

Hallo, ich hab mir ein paar examples anguckt aber es bringt mich 
irgendwie nicht weiter. Liegt wahrscheinlich daran das ich das ich nicht 
verstehe was ich für den USART, für den Taktabschnitt, ändern muss.

@Georg
Diese Funtkionen gibt es nicht mehr, hab mir die Header und C-Datei für 
den USARt angeguckt die sind nicht mehr dabei.

Was ich nicht verstehe ist Clk_Init() -(hab ich aus dem Blink-Flash 
programm von ST kopiert)

Warum da in der initialisierung einmal der intere Clock HSI(8Mhz)
// 1. Cloking the controller from internal HSI RC (8 MHz)
RCC_HSICmd(ENABLE)
und danach der externe Clock HSE(8Mhz) mit
// 2. Enable ext. high frequency OSC
RCC_HSEConfig(RCC_HSE_ON)
aktiviert werden, was soll das bringen, liegt daran der Fehler?

Ich hab gar keien Idee, was ich an meinem Code anpassen muss.

Mfg

von hugo (Gast)


Lesenswert?

Sry für doppelpost kann aber leider nicht editieren.

Hab im Datenblatt rausgefunden das man die Wahl zwischen 3 Clock Sources 
hat :
HSE, HSI und Pll

dann gibt es noch eine zweite Clock-Quelle die ich hier aber nicht 
brauche.
Warum also werden den alle 3 aktiviert?

Und im Datenbaltt steht noch wenn man USB benutezen will muss man mit 
Hilfe des PLL auf 45 oder 72Mhz pushen, das wird bei mir auch gemacht 
das ist doch auch unnötig oder?

Kann mir vielleicht jemand Schritt für Schritt sagen was ich aktivieren 
muss und wie ich dann die richtige Baudrate bestimme?

Mfg

von hugo (Gast)


Lesenswert?

So hab den Code nochmal angepasst, terminal zeigt mir leider immer noch 
komische Zeichen.

Vielleicht hilft der angepasste Code bei der Fehlersuche, ich finde den 
fehler nicht :(

http://pastebin.com/m199a10bc

Mfg

von (prx) A. K. (prx)


Lesenswert?

hugo schrieb:

> Warum also werden den alle 3 aktiviert?

Der 8MHz HSI ist von Haus aus ohnehin aktiv, damit startet der 
Controller aus dem Reset. Routinen zur Taktsteuerung werden 
üblicherweise zuerst auf HSI schalten, bevor irgendwas an der PLL 
gedreht wird. Andernfalls sägt man den Ast ab auf dem man sitzt, wenn 
diese Routine nicht nur nach Reset sondern später auch noch aufgerufen 
wird.

HSE ist der Oszillator mit dem Quarz, ohne den gibt es keinen genauen 
Takt.

Die PLL ist nur nötig, wenn du die CPU nicht direkt mit dem HSE 
betreiben willst. Meist will man es schneller, jedenfalls nach den 
ersten Gehversuchen, und dann eben per PLL.

Anfangs empfiehlt es sich für UART-Betrieb, ohne PLL direkt per HSE zu 
arbeiten. Erst wenn das funktioniert, dann kommt der Schritt zur PLL.

Wenn du kein USB verwendest, dann kannst du dir eine Frequenz <= 72MHz 
frei aussuchen, bzw. so frei wie die PLL es zulässt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.