Hallo,
Ich schlage mich gerade mit folgendem Problem herum:
Mehrere Konten hängen an einer Art LIN-Bus. Die Daten dort sind
normalerweise alle mit 7bit Odd-Parity gesendet. Ein neues Paket
hingegen wird mit 0xAA (Even-Parity) gestartet, was bei den Empfängern
einen Paritätsfehler auslösen soll. Die Idee ist dabei, dass die Knoten
den normalen Empfangsinterrupt deaktivieren können und die HW erst beim
Detektieren des Paritätsfehlers einen Interrupt auslöst und damit das
Empfangen startet.
Bei der Implementation des Empfängers auf einem STM32F030 habe ich dafür
während des Wartens RXNEIE deaktiviert und PEIE aktiviert. Allerdings
bekomme ich jetzt gar keine Interrupts von der UART mehr. Sind RXNEIE
und PEIE aktiviert bekomme ich Interrupts und der Paritätsfehler wird
auch angezeigt.
Laut Datenblatt (RM0360 Reference manual, z.B. Diagramm Seite 627)
sollte nach meinem Verständnis der PE Interrupt auch ohne RXNEIE kommen.
Hat jemand eine Idee, oder den gleichen Effekt beobachtet?
Anbei die Uart-Routinen (eine Mischung aus STM32CubeMx und meinem Zeugs,
um mit CMSIS und HAL warm zu werden ;)).
Paritätserkennung funktioniert nicht (Zeile 17):
1 | const uint32_t RECEIVER_WAIT = USART_CR1_UE | USART_CR1_RE | USART_CR1_PEIE;
|
Paritätserkennung funktioniert (Zeile 17):
1 | const uint32_t RECEIVER_WAIT = USART_CR1_UE | USART_CR1_RE | USART_CR1_PEIE | USART_CR1_RXNEIE;
|