实现接收任意长度,并返回任意长度
char *p;//指向数组的指针,用于接收
int count_time=0;//记录上次传输时的时钟心跳
int count=0;//统计收到的个数
uint32_t temp_state=0;//获取UART的状态
char rec_flag=0;//表示接收完成与否,超时则认为接收完成
//以下是赋初值
p=RxBuffer;
count_time=HAL_GetTick();
//以下是正文
while(1){
rec_flag=1;
p=RxBuffer;
else
p++;//指针变化
if(count==100)//接收的数量不能超出缓存数组的个数
count=100;
else
count++;//记录个数
count_time=HAL_GetTick();//接收一个更新一次时间,以便于计算超时
HAL_UART_Receive_IT(&huart1,(uint8_t
*)p,1);//在启动一次新的接收
else
{
count=0;
p=RxBuffer;
count_time=HAL_GetTick();
rec_flag=0;
}
//以下目的是修改uart的状态,因为在超时的时候,uart正在接收数据,而存放的地址在缓存数组的不确定位置。修改状态为huart1.State=HAL_UART_STATE_BUSY_TX或者HAL_UART_STATE_READY才可以进去,再一次使用HAL_UART_Receive_IT函数
temp_state=HAL_UART_GetState(&huart1);
if(temp_state==HAL_UART_STATE_BUSY_TX_RX)
huart1.State=HAL_UART_STATE_BUSY_TX;
else if(temp_state==HAL_UART_STATE_BUSY_RX)
huart1.State=HAL_UART_STATE_READY;
HAL_UART_Receive_IT(&huart1,(uint8_t
*)p,1);//在启动一次新的接收
|
|