STM32基于HAL解析GPS经度纬度以及时间

这篇具有很好参考价值的文章主要介绍了STM32基于HAL解析GPS经度纬度以及时间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、硬件选型(GPS模块)

stm32 利用gps授时程序,stm32,单片机,嵌入式硬件

 2、STM32基于HAL实现过程

第一部分:CubeMX配置过程

第一步:打开CubeMX工具:stm32 利用gps授时程序,stm32,单片机,嵌入式硬件

第二步:创建一个工程:搜索一下需要的芯片。

stm32 利用gps授时程序,stm32,单片机,嵌入式硬件

 第三步:配置调试器

stm32 利用gps授时程序,stm32,单片机,嵌入式硬件

第四步:配置时钟

stm32 利用gps授时程序,stm32,单片机,嵌入式硬件第五步: 配置时钟树,在下图所示出输入,点击回车即可。

stm32 利用gps授时程序,stm32,单片机,嵌入式硬件

 第六步:配置串口

 第七步:

stm32 利用gps授时程序,stm32,单片机,嵌入式硬件

第二部分: 代码编写

第一步:定义一个用于存放经度纬度的缓存结构体

struct student
{
	uint8_t longitude[9];//经度
	uint8_t latitude[9];//纬度
	uint8_t time[6];//时间
	bool connect;//连接
};


struct student demo;//经度纬度等信息

第二步:定义所需要的变量以及数组

uint8_t message[200] = {0}; //接收字符串缓冲区
uint8_t offset; //接收字符串缓冲区的下标及大小
uint8_t mesg; //用于中断时,接收单个字符
uint8_t RX_Flag; //发生中断的标志
uint8_t data[500];
uint8_t dem[10];

第三步:编写接收解析GPS的函数

/*GPS解析采集*/
void gather_GPS(){
		HAL_UART_Receive(&huart2,data,500,1000);
		for(int i=0;i<500;i++){
			if(data[i]=='$'&&data[i+1]=='G'&&data[i+2]=='N'&&data[i+3]=='R'&&data[i+4]=='M'&&data[i+5]=='C'){
					if(i+42>=500){
							break;
					}
					/*北纬转化*/
					OLED_ShowChar(0,0,data[i+20]);
					OLED_ShowChar(0+8,0,data[i+21]);
					OLED_ShowChar(0+8+8,0,data[i+22]);
					OLED_ShowChar(0+8+8+8,0,data[i+23]);
					OLED_ShowChar(0+8+8+8+8,0,data[i+24]);
					OLED_ShowChar(0+8+8+8+8+8,0,data[i+25]);
					OLED_ShowChar(0+8+8+8+8+8+8,0,data[i+26]);
					OLED_ShowChar(0+8+8+8+8+8+8+8,0,data[i+27]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8,0,data[i+28]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8+8,0,data[i+29]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8,0,data[i+19]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8+8,0,data[i+18]);
					demo.latitude[0]=data[i+20];
					demo.latitude[0]=data[i+21];
					demo.latitude[0]=data[i+22];
					demo.latitude[0]=data[i+23];
					demo.latitude[0]=data[i+24];
					demo.latitude[0]=data[i+25];
					demo.latitude[0]=data[i+26];
					demo.latitude[0]=data[i+27];
					demo.latitude[0]=data[i+28];
					demo.latitude[0]=data[i+29];
					/*东经转化*/
//					OLED_ShowChar(0,2,data[i+30]);
					OLED_ShowChar(0,2,data[i+31]);
					OLED_ShowChar(0+8,2,data[i+32]);
					OLED_ShowChar(0+8+8,2,data[i+33]);
					OLED_ShowChar(0+8+8+8,2,data[i+34]);
					OLED_ShowChar(0+8+8+8+8,2,data[i+35]);
					OLED_ShowChar(0+8+8+8+8+8,2,data[i+36]);
					OLED_ShowChar(0+8+8+8+8+8+8,2,data[i+37]);
					OLED_ShowChar(0+8+8+8+8+8+8+8,2,data[i+38]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8,2,data[i+39]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8+8,2,data[i+40]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8,2,data[i+41]);
					OLED_ShowChar(0+8+8+8+8+8+8+8+8+8+8+8,2,data[i+42]);
					demo.longitude[0]=data[i+33];
					demo.longitude[0]=data[i+34];
					demo.longitude[0]=data[i+35];
					demo.longitude[0]=data[i+36];
					demo.longitude[0]=data[i+37];
					demo.longitude[0]=data[i+38];
					demo.longitude[0]=data[i+39];
					demo.longitude[0]=data[i+40];
					demo.longitude[0]=data[i+41];
					demo.longitude[0]=data[i+42];
					/*时间转化*/
					OLED_ShowChar(0,4,data[i+7]);
					OLED_ShowChar(0+8,4,data[i+8]);
					OLED_ShowChar(0+8+8,4,data[i+9]);
					OLED_ShowChar(0+8+8+8,4,data[i+10]);
					OLED_ShowChar(0+8+8+8+8,4,data[i+11]);
					OLED_ShowChar(0+8+8+8+8+8,4,data[i+12]);
					demo.time[0]=data[i+7];
					demo.time[0]=data[i+8];
					demo.time[0]=data[i+9];
					demo.time[0]=data[i+10];
					demo.time[0]=data[i+11];
					demo.time[0]=data[i+12];
					HAL_Delay(10);
					break;
			}
			
			if(data[i]=='$'&&data[i+1]=='G'&&data[i+2]=='P'&&data[i+3]=='T'&&data[i+4]=='X'&&data[i+5]=='T'&&data[i+24]=='O'&&data[i+25]=='K'){
				if(i>25){break;}
				demo.connect=true;
				break;
			}
			else{
				demo.connect=false;
				break;
			}
		}
}

