打印
[STM32]

串口一直打印出nan是什么情况

[复制链接]
3917|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
光阴时钟|  楼主 | 2017-5-7 13:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 光阴时钟 于 2017-5-7 13:10 编辑

串口打印不出来,好心塞呀。我用keil调试,程序运行结果是可以的,但是用串口打印结果时,却一直给我打印出nan,有木有人遇过类似情况,可否指点一下,不甚感激呀。。。
以下是我写的GPS模块采点程序,求指点
void Data_gather(void)
{
        unsigned char i=0,j=0,k=0;
        float longtitude_sum=0,latitude_sum=0;
        float S_lon=0,S_la=0,Sum_lon=0,Sum_la=0;
        float longtitude_aver=0,latitude_aver=0;  //取均值
        flag_ok=0;
        if(Save_Data.isParseData==true&&Save_Data.isUsefull==true)
        {
                //考虑到测一点时,度是不会变的,所以只对分计算
                //先采集
                longtitude[pos_collect]=(Save_Data.longitude[3]-0x30)*10+(Save_Data.longitude[4]-0x30)*1+(Save_Data.longitude[6]-0x30)*0.1+(Save_Data.longitude[7]-0x30)*0.01+(Save_Data.longitude[8]-0x30)*0.001+(Save_Data.longitude[9]-0x30)*0.0001;
                latitude[pos_collect]=(Save_Data.latitude[2]-0x30)*10+(Save_Data.latitude[3]-0x30)+(Save_Data.latitude[5]-0x30)*0.1+(Save_Data.latitude[6]-0x30)*0.01+(Save_Data.latitude[7]-0x30)*0.001+(Save_Data.latitude[8]-0x30)*0.0001+0.0000000;
                pos_collect++;
                if(pos_collect>199) //采集完成,滤波,拉伊达准则
                {
                        pos_collect=0;
                        //求均值
                        for(i=0;i<200;i++)
                        {
                                longtitude_sum+=longtitude;
                                latitude_sum+=latitude;
                        }
                        longtitude_aver=longtitude_sum/200;
                        latitude_aver=latitude_sum/200;
                        //求方差S
                        for(i=0;i<200;i++)
                        {
                                Sum_lon+=(longtitude-longtitude_aver)*(longtitude-longtitude_aver);
                                Sum_la+=(latitude-latitude_aver)*(latitude-latitude_aver);
                        }
                        Sum_lon=Sum_lon/199;
                        Sum_la=Sum_la/199;
                        S_lon=sqrt(Sum_lon);
                        S_la=sqrt(Sum_la);
                        //判断数据是否异常
                        for(i=0;i<200;i++)
                        {
                          if(longtitude>3*S_lon)
                                {
                                         longtitude=0;
                                }
                                if(latitude>3*S_la)
                                {
                                         latitude=0;
                                }
                        }
                        //处理完毕,求均值
                        longtitude_sum=0;
                        latitude_sum=0;
                        for(i=0;i<200;i++)
                        {
                                if(longtitude!=0)
                                {
                                        j++;
                                        longtitude=(int)(longtitude*10000);//扩大10000倍,取整减小误差
                                        longtitude_sum+=longtitude;
                                }
                                if(latitude!=0)
                                {
                                        k++;
                                        latitude=(int)(latitude*10000);//扩大10000倍,取整减小误差
                                        latitude_sum+=latitude;
                                }
                         }
             longtitude_aver=longtitude_sum/(j*10000);
                         latitude_aver=latitude_sum/(k*10000);
                         //存入数组
                         Pos_longtitude[num_postion]=longtitude_aver;
                         Pos_latitude[num_postion]=latitude_aver;
                         printf("jingdu=%f",Pos_longtitude[num_postion]);
                        printf("\r\n");
                         printf("weidu=%f",Pos_longtitude[num_postion]);
                        printf("\r\n"); //串口打印

                         num_postion=num_postion+1;
                         flag_ok=1;
                 }
        }
}

相关帖子

沙发
airwill| | 2017-5-8 11:10 | 只看该作者
比较大的可能性, 应该是没有对上通信协议

使用特权

评论回复
板凳
光阴时钟|  楼主 | 2017-5-8 12:10 | 只看该作者
airwill 发表于 2017-5-8 11:10
比较大的可能性, 应该是没有对上通信协议

问题解决了,是我除了个0,所以出现这种结果

使用特权

评论回复
地板
QuakeGod| | 2017-5-14 17:43 | 只看该作者
在 printf 函数里, %f 位置的浮点数有问题时,打印出NaN.
可能的还有INF等。
NaN的意思是 Not a Number.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

31

帖子

0

粉丝