STM32F2: USART empfängt nur ein Byte

Gast #3290350
Hallo!

Ich versuche gerade den USART des STM32F207 in betrieb zu nehmen.
Senden klappt ohne Probleme, das Empfangen jedoch nicht.

Es wird immer nur das erste Byte eines Datenstroms empfangen und meinem 
TX-Puffer hinzugefügt.

Eine Idee, woran das liegen kann?

Vielen Dank!

Grüße
Thomas
Gast
Kindergärtner schrieb:
> Zeile 42 natürlich.

Die lasse ich bewusst immer blank. :-P

Moritz M. schrieb:
> Idee: An deinem Code! :)

Gute Idee!

Moritz M. schrieb:
> Die Glaskugel wurde leider noch nicht erfunden.

Eine Glaskugel schon, aber keine die funktioniert! ;)

Moritz M. schrieb:
> Bitte Poste doch mal dein Projekt.

Projekt ist zuviel, aber die wichtigsten Zeilen.
Aus der Init:
1
...
2
  /* Enable the USARTx Interrupt */
3
  NVIC_InitStructure.NVIC_IRQChannel                    = HAL_USART6_IRQ;
4
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority  = 0;
5
  NVIC_InitStructure.NVIC_IRQChannelSubPriority         = 7;
6
  NVIC_InitStructure.NVIC_IRQChannelCmd                 = ENABLE;
7
  NVIC_Init(&NVIC_InitStructure);
8
...
9
  USART_6->CR1 |= USART_CR1_RXNEIE;
10
...
ISR:
1
void USART6_IRQHandler(void)
2
{
3
  unsigned char rxdata;
4
  uint32_t tmp_USART6_SR;
5
  uint32_t tmp_USART6_DR;
6

7
  tmp_USART6_SR = HAL_USART6_SR_REG;
8
  tmp_USART6_DR = HAL_USART6_DR_REG;
9
  Buffer_AddByte(pRXBuffer_USART6, tmp_USART6_DR);
10
  rxdata = true;
11

12
  return;
13
}
14
...
Gast
Th.Wüst schrieb:
> void USART6_IRQHandler(void)
> {
>   unsigned char rxdata;
Diese Zeile ist unnötig.

>   uint32_t tmp_USART6_SR;
>   uint32_t tmp_USART6_DR;
>   tmp_USART6_SR = HAL_USART6_SR_REG;
>   tmp_USART6_DR = HAL_USART6_DR_REG;
Diese Register finden sich nicht in der Doku des STM32F207. Was auch 
immer das bewirken soll.
>   Buffer_AddByte(pRXBuffer_USART6, tmp_USART6_DR);
>   rxdata = true;
Diese Zeile ist auch unnötig.
>   return;
Und die auch.
> }
Außerdem schön wie du den UART zwar einschaltes, aber nicht 
konfigurierst.
Gast
Kindergärtner schrieb:
> Diese Register finden sich nicht in der Doku des STM32F207. Was auch
> immer das bewirken soll.

USART6->SR & USART6->DR

Die Konfiguration habe ich weg gelassen, da das Senden korrekt 
funktioniert.
Somit sind Baudrate, Parity & Co richtig gesetzt worden. TE und RE sind 
aktiv.
Gast
Th.Wüst schrieb:
> USART6->SR & USART6->DR
Und wie sieht der C-Code dafür aus?
> Die Konfiguration habe ich weg gelassen, da das Senden korrekt
> funktioniert.
Und das impliziert dass das Empfangen auch korrekt funktioniert?
> Somit sind Baudrate, Parity & Co richtig gesetzt worden. TE und RE sind
> aktiv.
Na dann klappt ja alles.

Naja, ohne Code (in mehr als homöopathischen Dosen) und 
Oszilloskopbilder des Transfers kann dir keiner helfen.
Gast
Das Lesen vom SR-Register ist schuld!
Dazwischen war noch Code zum Auswerten der gesetzten Flags, den ich aber 
schon auskommentiert hatte.
Habe ich in der ISR nur
1
...  tmp_USART6_DR = HAL_USART6_DR_REG;
2
  Buffer_AddByte(pRXBuffer_USART6, tmp_USART6_DR);
 stehen, funktioniert das erfolgreiche Empfangen des kompletten 
Antwortpakets!

Nur warum ist das so? Was hat das mit dem SR-Register zu tun?
Und wie kann ich mit der Funktion USART6_IRQHandler die RX-Fehler (PE, 
FE, NE, ORE) auswerten, wenn das lesen vom RX-Register dazu führt, dass 
da Empfangen überhaupt nicht geht!?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.