diff --git a/platforms/nuttx/src/px4/stm/stm32f4/px4io_serial/px4io_serial.cpp b/platforms/nuttx/src/px4/stm/stm32f4/px4io_serial/px4io_serial.cpp index bb0c6a8d16..c86b67c73f 100644 --- a/platforms/nuttx/src/px4/stm/stm32f4/px4io_serial/px4io_serial.cpp +++ b/platforms/nuttx/src/px4/stm/stm32f4/px4io_serial/px4io_serial.cpp @@ -225,6 +225,9 @@ ArchPX4IOSerial::ioctl(unsigned operation, unsigned &arg) int ArchPX4IOSerial::_bus_exchange(IOPacket *_packet) { + // to be paranoid ensure all previous DMA transfers are cleared + _abort_dma(); + _current_packet = _packet; /* clear any lingering error status */ diff --git a/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp b/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp index fab13855c3..a640166e05 100644 --- a/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp +++ b/platforms/nuttx/src/px4/stm/stm32f7/px4io_serial/px4io_serial.cpp @@ -237,6 +237,9 @@ ArchPX4IOSerial::ioctl(unsigned operation, unsigned &arg) int ArchPX4IOSerial::_bus_exchange(IOPacket *_packet) { + // to be paranoid ensure all previous DMA transfers are cleared + _abort_dma(); + _current_packet = _packet; /* clear data that may be in the RDR and clear overrun error: */ diff --git a/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp b/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp index b6bd7e6414..1492a7fc19 100644 --- a/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp +++ b/platforms/nuttx/src/px4/stm/stm32h7/px4io_serial/px4io_serial.cpp @@ -275,6 +275,9 @@ ArchPX4IOSerial::ioctl(unsigned operation, unsigned &arg) int ArchPX4IOSerial::_bus_exchange(IOPacket *_packet) { + // to be paranoid ensure all previous DMA transfers are cleared + _abort_dma(); + _current_packet = _packet; /* clear data that may be in the RDR and clear overrun error: */