完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、串行通信的基本参数 串行端口的通信方式是将字节拆分成一个接一个的位再传输出去,接收方再将此一个一个的位组合成原来的字符,如此形成一个字节的完整传输,在数据传输时,应在通信端口的初始化时设置几个通信参数。 1)波特率,即传送数据的速度。波特率的意思就是在一秒中可以传输的数据位数,单位是bps。如果采用波特率4800bps进行传输,那么每秒可以传输600个byte。 2、轮询方式代码效果 char ch; /* Infinite loop */ for(;;) { if(HAL_UART_Receive(&huart1,(uint8_t*)&ch,1,100) == HAL_OK) printf("%c",ch); //osDelay(1); } 轮询方式不适合接收一大段的数据,否则会卡死,如上图。 3、中断方式代码效果 #define MAX_RECV_LEN 128 //定义的一次最多接收字节的位数 uint8_t rx1_buff[MAX_RECV_LEN] = {0}; //串口接收数据缓冲 uint8_t *pBuf; //当前接收字节存放的位置指针 uint8_t line_flag = 0; //一行数据接收结束标志 void StartTaskUsart(void *argument) { /* USER CODE BEGIN StartTaskUsart */ printf("HELLO WORLDn"); pBuf = rx1_buff; HAL_UART_Receive_IT(&huart1,pBuf, 1); /* Infinite loop */ for(;;) { if(line_flag) { printf("%s",rx1_buff); line_flag=0; } osDelay(1); } /* USER CODE END StartTaskUsart */ } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle) { if (UartHandle->Instance == USART1) { ++ pBuf; // 已接收一个字节数据,当前存储位置指针后移 if(pBuf == rx1_buff + MAX_RECV_LEN) // 如果指针已移出数组边界 pBuf = rx1_buff; // 重新指向数组开头 else if(*(pBuf - 1) == 'n') // 如果之前接收到‘n’换行符,则表示接收完成 { line_flag = 1; // 行接收标志置1 *pBuf = ' |