rtthread系统中lwgps软件包的使用

news2024/12/24 8:15:34

开发环境:gd32f450开发板

嵌入式操作系统:rtthread

软件包:lwgps

gps定位模块:正点原子ATK-1218-BD

lwgps软件包的介绍:此项目是完成开源的lwgps与rt-thread的匹配。原工程地址:https://github.com/MaJerle/lwgps

许可证:lwgps移植包及lwgps遵循 MIT 许可。

硬件连接:gd32单片机的串口5和gps定位模块通信

软件包的使用步骤如下:

 1.env工具使能并配置串口5,如下图

67d10a3b388334f3b504b4d931ffd30b.png

2.添加lwgps软件包,如下图:

01627ef7f94c30cc98171fbdc17db123.png

3.保存,退出。使用指令pkgs --update下载软件包。

4.重新生成工程,并打开。

5.查看工程目录,包含了lwgps文件

3d4fdfa16264513b4e6081700db92515.png

6.直接编译,没有报错,下载到开发板。使用指令lwgps_example,查看打印信息,打印如下:

e9feea49421d7146c533a9e5545ce1f5.png

实际打印应该按照下面的格式才对。(分析应该是rt_kprintf未支持浮点打印)

31fda1ce815dcfaf47859d4620c2ea5e.png

仿真查看,符合预期,如下:

解析的数据,如下:

gps_rx_data[] = ""
                "$GPRMC,183729,A,3907.356,N,12102.482,W,000.0,360.0,080301,015.5,E*6F\r\n"
                "$GPRMB,A,,,,,,,,,,,,V*71\r\n"
                "$GPGGA,183730,3907.356,N,12102.482,W,1,05,1.6,646.4,M,-24.1,M,,*75\r\n"
                "$GPGSA,A,3,02,,,07,,09,24,26,,,,,1.6,1.6,1.0*3D\r\n"
                "$GPGSV,2,1,08,02,43,088,38,04,42,145,00,05,11,291,00,07,60,043,35*71\r\n"
                "$GPGSV,2,2,08,08,02,145,00,09,46,303,47,24,16,178,32,26,18,231,43*77\r\n"
                "$PGRME,22.0,M,52.9,M,51.0,M*14\r\n"
                "$GPGLL,3907.360,N,12102.481,W,183730,A*33\r\n"
                "$PGRMZ,2062,f,3*2D\r\n"
                "$PGRMM,WGS84*06\r\n"
                "$GPBOD,,T,,M,,*47\r\n"
                "$GPRTE,1,1,c,0*07\r\n"
                "$GPRMC,183731,A,3907.482,N,12102.436,W,000.0,360.0,080301,015.5,E*67\r\n"
                "$GPRMB,A,,,,,,,,,,,,V*71\r\n";

1f905f337e062510575fedf11b4d0bb6.png

7.实际测试代码,main.c 如下:

#include <stdio.h>
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>


#include "lwgps.h"
static lwgps_t lwgps_temp;
/* defined the LED1 pin: PD4 */
#define LED1_PIN GET_PIN(D, 4)


int main(void)
{
    int count = 1;
    extern void lwgps2rtt_init(const char *uart_dev_name);
    lwgps2rtt_init("uart5");//使用串口5通讯
    /* set LED1 pin mode to output */
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);


    while (count++)
    {
        rt_pin_write(LED1_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED1_PIN, PIN_LOW);
        rt_thread_mdelay(500);
        
        extern void lwgps2rtt_get_gps_info(lwgps_t *gps_info);
        lwgps2rtt_get_gps_info(&lwgps_temp);//获取gps信息
//        rt_kprintf("Valid status: %d\r\n", lwgps_temp.is_valid);
//        rt_kprintf("Latitude: %f degrees\r\n", lwgps_temp.latitude);
//        rt_kprintf("Longitude: %f degrees\r\n", lwgps_temp.longitude);
//        rt_kprintf("Altitude: %f meters\r\n", lwgps_temp.altitude);
        rt_kprintf("year: %d year\r\n", lwgps_temp.year);
        rt_kprintf("month: %d month\r\n", lwgps_temp.month);
        rt_kprintf("date: %d date\r\n", lwgps_temp.date);
        rt_kprintf("hours: %d hours\r\n", lwgps_temp.hours);
        rt_kprintf("minutes: %d minutes\r\n", lwgps_temp.minutes);
        rt_kprintf("seconds: %d seconds\r\n", lwgps_temp.seconds);
    }


    return RT_EOK;
}

