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);
//
//
//
}
我一直在尝试从串行端口终端为我的代码实现一种模拟器。我正在使用 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);
//
//
//
}