• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

串口输出64位数据偶尔有问题?

有花堪折 2019-08-15 浏览量:867
背景简介:    开发板stm32f107。
    系统程序中多中断任务,在某一个中断任务中把64位变量数据输出。
    串口:波特率921600,8位数据位,1位停止位,无校验,无流控制。

输出语句:
printf("PreTIM64Real=%lluPreTIM64INT=%llu PreTIM64Cal=%15llu\r\n " PreTIM64Real PreTIM64INTPreTIM64Cal);
printf("TIM64Real=%lluTIM64Cal=%llu\r\n\r\n " TIM64Real TIM64Cal);

输出结果:
    如下,偶尔会有错误数据输出:
mg id="aimg_147404" aid="147404" src="http://www.openedv.com/data/attachment/forum/201908/14/102003zdzzgvvvvapgrnwv.png" data-ke-src="http://www.openedv.com/data/attachment/forum/201908/14/102003zdzzgvvvvapgrnwv.png" zoomfile="data/attachment/forum/201908/14/102003zdzzgvvvvapgrnwv.png" file="data/attachment/forum/201908/14/102003zdzzgvvvvapgrnwv.png" class="zoom" data-ke-onclick="zoom(this this.src 0 0 0)" width="1024">



在本应该输出174006995的地方,输出了一个很大的数:747354352800235520。
计算器查看十六进制数,发现多了16个字节的0,去掉即正常
正确的数为:174006995,                     0A 5F 22 D3。
错误的数为:747354352800235520,       0A 5F 22 D3 00 00 00 00。

请问大家,这个现象怎么解释呢?


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:4

  • 会不会是波特率太高了,硬件上响应速度跟不上,或者高波特率下抗干扰能力差、或滤波电容太大。

    试着把波特率调小一点看看

    另外,在单片机上用printf()打印东西数据大了也可能会出现问题

  • 像这种问题,可以在硬件调试的环境下,查看串口那个发送寄存器的状态,看里面是否会出现这些0x00

  • 这种情况一般都是你的帧数据出现了掉数据的情况,可以定义一个协议,检查到错误的数据进行重新发送

相关问题

问题达人换一批

串口输出64位数据偶尔有问题?