主要2个接口调用,lwgps2rtt_init("uart5");//使用串口5通讯和lwgps2rtt_get_gps_info(&lwgps_temp);//获取gps信息

编译,下载到开发板,看到打印出时间信息,如下:

fd60d762ce0240e25107e19247ef2340.png

系统运行一段时间报错,如图:

3aaac8b39ca2710d663eb2c4f666f3e4.png

(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer) assertion failed at function:rt_timer_stop, line number:542

解决办法:创建线程时增大线程栈即可,默认512改为了1024。如下:

2efad5ad4c6fc501b079fd7081b7e5c0.jpeg

个人公众号:嵌入式学习与实践

99ebf21b5050d7df655565870cab0c07.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/614275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 系统-备份与恢复

linux 系统-备份与恢复 基本介绍 实体机无法做快照&#xff0c;如果系统出现异常或者数据损坏&#xff0c;后果严重&#xff0c; 要重做系统&#xff0c;还会造成数据丢失。所以我们可以使用备份和恢复技术 linux 的备份和恢复很简单&#xff0c; 有两种方式&#xff1a; 把…

论文浅尝 | 通过对比学习优化用于命名实体识别的双编码器

笔记整理&#xff1a;陆星宇&#xff0c;东南大学硕士&#xff0c;研究方向为自然语言处理 链接&#xff1a;https://arxiv.org/abs/2208.14565 动机 命名实体识别&#xff08;NER&#xff09;是识别与命名实体相关的文本片段并将其分类到预定义的实体类型&#xff08;如人物、…

MegEngine 使用小技巧:用 mperf 进行安卓 opencl 算子的 roofline 分析

前言 roofline 分析是一种简单评估当前计算任务对当前平台计算/访存能力的利用情况的方法&#xff0c;可以帮助分析算子的优化方向和优化潜力。mperf 实现了安卓 mali/adreno 两种 gpu 平台的 roofline 分析能力&#xff0c;下面以 mali 平台为例&#xff0c;简单介绍一下操作步…

【操作系统】什么是用户态和内核态?用户态和内核态是如何切换的?

【操作系统】什么是用户态和内核态&#xff1f;用户态和内核态是如何切换的&#xff1f; 参考资料&#xff1a; 用户态到内核态切换 什么是用户态和内核态&#xff1f; 「操作系统」什么是用户态和内核态&#xff1f;为什么要区分 一、什么是用户态和内核态&#xff1f; 1.1、…

案例23:基于Java宿舍管理系统设计和实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Echarts的x轴调整间隔,可以用 xAxis数组子项的axisLabel.interval

Echarts的x轴调整间隔,可以用 xAxis数组子项的axisLabel.interval https://echarts.apache.org/zh/option.html#xAxis.axisLabel.interval xAxis.axisLabel.interval auto 默认值是’auto’ 可设置为 : number 或 Function 数字或函数 坐标轴刻度标签的显示间隔&#xff0c;…

逍遥自在学C语言 | for循环详解

前言 C语言中的循环结构时&#xff0c;for循环是最常用的一种。它允许重复执行一段代码&#xff0c;直到满足特定条件为止。 本文将详细介绍for循环的用法&#xff0c;并提供相关的可编译运行的C代码示例。 一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语…

生产·成本

短期生产成本 给定生产技术&#xff0c;管理者必须选择如何生产&#xff08;即使用什么样的要素组合&#xff09;使生产成本最小。 衡量成本 边际成本 长期成本与规模 长期平均成本&#xff08;LAC&#xff09;和长期边际成本&#xff08;LMC&#xff09; 规模经济 随着产…

【Web网站服务】Apache网页优化

