在尝试学习嵌入式
STM32 编程时,我遇到了另一个我似乎无法解决的障碍。我有一个简单的测试程序,它通过 UART 传输字符,RX 和 TX 引脚循环在一起,并使用中断接收它们。当我使用 HAL_UART_Transmit 传输数据时,我可以在 IRQHandler 中很好地处理接收到的字符。但是当我使用 HAL_UART_Transmit_IT 时,我的 IRQHandler 会为我传输的每个字符在接收缓冲区中放置 2 个字符。我很确定这是因为我的 IRQHandler 被调用以传输每个字符和接收到每个字符。您可以在下面看到我如何尝试仅处理我的 IRQHandler 中接收到的字符,但它在几个字符后挂断了。关于我的任何想法
谢谢
PS 从长远来看,我想让它与 DMA 一起工作,并使用字符匹配中断结束传输。我已经在 STM32H7A3 Nucleo 板上工作,但在我需要使用的 STM32H7B3Discovery 板上没有。所以我现在正在研究这个 IT 方法。
- initUART4();
- uint8_t txBuffer[] = { "$PUBX,00*33rn" };
- memset(rxBuffer, 0, sizeof(rxBuffer));
- memset(gpsMessage, 0, sizeof(gpsMessage));
- msgReceivedUART4 = false;
- HAL_UART_Receive_IT(&uart4Handle, rxBuffer, 1);
- HAL_UART_Transmit(&uart4Handle, txBuffer, sizeof(txBuffer), 2000); //This works
- //HAL_UART_Transmit_IT(&uart4Handle, txBuffer, sizeof(txBuffer)); //This doesn't work
- while (1)
- {
- //Do other stuff
- if(msgReceivedUART4)
- {
- //process UART4msg
- HAL_Delay(1);
- }
- }
- }
- void UART4_IRQHandler()
- {
- HAL_UART_IRQHandler(&uart4Handle);
- // if (__HAL_UART_GET_FLAG(&uart4Handle, UART_FLAG_RXNE))
- // {
- if (rxBuffer[0] != 0)
- {
- gpsMessage[gpsMsgCount] = rxBuffer[0];
- gpsMsgCount++;
- }
- if (rxBuffer[0] == 'n')
- {
- fifoEnqueue(rxBuffer);
- msgReceivedUART4 = true;
- }
- else
- HAL_UART_Receive_IT(&uart4Handle, rxBuffer, 1);
- // }
- }