STM32f0xx UART

Gast #3428869
Lesenswert?

Hallo Leute. Ich bin echt ratlos, desswegen wende ich mich an euch.
Ich habe 2 Boards mit je einem STM32F051K4U6 Kontroller, die ich mit 
RS485 UART verbinden muss.
Ich möchte auf dem einen Input Pins einlesen und auf dem anderen die 
Signale als Output ausgeben.
Als RS485 Anbindung ist je ein MAX-3078 EESA im Einsatz.
Nun hab ich zum Test zwei Firmware, eine zum senden und eine zum 
empfangen.
Diejenige die sendet sollte in Ordnung sein, ich hab am MAX-3078 des 
Empfängerboards das Signal mit dem Oszilloskop messen können.

Aber der Empfänger verarbeitet das Signal nicht weiter.
Hier der Teil bei dem ich nicht sicher bin:
1
  while (1)
2
  {
3
  GPIO_WriteBit(RS485_DIR,Bit_RESET);
4
  
5
  while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET)
6
  {}
7

8

9
    
10
if(USART_ReceiveData(USART2) == 'X')
11
        {    
12
          GPIO_WriteBit(Output1,Bit_SET);
13
          GPIO_WriteBit(Output2,Bit_SET);
14
        }
15
    else
16
        {
17
          GPIO_WriteBit(Output1,Bit_RESET);
18
          GPIO_WriteBit(Output2,Bit_RESET);
19
        }  
20
 }
21
}
Die ganzen Firm's im Anhang.
Vielen Danke für Tipps!
Angehängte Dateien:
Gast #3428928
Lesenswert?

>RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
>       ^                      ^

Fällt man immer wieder gerne drauf rein;)

Wieso sind die Leute eigentlich inzwischen zu blöd eine

Seriell_Senden_USART.txt

als

Seriell_Senden_USART.c

zu posten?

Scheiss Copy and Paste Kids.
Gast #3429173
Lesenswert?

Hallo A. K danke für den Tipp hab ich echt übersehen. Nur leider hats 
auch nichts gebracht. Die Messung funktionierte wirklich. Desswegen 
müsste der Fehler doch in der while Schlaufe des EMpfängers sein? Leider 
habe ich das Oszilloskop natürlich nicht zu Hause. Fische also 
regelrecht im trüben. Hab jetzt aber viele Möglichkeiten ausprobiert, 
ohne Erfolg..
#3429489
Lesenswert?

Du hast in beiden Quellcodes den gleichen Fehler:
RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

Du behauptest aber dein Senden würde funktionieren auch mit dem Fehler. 
Das glaube ich aber nicht.
Sind die Frequenzen von beiden Boards richtig eingestellt? Außerdem 
würde ich mit Interrupts arbeiten, damit das Hauptprogramm nicht immer 
blockiert ist.
Was heißt "der Empfänger verarbeitet das Signal nicht weiter"? Beschreib 
doch mal den Fehler genauer.
#3429532
Lesenswert?

A. K. schrieb:
> Für den Anfang ist so ein Testcode schon ok. Erst wenn das funktioniert,
> sollte man sich Interrupts widmen.

Du hast Recht, für den Anfang ist es so besser.

Jay schrieb:
> Afair muss der RX Pin als Input Float und nicht AlternateFunction
> definiert sein.

Alternate Function ist richtig. daran liegt es nicht.


Hast du auch richtig verdrahtet? PA2 an PA3?
Warum probierst du es nicht mir einem Board? einfach einen Jumper auf 
PA2 und PA3 stecken. Dann kannst du schonmal ausschließen das es am Code 
liegt.

Außerdem hab ich eine Vermutung. in deiner system_stm32f0xx.c ist eine 
Frequenz von 25 MHz eingestellt. Dein Board läuft aber mit 8 MHz. Zeig 
mal die Datei.
#3429552
Lesenswert?

Dann scheint beides zu funktionieren. Ich benutze auf jeden Fall AF beim 
STM32F0 und das geht.
Ich hatte es mal so verstanden, das man Input als reinen Input Pin 
nimmt. Output als Output und AF immer dann wenn spezielle Funktionen 
gewünscht sind, z.B. Usart.

Ist natürlich schwierig, wenn kein AF beim STM32F1 verfügbar ist. Hab 
bisher nur mit F0 und F4 gearbeitet und dort gibts das.
Gast #3429638
Lesenswert?

>AF-Input braucht kein Mensch, weil das Input-Signal in jedem Fall zum
>AF-Modul geroutet wird.

Beim STM32F0 stimmt das leider nicht. Du musst den GPIO-Pin auf 
Alternate Function umstellen, auch wenn er Input ist. Ich hab noch nicht 
alles ausprobiert, aber beim USART ist das definitiv so.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren