stm32的uart接收中断串口终端

Uart receive interrupt serial port terminal for stm32

我一直在尝试从串行端口终端为我的代码实现一种模拟器。我正在使用 uart 接收中断从终端发送数据并将数据保存到数组,但我必须输入一些数据并保存它。

我希望我的 uart 函数等待回车键,然后继续下一个函数获取下一个数据。我不知道如何实现它,我不想使用 putchar 或 fscanf。我怎样才能开发我的代码以这种方式工作?我不能使用 while 循环或 if 语句,因为我正在使用中断。

根据您的 hardware/software 设置(例如 UART 外设设置、中断设置...),代码实现可能会有很大不同。因此,如果您分享您当前的设置和代码实现,我可以给您一个更准确的答案。

如果您使用 HAL_UART_Receive_IT 作为 UART RX 中断,这通常不是一个好主意。因为 CPU 必须将每个字符从 UART 外设一个一个地复制到内存中。

一般来说,使用 RX DMA 是一种减少 CPU 负载并使代码实现更容易的方法。

开启UART的RX DMA后,参考下面的代码模板尝试实现。

#define RxBuffSize    256

uint8_t RxBuff[RxBuffSize];

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
    if (huart == &huart1)
    {   
        int i;
        for(i = 0; i < Size; i++){
            if(RxBuff[i] == '\n'){
                // TODO something...
            }
        }
        HAL_UARTEx_ReceiveToIdle_DMA(&huart1, RxBuff, RxBuffSize);
        __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
    }
}


int main(void){

    //
    //
    //

    HAL_UARTEx_ReceiveToIdle_DMA(&huart1, RxBuff, RxBuffSize);
    __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);

    //
    //
    //

}