当前位置: 首页 > news >正文

基于STM32的GPS北斗定位系统

基于STM32的GPS北斗定位系统

1 功能介绍

本设计基于STM32单片机,实现了一个小型的GPS/北斗定位系统。系统通过GPS模块获取当前的时间信息(年月日时分秒)以及地理位置信息(经度、纬度),并在OLED液晶屏上进行实时显示。同时,系统还通过串口通信将数据传输至电脑上位机,用户可以通过串口调试助手实时查看定位结果。

该系统具有以下主要功能:

  1. 利用GPS模块获取时间与位置参数,包括经度、纬度、日期与时间。
  2. 将接收到的数据经过STM32单片机处理后,实时显示在OLED液晶屏上。
  3. 通过STM32串口功能,将解析后的数据发送到电脑上位机,便于调试和保存。
  4. 系统体积小巧、功耗低,适合移动定位与实验教学使用。

该系统不仅可以作为基础的定位应用实验平台,还可以扩展至智能交通、车辆定位、户外导航等实际应用中。


2 系统电路设计

系统电路主要由三大部分组成:STM32最小系统电路、GPS定位模块电路、OLED液晶显示电路,同时还包括电源电路和串口通信电路。下面分别介绍各个模块的设计。

2.1 STM32最小系统电路

STM32F103C8T6单片机作为主控芯片,负责数据的采集、处理与显示。最小系统电路主要包括:

  1. 时钟电路:采用外部8MHz晶振,通过PLL倍频得到72MHz主频,保证系统运算能力。
  2. 复位电路:由电容、电阻和复位按键构成,保证系统在上电和故障时能够正常复位。
  3. 电源电路:STM32工作电压为3.3V,因此需要稳压芯片(如AMS1117-3.3)将5V电压转换为3.3V。

2.2 GPS定位模块电路

GPS模块(如NEO-6M、ATGM336H等)通过串口与STM32相连,负责接收卫星信号并输出NMEA标准格式的定位数据。

  1. GPS模块一般通过UART接口输出数据,波特率常用9600bps。
  2. TXD引脚连接STM32的USART1_RX引脚,用于数据接收。
  3. 模块工作电压为3.3V,部分模块自带稳压芯片,可兼容5V输入。

2.3 OLED显示电路

OLED液晶屏采用0.96英寸128×64点阵的I2C接口OLED模块,具有体积小、功耗低、对比度高的特点。

  1. 通过I2C总线与STM32相连,SCL和SDA分别接单片机的I2C引脚。
  2. 显示内容包括时间信息(年月日时分秒)和经纬度信息。
  3. 显示采用字符模式和适当的分行布局,保证清晰易读。

2.4 串口通信电路

STM32通过USART1接口与电脑通信。

  1. STM32的TXD和RXD分别通过USB转TTL模块(如CH340/CP2102)与电脑USB口相连。
  2. 在上位机串口调试助手中,可以实时查看STM32输出的定位数据。

2.5 电源电路

系统供电为5V,来自USB接口或外部电源。通过AMS1117-3.3稳压芯片,分别为STM32和GPS模块提供3.3V电压。


3 程序设计

程序设计分为以下几个主要部分:串口初始化、GPS数据接收与解析、OLED显示以及上位机数据发送。

3.1 串口初始化模块

串口用于与GPS模块和上位机通信,需要初始化波特率、数据位、校验位等参数。

void USART1_Init(u32 bound)
{// GPIO端口配置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);// TX PA9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);// RX PA10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);// 串口参数配置USART_InitStructure.USART_BaudRate = bound;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);
}

3.2 GPS数据接收与解析模块

GPS模块输出的是标准的NMEA格式字符串,例如:

$GPRMC,092751.000,A,5321.6802,N,00630.3372,W,0.06,31.66,280511,,,A*45

其中包含时间、经纬度等信息。STM32通过串口接收后,需要对其进行解析。

char rxBuffer[100];
u8 rxIndex = 0;void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){char res = USART_ReceiveData(USART1);if(res == '\n'){rxBuffer[rxIndex] = '\0';ParseGPS(rxBuffer);rxIndex = 0;}else{rxBuffer[rxIndex++] = res;}}
}// GPS数据解析函数
void ParseGPS(char *buf)
{if(strstr(buf,"GPRMC")){char *p = strtok(buf, ",");int index = 0;while(p){if(index == 1) printf("UTC时间: %s\n", p);if(index == 3) printf("纬度: %s\n", p);if(index == 5) printf("经度: %s\n", p);p = strtok(NULL, ",");index++;}}
}

3.3 OLED显示模块

OLED用于显示日期时间和经纬度信息,便于用户直观查看。

void OLED_ShowGPSInfo(char* time, char* lat, char* lon)
{OLED_Clear();OLED_ShowString(0,0,"GPS Info:");OLED_ShowString(0,2,"Time:");OLED_ShowString(40,2,time);OLED_ShowString(0,4,"Lat:");OLED_ShowString(40,4,lat);OLED_ShowString(0,6,"Lon:");OLED_ShowString(40,6,lon);
}