Apache网页优化 一、网页压缩1.1网页压缩步骤 二、网页缓存三、隐藏版本信息五、Apache防盗链 一、网页压缩 在企业中&#xff0c;部署Apache后只采用默认的配置参数&#xff0c;会引发网站很多问题&#xff0c;换言之默认配置是针对以前较低的服务器配置的&#xff0c;以前的…

chatgpt赋能python:Python如何拆分list

Python如何拆分list 在Python编程中&#xff0c;我们经常需要对list进行拆分操作。拆分list可以帮助我们更好地处理数据&#xff0c;以便进一步进行分析、计算或可视化呈现。本文将介绍Python中如何拆分list&#xff0c;并且提供一些常用的拆分方式。 按固定大小进行拆分 我…

【AIGC】12、DINO | 针对 DETR-like 检测器的提升

文章目录 一、背景二、方法2.1 Contrastive DeNoising Training2.3 Mixed Query Selection2.4 Look Forward Twice 三、效果 论文&#xff1a;DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 代码&#xff1a;https://github.com/IDEACVR/…

【JUC基础】15. Future模式

目录 1、前言 2、什么是Future 2.1、传统程序调用 3、JDK中的Future 3.1、Future相关API 3.2、FutureTask 3.2.1、FutureTask实现 3.2.2、FutureTask相关API 3.3、CompletableFuture 3.3.1、thenApply 3.3.2、异步任务编排之thenCompose() 3.3.3、异步任务编排之th…

南京市某高校计算机科学与技术专业性能测试与Loadrunner—考试试卷分析

XXX科技学院试卷 20 /20 学年 第 学期 课程所属部门&#xff1a; 课程名称&#xff1a; 课程编号&#xff1a; 考试方式&#xff1a;&#xff08;A、B、开、闭&#xff09;卷 使用班级&#xff1a; …

数据安全--16--数据采集阶段安全防护措施

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/131033616 一、引子 数据安全采集阶段的防护措施主要是从三个方面来开展的&#xff0c;第一个是从个人数据主体采集方面&#xff0c;第二个是从外部机构采集方面&#xff0c;以上两个方面基本涵盖了数…

读改变未来的九大算法笔记05_数字签名

1. 数字签名”&#xff08;Digital Signature&#xff09; 1.1. 单词数字化&#xff08;digital&#xff09;意味着其“由数字字符串组成” 1.2. 任何数字化的东西都能被拷贝 1.3. “签名”的全部意义在于能被读取&#xff0c;但不能被除了作者的任何人拷贝&#xff08;也就…

linux(信号产生中)理论部分

1.实际执行信号的处理动作称为信号递达 2.信号从产生到递达之间的状态&#xff0c;称为信号未决&#xff08;Pending&#xff09; 3.进程可以选择阻塞某个信号的 ----------------------------------------------------------------------------------------------------------…

【JavaSE】Java(五十一):核心要点总结

文章目录 1. String str "love"; 和 String str new String("love);一样吗&#xff1f;2. 如何将字符串反转3. String类的常用方法有哪些?4. new String("sn") new String("ow")会创建几个对象&#xff1f; 1. String str “love”; 和…

「C/C++」C/C++ Lamada表达式

✨博客主页&#xff1a;何曾参静谧的博客 &#x1f4cc;文章专栏&#xff1a;「C/C」C/C程序设计 相关术语 Lambda表达式&#xff1a;是C11引入的一种函数对象&#xff0c;可以方便地创建匿名函数。与传统的函数不同&#xff0c;Lambda表达式可以在定义时直接嵌入代码&#xff…

JSON与storage

JSON JSON由来 ◼ 在目前的开发中&#xff0c;JSON是一种非常重要的数据格式&#xff0c;它并不是编程语言&#xff0c;而是一种可以在服务器和客户端之间传输的数据格式。 ◼ JSON的全称是JavaScript Object Notation&#xff08;JavaScript对象符号&#xff09;&#xff1a…

苹果震撼发布首款头显,搭配强悍Mac和iOS 17等全新产品,价值25000元!

&#x1f337; 博主 libin9iOak带您 Go to New World.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《IDEA开发…