I am working with STM32F7 mcu running at 160 MHz, I am also running UART at 160 MHz in interrupt mode to receive data, but in DMA mode to send data. My program also runs 3 SPI and 1 I2C in DMA mode to receive data (every ~1ms), I am running my code bare metal (No RTOS). I read data, create large buffer (around 1900 bytes) and send it every 30 ms at baud rate 1516800.
After testing data transmition via UART, it worked. Now I wanted to implement a feature: Read data on I2C and SPI and send via UART only when received correct command via UART_IT mode (Because I ran out of DMA channels). And here is my question, I tried sending 12 bytes of data (command + payload + crc) with same baudrate from PC to my device and read it with UART_IT, and most of the time it worked, but sometimes I received not full packet (10 bytes out of 12, 4 out of 12 etc.). Then I tried to always receive only 1 byte instead of all 12 and fill temp buffer and process it when it is full, but this gave same results.
I come to conclusion, that my baudrate is too fast to handle for UART interrupt mode, but is there any solution to this problem? Is my conclusion correct? How can I overcome this problem and always receive 12 bytes on Baud rate of 1516800 in URT interrupt mode? Maybe solution is to just spam commands from PC until whole buffer is received on mcu, but this might require to implement some sort of acknowledgment from mcu, which is doable, but might be overkill.
UPDATE: I have checked error bits of UART and found that ORE (Overrun Error bit) is present, so my data is coming faster than mcu can process it.