云计算百科
云计算领域专业知识百科平台

串口_蓝桥杯嵌入式stm32 HAL库

HAL_UART_Receive_IT(&huart1,&rec_data,1);
HAL_TIM_Base_Start(&htim4);

1. HAL_UART_Receive_IT(&huart1, &rec_data, 1)

作用:启动串口1的异步中断接收,仅接收1个字节数据,数据存储到`rec_data`变量中。

特点:接收完成后会触发`HAL_UART_RxCPltCallback`回调函数,需在回调中重新启动接收以实现连续接收。

2. HAL_TIM_Base_Start(&htim4)

作用:启动定时器4的基本定时功能,定时器开始按照配置的参数(如预分频、自动重装值)计数。

场景:常配合串口接收用于超时检测(如接收数据超时后重置接收状态)。

UART(串口)接收完成回调函数

  • 函数作用:当 UART 串口完成指定长度的数据接收后,会自动调用该函数,用于处理接收完成后的逻辑(如数据解析、触发下一次接收等)。
  • 参数说明:UART_HandleTypeDef *huart是串口的句柄指针,用于标识当前触发回调的串口(多串口场景下区分不同串口)。
  • 应用场景:常见于串口通信程序中,是 STM32 HAL 库异步串口接收的核心回调接口之一
  • void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
    if(huart->Instance==USART1)
    {
    TIM4->CNT=0;
    rec_flag=1;
    rec_buff[count++]=rec_data;
    HAL_UART_Receive_IT(huart,&rec_data,1);
    }
    }

    void uart_data_rec()
    {
    if(rec_flag)
    {
    if(TIM4->CNT>15)//数据接收完成
    {
    //处理数据
    if(rec_buff[0]=='l'&&rec_buff[1]=='a'&&rec_buff[2]=='n')//lan
    {
    sprintf(send_buff,"lan\\r\\n");
    HAL_UART_Transmit(&huart1,(uint8_t *)send_buff,sizeof(send_buff),50);
    }
    else if(rec_buff[0]=='q'&&rec_buff[1]=='i'&&rec_buff[2]=='a'&&rec_buff[3]=='o')//qiao
    {
    sprintf(send_buff,"qiao\\r\\n");
    HAL_UART_Transmit(&huart1,(uint8_t *)send_buff,sizeof(send_buff),50);
    }
    else if(rec_buff[0]=='b'&&rec_buff[1]=='e'&&rec_buff[2]=='i')//bei
    {
    sprintf(send_buff,"bei\\r\\n");
    HAL_UART_Transmit(&huart1,(uint8_t *)send_buff,sizeof(send_buff),50);
    }
    else
    {
    sprintf(send_buff,"ERROR!\\r\\n");
    HAL_UART_Transmit(&huart1,(uint8_t *)send_buff,sizeof(send_buff),50);
    }
    rec_flag=0;
    for(int i=0;i<count;i++)
    {
    rec_buff[i]=0;
    }
    count=0;
    }
    }
    }

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 串口_蓝桥杯嵌入式stm32 HAL库
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!