使用带DMA的UART与nRF52833进行通信,并启用了硬件流控制。但在接收数据时,会不断产生中断,导致void USART2_IRQHandler(void)被持续调用。
我已启用RXNE中断以便触发数据接收开始。我在代码中维护状态机,当接收到第一个字节时,我会将状态更改为RX_IN_PROGRESS,然后在RxCpltCallback中将状态改回IDLE状态。
我的主控芯片是STM32L031。
波特率设置为115200。
我在USART2_IRQHandler()中添加了以下代码但未能解决问题。
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_REACK) == SET)
{
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_REACK);
}
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TEACK) == SET)
{
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TEACK);
}
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TXE) == SET)
{
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TXE);
}
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_TC) == SET)
{
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_TC);
}
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_IDLE) == SET)
{
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_IDLE);
}
if (__HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE) == SET)
{
rx_uart_data = (uint16_t) READ_REG(&huart2.Instance->RDR);
__HAL_UART_CLEAR_FLAG(&huart2, UART_FLAG_RXNE);
}
|
|