第四步:在while中调用

  /* USER CODE BEGIN WHILE */
  while (1)
  {
		gather_GPS();
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

然后编译下载到板子里即可完成,

工程是通过OLED显示的,有需要大家可以自行下载文章来源地址https://www.toymoban.com/news/detail-844773.html

到了这里,关于STM32基于HAL解析GPS经度纬度以及时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32——定位模块ATGM336H,数据解析,提取经纬度

    ATGM336H定位模块支持GPS系统,BDS(北斗)系统,GLONASS(俄罗斯)系统,伽利略卫星导航系统(欧盟)。这个模块要拿到室外才能接收到信号,且初次初始化或者隔太久时间没有启用会导致获取定位信息的时间很长。 可以使用中科微电子提供的集成软件设置模块,可以设置串口

    2023年04月11日
    浏览(30)
  • ThingsBoard教程(三九):规则节点解析 根据经纬度过滤数据 GPS geofencing filter

    这篇文章 介绍 GPS geofencing filter 节点, 根据经纬度来过滤通过规则链的数据。 通过基于GPS的地理围栏过滤传入的消息。从传入消息中提取纬度和经度参数,并根据配置的范围进行检查。 配置: 纬度键名称 (Latitude key name)- 包含位置纬度的消息字段的名称; 经度键名称( Long

    2024年02月03日
    浏览(40)
  • 【10】STM32·HAL库开发-MAP文件解析 | STM32启动过程

    该篇文章参考资料为: STM32 MAP文件浅析.pdf STM32 启动文件浅析.pdf Cortex-M3权威指南(中文).pdf   MDK编译会产生一些中间文件,在之前新建MDK工程时使其输出到了【Output】文件夹,总共有11种,如下表所示: MAP文件是MDK编译代码后,产生的集程序、数据及IO空间的一种映射列表

    2024年02月16日
    浏览(25)
  • 同一纬度地区经度相差一度相差多少米?

    1、在纬度相等的情况下: 经度每隔0.00001度,距离相差约1米; 每隔0.0001度,距离相差约10米; 每隔0.001度,距离相差约100米; 每隔0.01度,距离相差约1000米; 每隔0.1度,距离相差约10000米。 2、在经度相等的情况下: 纬度每隔0.00001度,距离相差约1.1米; 每隔0.0001度,距离相

    2024年02月09日
    浏览(26)
  • STM32——STM32F103时钟解析(正点原子资料+HAL库代码分析)

    上次写系统时钟解析的时候说出一篇103的时钟解析,我就整理HAL库开发的正点的资料,给小白梳理,我也是小白,不做权威使用。 在 STM32 中,有五个时钟源,为 HSI、HSE、LSI、LSE、PLL。从时钟频率来分可以分为高速时钟源和低速时钟源,在这 5 个中 HIS,HSE 以及 PLL 是高速时钟

    2024年02月19日
    浏览(38)
  • STM32使用HAL库,串口收发一段时间后出错问题及解决

    当STM32使用HAL库进行开发时,偶尔会遇到串口收发数据量大时,会出现问题。比如同时串口同时收发,一段时间后就只能发送,接收不工作。或是只接收,但数据量大时也不工作。下面对这些问题和其解决办法进行整理。 当数据量过大且传输频率快时,串口可能会因为溢出,

    2024年02月16日
    浏览(31)
  • STM32 HAL库 RTC实时时钟打印时间日期 掉电不清零 CubeMX

    启用HSE和HSI 启用RTC和Calendar功能,选择内部唤醒 设置参数 Hour Format:小时格式(12小时或24小时制) Asynchronous Predivider value:异步分频系数 Synchronous Predivider value:同步分频系数 异步分频系数和同步分频系数共同决定RTC的频率。当使用32.768KHz的LSE时,RTC分频后的时钟频率为

    2024年04月27日
    浏览(33)
  • STM32HAL-完全解耦面向对象思维的架构-时间轮片法使用(timeslice)

    目录 概述  一、开发环境 二、STM32CubeMx配置 三、编码  四、运行结果 五、代码解释 六、总结         timeslice是一个时间片轮询框架,完全解耦的时间片轮询框架,非常适合裸机单片机引用。接下来将该框架移植到stm32单片机运行,单片机只需用1个定时器作为时钟即可。

    2024年01月16日
    浏览(32)
  • STM32 HAL库常用GPIO函数以及外部中断配置与响应流程

    Hello,大家好,这是我第一篇博客,写的不好请大家包涵指教,话不多说直接看内容: HAL库常用GPIO函数: void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init) 这个函数主要用来初始化我们需要用到的引脚,设置其工作频率、工作模式、上下拉等参数。如果使用CubeMX配置工程

    2024年02月03日
    浏览(37)
  • STM32-HAL库串口DMA空闲中断的正确使用方式+解析SBUS信号

    能够点进这篇文章的小伙伴肯定是对STM32串口DMA空闲中断接收数据感兴趣的啦,今天用这一功能实现串口解析航模遥控器sbus信号时,查阅了很多网友发布的文章(勤劳的搬运工~),包括自己之前写过一篇博客 STM32_HAL库_CubeMx串口DMA通信(DMA发送+DMA空闲接收不定长数据)。本文

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包