Próbuję komunikować się z urządzeniem peryferyjnym UART, używając DMA zarówno dla RX, jak i TX. Używam biblioteki HAL, która jest dostarczana przez ST (generowane za pomocą STCubeMX).STM32F4 Obsługa błędu urządzenia peryferyjnego podczas wykonywania transferu DMA (RX)
Mam do czynienia z kanałem UART z 1,5MBaud - więc aby nie stracić żadnych danych, skonfigurowałem DMA w trybie bezpośrednim, z okrągłym buforem i obsłużyłem przerwań half-transfer, aby zająć się danymi i utrzymuj DMA online, aby uzyskać więcej danych.
Problem polega na tym, że czasami widzę w rejestrze stanu UART, że bit Frame Error jest włączony, a czasami jest również włączona flaga błędu Overrun.
Potrafię obsłużyć utracone bajty (używając crc na pakietach strukturalnych), ale problem polega na tym, że urządzenie peryferyjne przestaje odbierać dane - ale DMA nie powoduje błędów ani nie zatrzymuje transferu.
Więc jeśli próbuję odebrać dane, a flaga jest w systemie zawiesza się.
Zobaczyłem, że HAL udostępnia funkcję __weak, która powinna obsługiwać UART_Error, ale nigdy nie jest wywoływana - a status w uchwycie HAL pozostaje normalny. tylko spojrzenie na rejestr może stwierdzić, że jest problem.
Jak wykrywać/obsługiwać tego typu błędy?
Dzięki