3.4 上位机串口输出模块

STM32将解析后的GPS数据通过串口发送至电脑,可以在串口调试助手中查看。

void USART1_SendString(char *str)
{while(*str){USART_SendData(USART1, *str++);while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);}
}

在主程序中调用:

int main(void)
{USART1_Init(9600);OLED_Init();while(1){if(gpsDataReady){OLED_ShowGPSInfo(gpsTime, gpsLat, gpsLon);USART1_SendString("Time: ");USART1_SendString(gpsTime);USART1_SendString("\r\nLat: ");USART1_SendString(gpsLat);USART1_SendString("\r\nLon: ");USART1_SendString(gpsLon);USART1_SendString("\r\n");gpsDataReady = 0;}}
}

4 总结

基于STM32的GPS北斗定位系统通过STM32单片机、GPS模块和OLED显示模块的协同工作,实现了从数据采集、解析到显示与上传的完整功能链。系统能够实时获取年月日时分秒及经纬度信息,并直观地显示在OLED屏幕上,同时通过串口传输至电脑,便于记录与调试。

本系统设计简洁、功能实用,既可作为教学实验平台,也可以作为嵌入式定位应用的原型机。未来还可以扩展SD卡数据存储、GSM短信发送或WiFi联网功能,从而实现更加智能化和多样化的应用场景。


文章转载自:

http://ShRj90uY.mrkbz.cn
http://jQis3DJO.mrkbz.cn
http://oPDFeGwW.mrkbz.cn
http://BKW1hEMP.mrkbz.cn
http://zcwgb7Ec.mrkbz.cn
http://ao1GJ96k.mrkbz.cn
http://NrjoNeRE.mrkbz.cn
http://5EHyBCZ0.mrkbz.cn
http://T1TFLdB5.mrkbz.cn
http://VEfrIEdL.mrkbz.cn
http://NKA1WXbb.mrkbz.cn
http://UGRLI8FP.mrkbz.cn
http://8jBalAA7.mrkbz.cn
http://dPr4WnTO.mrkbz.cn
http://QtPbIzRU.mrkbz.cn
http://6q8FS9VV.mrkbz.cn
http://7kq38t8o.mrkbz.cn
http://JTT3ABuR.mrkbz.cn
http://65HtcsKN.mrkbz.cn
http://2YqNbem6.mrkbz.cn
http://jcGJGKeb.mrkbz.cn
http://oJdEvj4b.mrkbz.cn
http://JlVsMG5s.mrkbz.cn
http://TcZYKFuA.mrkbz.cn
http://aHfSdX1h.mrkbz.cn
http://J2ttrR4E.mrkbz.cn
http://8C4Kbti5.mrkbz.cn
http://fgvYsgUJ.mrkbz.cn
http://Tricp83Z.mrkbz.cn
http://zNCsOCuc.mrkbz.cn
http://www.dtcms.com/a/375482.html

相关文章:

  • 2025年大陆12寸晶圆厂一览
  • VMware Workstation Pro 安装教程
  • Java Spring @Retention三种保留策略
  • 低代码平台的核心组件与功能解析:红迅低代码平台实战探秘
  • linux sudo权限
  • PM2 管理后端(设置项目自启动)
  • 中国香港服务器中常提到的双向/全程CN2是什么意思?
  • DCS+PLC协同优化:基于MQTT的分布式控制系统能效提升案例
  • Backend
  • 分布式专题——6 Redis缓存设计与性能优化
  • 《智能网联汽车交通仿真软件可信度评估》团标启动会圆满举办
  • 无人机云台电压类型及测量方法
  • 光伏无人机3D设计——高效出方案的快速设计方式!
  • K8s角色权限管理全解析
  • Postgresql 发送数据到Splunk
  • [网络入侵AI检测] CNN-LSTM混合模型
  • 使用列表推导式取代map和filter的最佳实践 (Effective Python 第27条)
  • Promise状态和方法都有哪些,以及实现原理
  • jquery基础知识总结
  • Qwen-VL系列-国产大模型开眼看世界
  • OpenEuler部署gitlab(小白的“升级打怪”成长之路)
  • 内存视角看「类、原型、实例」
  • 「类 vs 实例」对比 ,「类 - 原型 - 实例」的关系
  • sft冷启动时数据集构造需要注意哪些因素?为什么要做数据清洗与均衡采样?
  • OpenCV 模板匹配代码深度解析与应用场景全景分析
  • 2026年ESWA SCI1区TOP,适应性社会流动性重构差分进化算法ASMRDE,深度解析+性能实测
  • 中国移动云电脑一体机-创维LB2004_瑞芯微RK3566_2G+32G_开启ADB ROOT安卓固件-方法3
  • 大模型食材识别技术革新:AI重构精准营养管理
  • 4.6 变体
  • 智能充气泵PCBA方案