查看HAL库UART文件,发现UART中断里面的处理都是根据UART传的一个全局结构变量来处理的。void HAL_UART_IRQHandler(UART_HandleTypeDef *huart); 我要处理UART的发送和接收。发送部分我可以理解,接收部分就让人郁闷了。 static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart) if(--huart->RxXferCount == 0) //这个也是全局结果传过来的。 { __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE); /* Check if a transmit process is ongoing or not */ if(huart->State == HAL_UART_STATE_BUSY_TX_RX) { huart->State = HAL_UART_STATE_BUSY_TX; } else { /* Disable the UART Parity Error Interrupt */ __HAL_UART_DISABLE_IT(huart, UART_IT_PE); /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ __HAL_UART_DISABLE_IT(huart, UART_IT_ERR); huart->State = HAL_UART_STATE_READY; } HAL_UART_RxCpltCallback(huart); return HAL_OK; } 这个一定要接收固定数目的字符后才会关闭接收中断,如果发送10个字符,接收10个字符,这样处理很OK。但是发送是可以确定的, 接收的个数是不确定的。官方的库这么死板吗?还是我理解错了。请大侠帮忙分析下,谢谢! |
意思是我要自己在中断里面像以前库那样处理吗?
HAL库也可以使用串口空闲中断+DMA接收不定长数据。
这个要怎么用,还请帮忙详细叙述下,谢谢!
论坛有人分享过了,你先参考下,有问题再讨论!
Cube下实现串口+DMA+空闲中断接收不定长数据