diff --git a/bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart_v2.c b/bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart_v2.c index 225180d229d..b6c31454027 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart_v2.c +++ b/bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart_v2.c @@ -390,6 +390,10 @@ static rt_ssize_t stm32_transmit(struct rt_serial_device *serial, if (uart->uart_dma_flag & RT_DEVICE_FLAG_DMA_TX) { +#if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + struct rt_serial_tx_fifo *tx_fifo = (struct rt_serial_tx_fifo *) serial->serial_tx; + SCB_CleanDCache_by_Addr((uint32_t *)tx_fifo->rb.buffer_ptr, tx_fifo->rb.buffer_size); +#endif HAL_UART_Transmit_DMA(&uart->handle, buf, size); return size; } diff --git a/components/drivers/include/drivers/dev_serial_v2.h b/components/drivers/include/drivers/dev_serial_v2.h index 0bdc51b7baf..0624fa534c6 100644 --- a/components/drivers/include/drivers/dev_serial_v2.h +++ b/components/drivers/include/drivers/dev_serial_v2.h @@ -253,7 +253,7 @@ struct rt_serial_rx_fifo rt_uint16_t rx_cpt_index; /* software fifo */ - rt_uint8_t buffer[]; + rt_align(32) rt_uint8_t buffer[]; }; /** @@ -271,7 +271,7 @@ struct rt_serial_tx_fifo struct rt_completion tx_cpt; /* software fifo */ - rt_uint8_t buffer[]; + rt_align(32) rt_uint8_t buffer[]; }; /**