Keil下使用printf函数,很方便,大家可以参考网上的其他文章。
Printf函数是系统自定义函数,其中内部重复调用了fputc函数,每次发送1个字节ch。
参考下述代码中#if 0的部分。
当发送字节数较多时,printf消耗的时间非常长,因为每次都要等待发送完成。
时间计算:串口设置115200,n,8,1,对于大包发送,一般用较快的bps。
如果发送100字节,大概1100位(算上起始位和停止位)。
消耗的时间为:1100/115200 = 9ms,实际运行时间估计要2~3倍,也就是30ms左右。
如果字节数更多或波特率更低,消耗的时间会更长。
考虑将printf做成中断方式,基本的流程就是:
- 在发送第一个字符时,立即打开串口发送;
- 当发送后续字符时,直接压入队列,不再等待串口发送完成;
- 中断函数中,如果发送队列中还有数据没有发送完成