在线时间140 小时
UID252755
ST金币0
蝴蝶豆0
注册时间2008-6-4
金牌会员
- 最后登录
- 2020-8-10
|
a0a.1 0b0c
前序:本人用到的是STM32F103RBT6,在设计基于此MCU的产品时用到了其中的串口USART来与外部进行通信,按照常规进行相关常规的串口初始化设置和配置之后,想要把AD采集到的数据通过串口发送出去,用到的串口发送数据的函数是printf("\r\n The current AD value = 0x%04X \r\n", ADC_ConvertedValueLocal);,
问题:因为要发送的ADC_ConvertedValueLocal变量中的数据需要经过很多的运算和处理,比较费时间,因为比较耗时,当要求串口以一定的时间发送采集到的数据的时候发现发送几个数据之后就死机了,开始不知道什么原因,后经查找就是当以固定的时间调用printf()函数发送数据后,采集到的AD数据还要经过费时的运算处理,当运算处理的时间超过了调用printf()函数的时间,就出现死机,串口无法传送数据,或者是串口发送几个数据之后就停止不传了。由于调用printf()函数的时间已经固定好不能更改为其它的时间,采集的AD数据的运算处理时间也是已经设计好,不能再更好,貌似陷入了无法解决的境地。
解决:后在一步一步仿真进入printf()函数,printf()函数在执行串口的数据发送时其函数内部封装调用了函数int fputc(int ch, FILE *f),,实际是调用此函数进行发送数据的,考虑调用函数比较浪费时间,就直接把要收发的数据绕开printf()函数直接调用int fputc(int ch, FILE *f)函数,节省时间开支浪费。然后又改进了AD采集数据的运算处理尽量减少时间,问题解决了。哈哈,实际在调试中发现printf()函数确实是比较费点时间,大家在开发的过程中有没有发现这个问题。 |
|