搜索
bottom↓
回复: 49

基于stm32的GPS解析

  [复制链接]

出0入0汤圆

发表于 2011-12-2 14:59:16 | 显示全部楼层 |阅读模式
串口中断接收数据,当接收完6条信息后发送标志位,后台进行解析,先找到对应信息的位置(如$GPRMC);然后采用状态机读取经纬度等信息,
点击此处下载 ourdev_700873ZM72A5.rar(文件大小:2K) (原文件名:gps.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-3-5 21:56:00 | 显示全部楼层
看一下,谢谢分享

出0入0汤圆

发表于 2012-4-5 22:45:55 | 显示全部楼层
楼主能发整个工程文件吗?

出0入0汤圆

发表于 2012-4-6 09:35:11 | 显示全部楼层
可以用strstr()和atof和atoi等库函数来写,优化一下结构
另外,接收缓冲区用循环队列来做更好

出0入0汤圆

 楼主| 发表于 2012-4-16 19:23:35 | 显示全部楼层
knliao 发表于 2012-4-6 09:35
可以用strstr()和atof和atoi等库函数来写,优化一下结构
另外,接收缓冲区用循环队列来做更好 ...

恩,开始没有想到循环队列,现在做通信一般选择循环队列,然后查找帧头和帧尾(状态机)解析

出0入0汤圆

发表于 2012-4-17 10:14:38 | 显示全部楼层
顶一下楼主

出0入0汤圆

发表于 2012-4-17 10:40:22 | 显示全部楼层
不错 收藏了

出0入0汤圆

发表于 2012-5-12 14:23:16 | 显示全部楼层
不能下载,MARK一下回头下

出0入0汤圆

发表于 2012-6-1 16:39:43 | 显示全部楼层
论坛不能下附件。能发到我邮箱吗??、??非常需要这个。、、442948742@qq.com          谢谢  啊  谢谢

出0入0汤圆

发表于 2012-11-27 21:56:43 | 显示全部楼层
请问楼主用的GPS型号是什么?我才接触GPS和STM32 ,不知道选择什么型号的GPS模块……

出0入0汤圆

发表于 2012-12-20 15:49:30 | 显示全部楼层
标记一个,等我做好了循环队列,就贴上来~

出0入0汤圆

发表于 2012-12-20 16:51:34 | 显示全部楼层
标记,学习一下

出0入0汤圆

发表于 2012-12-26 15:35:01 | 显示全部楼层
非常好

出0入0汤圆

发表于 2013-4-3 11:59:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-5-1 20:21:25 | 显示全部楼层
先顶一下,下载下来看看!

出0入0汤圆

发表于 2013-5-28 18:14:16 | 显示全部楼层
看一下,谢谢分享

出0入8汤圆

发表于 2013-6-5 18:18:18 | 显示全部楼层
楼主的解析方式很好,采用了,再补充一个环形队列吧,方式就是采用hotpower 的uart 零耗时思想,上代码:
typedef struct
{
    uint8_t GPS_data_Count;
    uint8_t Frame;
    uint64_t pd;
    uint64_t pd1;
    uint8_t GPS_Buffer[256];
    uint8_t *pstr;              //测试
}Gps_data_addr_st;

Gps_data_addr_st Gps_data_addr;

//中断

void UART0_IRQHandler(void)
{
    uint8_t u8InChar=0xFF;
    static uint8_t KeyWord_Count;
    uint32_t u32_IQR= UART0->ISR;
    uint32_t u32_status = UART0->FSR;
    UART0->ISR = u32_IQR;
    //串口接收数据
    if (((_UART_IS_RX_READY(UART0) > 0) || (_UART_IS_RX_TIMEOUT(UART0) > 0)) && (_UART_IS_RX_BUF_ERR(UART0) == 0))
    {
        while(_UART_IS_RX_EMPTY(UART0) == 0)
        {
            __disable_irq();
            _UART_RECEIVEBYTE(UART0, u8InChar);
            Gps_data_addr.GPS_Buffer[Gps_data_addr.GPS_data_Count] = u8InChar;       
            switch(u8InChar)
            {   //NEMA0183 格式数据以$开始,\r\n结尾(0x0d 0x0a)
                case '$':
                    Gps_data_addr.pd <<= 8;
                    Gps_data_addr.pd |= '$';//存放'$'
                    Gps_data_addr.pd <<= 8;
                    Gps_data_addr.pd |= Gps_data_addr.GPS_data_Count;//'$'在数组中的下标
                    KeyWord_Count = Gps_data_addr.GPS_data_Count;
                break;
                case 0x0D:
                    Gps_data_addr.pd <<= 8;
                    Gps_data_addr.pd |= 0x0d;//存放0x0d
                    Gps_data_addr.pd <<= 8;
                    Gps_data_addr.pd |= Gps_data_addr.GPS_data_Count;////0x0d在数组中的下标
                    //收完一帧数据,发送GPS解码消息,5us后任务就绪
                    //模拟抢占式任务,串口中断退出后解码可以开始,优先级等同TMR0中断,解码时间必须在14ms内完成
                    if( (Gps_data_addr.GPS_Buffer[KeyWord_Count+5] == 'C') ||      //GPRMC
                        (Gps_data_addr.GPS_Buffer[KeyWord_Count+5] == 'A') ||      //GPGSA
                        (Gps_data_addr.GPS_Buffer[KeyWord_Count+5] == 'V') ||      //GPGSV
                        (Gps_data_addr.GPS_Buffer[KeyWord_Count+5] == 'L') )       //GPGLL
                    {
                        GPS_Decode_Run();//启动TMR1中断
                    }
                    else
                    {
                        Gps_data_addr.pd = 0;
                    }
                break;
                default:    break;
            }
            __enable_irq();       
            Gps_data_addr.GPS_data_Count++;
        }
    }
    else
    {//串口BUFFER数据溢出处理
        while(_UART_IS_RX_EMPTY(UART0) == 0)
        {
            _UART_FLUSH_FIFO(UART0, UART_FCR_TFR_Msk | UART_FCR_RFR_Msk);
            _UART_RECEIVEBYTE(UART0, u8InChar);
        }  
    }
}

运行效果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-5 19:38:55 来自手机 | 显示全部楼层
这个记下晚上回家看一下

出0入0汤圆

发表于 2013-6-6 22:12:55 | 显示全部楼层
这个标记一下

出0入0汤圆

发表于 2013-7-12 21:46:10 | 显示全部楼层
好东西,谢谢楼主分享.

出0入0汤圆

发表于 2013-7-13 18:59:31 | 显示全部楼层
mark  顶一下吧

出0入10汤圆

发表于 2013-10-31 16:40:25 | 显示全部楼层
串口开循环队列就要用定时器来控制吗?

出0入0汤圆

发表于 2013-10-31 19:45:24 | 显示全部楼层

出0入10汤圆

发表于 2013-11-1 10:27:05 | 显示全部楼层
Gavin_GC 发表于 2012-4-16 19:23
恩,开始没有想到循环队列,现在做通信一般选择循环队列,然后查找帧头和帧尾(状态机)解析 ...

麻烦能上传一份用串口的循环队列解析GPS的源码吗?

出0入0汤圆

 楼主| 发表于 2013-11-1 20:54:15 | 显示全部楼层
lklhzu 发表于 2013-11-1 10:27
麻烦能上传一份用串口的循环队列解析GPS的源码吗?

这个好久以前做的啦,我没有做循环队列的,你可以参照他们思想修改。我一般是创建一个结构体,定义一个256大小的数组、头指针、尾指针。串口接收中断函数将数据填充的数组里面去,尾指针增加,利用uint8_t数据类型的255+1=0的机制,然后外面函数进行数据的解析,读取数据后头指针进行相应的增加,增加操作最好加入一个强制转换操作(uint8_t)(pStart+1).

出0入10汤圆

发表于 2013-11-2 10:02:14 | 显示全部楼层
Gavin_GC 发表于 2013-11-1 20:54
这个好久以前做的啦,我没有做循环队列的,你可以参照他们思想修改。我一般是创建一个结构体,定义一个25 ...

谢谢啊,我也按照你说的这种方法试试!

出0入10汤圆

发表于 2013-11-5 10:03:23 | 显示全部楼层
Gavin_GC 发表于 2013-11-1 20:54
这个好久以前做的啦,我没有做循环队列的,你可以参照他们思想修改。我一般是创建一个结构体,定义一个25 ...

楼主你好,GPRMC这种帧头是在串口中断里面先判断再接收,还是中断里面只接收,主函数里面判断帧头?

出0入0汤圆

发表于 2013-11-12 20:51:26 | 显示全部楼层
STM32--GPS解析

出0入0汤圆

发表于 2013-11-12 22:01:33 | 显示全部楼层
之前也写了一个,参考一下LZ的思路

出0入0汤圆

发表于 2013-11-21 11:00:22 | 显示全部楼层
正要学习这个,看看有用不。。。

出0入0汤圆

发表于 2013-11-29 09:30:13 | 显示全部楼层
学习了 收藏

出0入0汤圆

发表于 2013-12-26 13:37:10 | 显示全部楼层
来看看哈。。。

出0入0汤圆

发表于 2014-2-27 09:59:56 | 显示全部楼层
thanks 及时雨啊

出0入0汤圆

发表于 2014-3-7 19:32:05 | 显示全部楼层
mark一下,我之前也看了各种方法,主要问题是gps信息不定长,正点原子的写得不错,后面为了减轻主控的负担,我用了一个mcu专门来解析gps,解算好了才以固定长度发给主控。

出0入0汤圆

发表于 2014-3-10 14:05:42 | 显示全部楼层
Gavin_GC 发表于 2013-11-1 20:54
这个好久以前做的啦,我没有做循环队列的,你可以参照他们思想修改。我一般是创建一个结构体,定义一个25 ...

楼主,可以上传整个工程,让我们学习学习嘛

出0入0汤圆

发表于 2014-3-10 23:24:16 | 显示全部楼层
给力!!!!!

出0入0汤圆

发表于 2014-3-15 15:56:13 | 显示全部楼层
最近要搞GPS,真没搞过,头疼

出0入0汤圆

发表于 2014-4-29 14:29:50 | 显示全部楼层

STM32--GPS解析,mark下!

出0入0汤圆

发表于 2014-5-5 21:31:18 | 显示全部楼层
谢谢楼主分享         

出0入0汤圆

发表于 2014-7-10 17:07:46 | 显示全部楼层
正好用STM32F105来做GPS信号接收和处理信息,有很大的帮助

出0入0汤圆

发表于 2014-11-11 21:38:25 | 显示全部楼层
谢谢楼主分享!

出0入13汤圆

发表于 2014-11-11 21:50:39 | 显示全部楼层
好东西哦!状态机。。。 有用到的!

出0入0汤圆

发表于 2014-11-14 15:17:44 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2015-1-22 23:16:13 来自手机 | 显示全部楼层
很好,学习一下

出0入0汤圆

发表于 2015-7-8 13:45:44 | 显示全部楼层
学习了,谢谢~

出0入0汤圆

发表于 2015-11-19 18:10:07 | 显示全部楼层
学习了

出0入0汤圆

发表于 2016-1-23 19:03:37 | 显示全部楼层
不错 收藏了

出0入0汤圆

发表于 2016-1-23 19:34:26 | 显示全部楼层
学习下,谢谢分享

出0入0汤圆

发表于 2016-10-8 17:43:29 | 显示全部楼层
标记下,最近正需要
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 05:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表