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(串口)接收完成回调函数
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;
}
}
}
网硕互联帮助中心
![[优选算法专题二滑动窗口——无重复字符的最长子串]-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2025/08/20250816062946-68a0255a9ab3a-220x150.png)






评论前必须登录!
注册