Forum: Mikrocontroller und Digitale Elektronik stm32f4 uart


von jumper (Gast)


Lesenswert?

Hallo zusammen,

ich bin Einsteiger was STM32 und CooCox betrifft und wollte zum 
Einarbeiten einfach mal über die serielle Schnittstelle (uart) Daten 
senden.

Leider funktioniert gar nichts. Als Grundlage verwende ich die 
Cube-Library, die aber wie ich finde sehr unübersichtlich ist.

Kann mir vielleicht jemand Hinweise geben was man alles konfigurieren 
muss bzw. einbinden muss??
Vielleicht kann mir jemand ein Beispielprogramm zu Verfügung stellen.

Bin für jeden Tipp dankbar.

Schöne Grüße,

von hp-freund (Gast)


Lesenswert?


von ... (Gast)


Lesenswert?

Ohne Cube geht es ganz einfach:

- Im RCC den gewuenschten USART einschalten.
- GPIO-Pins auf die alternate Funktionen konfigurieren.
- GPIO->MODER setzen
- USART TransmitEnable, ReceiveEnable und UE setzen
- USART Baudrateregister mit 'SYSCLK' / 'BAUDRATE' initialisieren

Ins USART->TDR ein 'U' schreiben.

Das doch nun wirklich nicht schwer...

von jumper (Gast)


Lesenswert?

Vielen Dank für die schnelle Antwort.

Dieses Tool ist wirklich eine enorme Erleichterung :)

Eine Frage habe ich trotzdem noch:
Die UART-Schnittstelle will trotzdem noch nicht funktionieren.
Welche Files müssen in CoIDE eingebuden werden??
Es kommt zwar keine Fehlermeldung, kann mir aber nicht vorstellen dass 
die main.c ausreicht.

Oder ist der Befehl falsch:

HAL_UART_Transmit_IT(&huart1, "TEST", 4);



Danke schonmal :)

von hp-freund (Gast)


Lesenswert?

Schau in den Ordner den das Tool erzeugt. Wenn Du die 
Standarteinstellung nicht verändert hast sind alle nötigen Dateien dort 
drin.

von jumper (Gast)


Lesenswert?

Ich habe alle notwendigen Files eingebunden, die LED's die ich ansteuern 
möchte funktionieren, aber die UART-Schnittstelle leider immer noch 
nicht.

Woran kann das liegen??
Nach dem initialisieren schreibe ich:

  if(HAL_UART_Init(&huart1) != HAL_OK)
  {
    // in case of Initiliazation Error */
    while(1)
    {
    }
  }

  HAL_UART_Transmit_IT(&huart1, "TEST", 4);

ist da was falsch dran?? In einem Beispielprogramm funktioniert das so.

Gruß,

von Bastler (Gast)


Lesenswert?

Schau doch mal nach was dieses "HAL_UART_Init(&huart1)" macht.

Es müsste ja alles enthalten sein wie weiter oben bereits erwähnt:
- Im RCC den gewuenschten USART einschalten.
- GPIO-Pins auf die alternate Funktionen konfigurieren.
- GPIO->MODER setzen
- USART TransmitEnable, ReceiveEnable und UE setzen
- USART Baudrateregister mit 'SYSCLK' / 'BAUDRATE' initialisieren

von hp-freund (Gast)


Lesenswert?

In welcher Form liegt dein stm32f4 vor?
Blank, Nucleo, Discovery?
Ist uart1 überhaupt frei?

jumper schrieb:
> if(HAL_UART_Init(&huart1) != HAL_OK)

Und das landet auch nicht in der Endlosschleife?

Da Du HAL_UART_Transmit_IT benutzt muss auch der Interrupt eingeschaltet 
und konfiguriert werden.

von ... (Gast)


Lesenswert?

Tja,

ohne Plan wird das auch mit HAL nuex.

Wenn man nicht weiss welche Register gesetzt werden muessen,
muss man wohl mal das DB befragen.

Soviele sind es ja nicht.

Wer HAL-Kram "schoen" findet, der soll ihn benutzen.
Der darf dann auch selber suchen...

von jumper (Gast)


Lesenswert?

Juhu es funktioniert :)

@ hp-freund: Vielen Dank für deine Hilfe, ich habe vergessen das Hackerl 
bei den globalen interrupts zu setzen.

Auch den anderen vielen Dank für die schnellen hilfreichen Antworten.

Schöne Grüße

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.