STM32H723串口接收丢数据

环境:STM32H723ZGT6 UART1 PA9/PA10 空闲中断+DMA接收数据
现象:代码打印串口接收数据,串口助手每隔100ms发一次数据,,,打印结果是偶尔接收数据正确,大部分是接收到的全为0
原因:排查下来是M7核开启D-Cache缓存导致的
解决办法:
由于要用到以太网和LWIP,必须要开启缓存,按照网上的方法在MPU配置那里关掉缓存、Buff和共享也不行,
所以采用的是每次调用内核函数,清空缓存。

void UartRxIdleCallback(void)
{
	uint16_t unLen;
	
    if((__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET))
    {
        __HAL_UART_CLEAR_IDLEFLAG(&huart1);
       
		unLen = UART_BUF_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx) - u16UARTDMAOffset;
		
		SCB_InvalidateDCache_by_Addr(u8UARTBuff, UART_BUF_SIZE);
		SCB_CleanDCache();
		
		if(unLen && unLen <= UART_BUF_SIZE)
		UartDataRxCallBack(&u8UARTBuff[u16UARTDMAOffset], unLen);
		
		u16UARTDMAOffset += unLen;
    }
}

记录一下,结束。

你可能感兴趣的:(STM32,stm32,嵌入式硬件,单片机)