|

楼主 |
发表于 2022-1-19 09:36:43
|
显示全部楼层
最简单的解决办法,不调用HAL库的中断函数,自定义可以避免在中断中操作DMA带来的ORE错误。
void BSP_UART_IRQ(u8 id)
{
u8 data=0;
if((__HAL_UART_GET_FLAG(&BSP_UART_Handle[id],UART_FLAG_RXNE)!=RESET))
{
HAL_UART_Receive(&BSP_UART_Handle[id],&data,1,1000);
if (BSP_UART_RevFun[id]!=0) BSP_UART_RevFun[id](data);
else
{
if (BSP_UART_Rx_Len[id]<BSP_UART_Rx_Max[id]) BSP_UART_Rx_Buff[id][BSP_UART_Rx_Len[id]++]=data;
}
}
if (__HAL_UART_GET_FLAG(&BSP_UART_Handle[id],USART_SR_TC)!=RESET)
{
__HAL_UART_DISABLE_IT(&BSP_UART_Handle[id], UART_IT_TC);
HAL_UART_TxCpltCallback(&BSP_UART_Handle[id]);
}
}
经过反复测试完全正常 |
|