HAL库中HAL_UART_Transmit函数 Timeout的意义--串口发送数据的计算
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) 这个是超时,在设置的这个时间内没有发送完成,就返回超时(HAL_TIMEOUT) |
这里先搞懂什么是波特率:
波特率:发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据的持续时间=1/baud。
如果波特率为9600,发送一个位需要的时间为1/9600s=0.0001042s=0.1042ms,这里按数据位为8位,停止位为2位,
加起来就是10位,10个位发送所需的时间为:0.1042*10ms = 1.042ms,如果我要发送10个字节的数据,那发送这10个字节数据给接收方需要
的时间为:10*1.042ms = 10.42ms,这是算实际的发送10个字节的数据所需要的时间。我们在接收方接收数据时可以
把时间再加宽一些,让它有一点余量。让接收方能稳定的把数据从发送方接手过来,可以加个5ms,或更宽一点10ms,
加上发送10个字节所花的时间,就是15ms或20ms。
波特率为115200或是4800的为发送时间都可以这样算。
我使用HAL_UART_Transmit函数timeout分别设置为1ms,2ms....发送的数据实际测试的结果如下