目前我正在研究 UART DMA,在通过 DMA UART 传输数据后遇到了问题。在 1 次成功的数据传输后,状态标志保持为 BUSY。经过搜索,我最终找到了这个线程,这解决了问题。
线
- static
- void
- UART_DMATransmitCplt(DMA_HandleTypeDef *hdma)
- {
- UART_HandleTypeDef* huart = ( UART_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
- /* DMA Normal mode*/
- if
- ( HAL_IS_BIT_CLR(hdma->Instance->CCR, DMA_CCR_CIRC) )
- {
- huart->TxXferCount = 0;
- /* Disable the DMA transfer for transmit request by setting the DMAT bit
- in the UART CR3 register */
- CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT);
- /* Enable the UART Transmit Complete Interrupt */
- __HAL_UART_ENABLE_IT(huart, UART_IT_TC);
- huart->State=HAL_UART_STATE_READY;
- //<--- i add this line to solve the //problem
- }
- /* DMA Circular mode */
- else
- {
- HAL_UART_TxCpltCallback(huart);
- }
- }
代码片段中的第 31 行
但是,这是一个很好的解决方案(并且应该在
STM32f3 库中实现)还是我遗漏了导致只有 1 次成功传输的问题的东西?