基于STM32的GPS北斗定位系统
摘要:本文介绍了一种基于STM32F103C8T6微控制器的GPS/北斗双模定位系统。系统通过NEO-6M模块接收卫星信号,解析NMEA格式数据,实现时间、位置信息的实时获取。采用OLED显示屏进行本地信息显示,并通过串口通信将数据传输至上位机。硬件设计包括主控模块、GPS模块、显示模块和通信模块,软件部分实现了串口数据接收、NMEA解析、OLED显示和串口发送功能。该系统具有定位精准、低功耗、模
基于STM32的GPS北斗定位系统
1. 系统功能介绍
本系统是一种基于STM32微控制器平台的GPS北斗双模定位系统,结合GPS模块与OLED显示模块,实现对时间信息(年、月、日、时、分、秒)及空间信息(经度、纬度)的实时获取与显示,并将数据通过串口通信方式发送到上位机,实现多终端信息同步查看。
该系统功能主要包括:
- 时间与位置信息获取:通过GPS模块(兼容北斗)实时接收卫星信号,解析NMEA标准语句,提取当前的年月日时分秒及经纬度数据;
- OLED屏幕显示:使用OLED屏幕进行信息的本地可视化展示,包括时间和位置,便于设备独立运行;
- 串口数据上送:将解析后的数据通过STM32的串口接口发送至上位机,便于调试、监控及数据采集存储;
- 模块化结构设计:系统采用模块化设计思想,便于扩展其他功能,如SD卡存储、地图定位、蓝牙传输等。
2. 系统电路设计
本系统的硬件设计围绕STM32微控制器进行展开,外设模块包括GPS模块、OLED显示模块、电源管理模块及串口通信模块。下面详细介绍每一个模块。
2.1 主控模块(STM32F103C8T6)
STM32F103C8T6是一款基于ARM Cortex-M3内核的高性能32位MCU,具有如下特点:
- 主频72MHz,处理能力强,满足GPS数据解析需求;
- 内置USART模块,可直接与GPS模块通信;
- 丰富的GPIO接口,适配OLED模块及其他扩展;
- 低功耗特性,适用于便携式定位设备。
主控芯片是系统核心,负责接收、解析GPS数据,控制OLED显示,并将处理后的数据经串口输出。
2.2 GPS定位模块(NEO-6M)
该模块支持GPS与北斗双模定位,输出标准NMEA格式的定位语句。
-
通信方式:串口(TTL电平);
-
波特率:默认9600bps;
-
输出格式:标准NMEA语句(如GPRMC、GPGGA);
-
天线类型:陶瓷有源天线,增强信号接收;
-
精度:水平精度2.5米,速度精度0.1m/s;
-
数据内容:
$GPRMC:包含时间、定位状态、纬度、经度、速度、日期等;$GPGGA:包含位置精度、卫星数量、HDOP等。
STM32接收该模块输出的串口数据后进行解析,并提取需要的定位信息。
2.3 显示模块(OLED 0.96寸)
OLED采用I2C通信接口,与STM32连接展示当前定位时间及坐标信息。
- 分辨率:128x64;
- 通信方式:I2C(SCL、SDA);
- 工作电压:3.3V;
- 显示内容:年月日、时分秒、经度、纬度。
优点在于功耗低、对比度高、视角广,是嵌入式可视化界面的首选。
2.4 串口通信模块
用于与电脑上位机通信(如串口调试助手):
- 通信方式:USART1(TX/RX);
- 连接方式:TTL转USB模块(如CH340、PL2303);
- 功能:将解析后的定位信息发送给电脑,便于远程监控或调试;
- 波特率:9600bps或115200bps。
2.5 电源管理模块
系统使用5V供电,可通过USB口供电,然后通过AMS1117稳压芯片降压至3.3V供STM32与OLED模块使用。GPS模块本身可接受3.3V至5V范围电压。
3. 程序设计
整个系统程序由以下几个部分组成:
- GPS串口初始化与数据接收;
- NMEA语句解析模块;
- OLED显示模块;
- 串口发送模块;
- 主控制逻辑流程。
程序使用HAL库或标准外设库进行编写。
3.1 串口初始化及接收
void USART1_Init(uint32_t baudrate) {
RCC_APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN;
// 配置PA9为复用推挽输出(TX),PA10为浮空输入(RX)
GPIOA->CRH &= ~((0xF << 4) | (0xF << 8));
GPIOA->CRH |= (0xB << 4) | (0x4 << 8); // PA9: AF_PP, PA10: IN_FLOATING
USART1->BRR = SystemCoreClock / baudrate;
USART1->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_RXNEIE | USART_CR1_UE;
NVIC_EnableIRQ(USART1_IRQn);
}
char GPS_Buffer[100];
uint8_t GPS_Index = 0;
void USART1_IRQHandler(void) {
if (USART1->SR & USART_SR_RXNE) {
char ch = USART1->DR;
if (ch == '\n') {
GPS_Buffer[GPS_Index] = '\0';
GPS_Index = 0;
Parse_GPS(GPS_Buffer);
} else {
GPS_Buffer[GPS_Index++] = ch;
if (GPS_Index >= 100) GPS_Index = 0;
}
}
}
3.2 GPS数据解析模块
void Parse_GPS(char* str) {
if (strncmp(str, "$GPRMC", 6) == 0) {
char* token;
char* fields[12];
uint8_t i = 0;
token = strtok(str, ",");
while (token && i < 12) {
fields[i++] = token;
token = strtok(NULL, ",");
}
if (i >= 10 && strcmp(fields[2], "A") == 0) {
Display_Time(fields[1], fields[9]);
Display_Position(fields[3], fields[4], fields[5], fields[6]);
Send_To_PC(fields[1], fields[3], fields[5]);
}
}
}
3.3 OLED显示模块
void Display_Time(char* time, char* date) {
char buf[20];
sprintf(buf, "Time: %.2s:%.2s:%.2s", time, time+2, time+4);
OLED_ShowString(0, 0, buf);
sprintf(buf, "Date: 20%.2s-%.2s-%.2s", date+4, date+2, date);
OLED_ShowString(0, 2, buf);
}
void Display_Position(char* lat, char* NS, char* lon, char* EW) {
char buf[20];
sprintf(buf, "Lat: %s %s", lat, NS);
OLED_ShowString(0, 4, buf);
sprintf(buf, "Lon: %s %s", lon, EW);
OLED_ShowString(0, 6, buf);
}
3.4 串口数据上送模块
void Send_To_PC(char* time, char* lat, char* lon) {
char msg[100];
sprintf(msg, "Time: %.2s:%.2s:%.2s, Lat: %s, Lon: %s\r\n",
time, time+2, time+4, lat, lon);
for (uint8_t i = 0; i < strlen(msg); i++) {
while (!(USART1->SR & USART_SR_TXE));
USART1->DR = msg[i];
}
}
3.5 主函数结构
int main(void) {
HAL_Init();
SystemClock_Config();
OLED_Init();
USART1_Init(9600);
OLED_ShowString(0, 0, "Waiting for GPS...");
while (1) {
// 所有数据在中断中接收处理
}
}
4. 系统特点与扩展
4.1 系统优势
- 定位精准:采用北斗+GPS双模定位模块,数据稳定;
- 显示直观:OLED显示模块清晰显示时间与位置;
- 调试方便:通过串口发送到上位机,便于数据分析与记录;
- 模块化设计:便于后期扩展其他传感器或功能;
- 低功耗运行:适合便携式设备长期运行。
4.2 可扩展功能
- SD卡存储定位轨迹;
- 蓝牙或WiFi模块无线发送定位信息;
- 结合地图平台进行实时显示;
- 加入按键控制菜单、刷新频率等参数设置;
- 支持断电数据保持与回显。
5. 总结
本设计是一款基于STM32微控制器的GPS/北斗双模定位系统,实现了从卫星信号接收、数据解析、信息显示、到数据发送的完整闭环流程。系统响应快、精度高、界面直观,适合应用于小型定位系统开发、移动终端导航原型、嵌入式通信教学等领域。在保持核心功能稳定的基础上,该系统也预留了丰富的接口与扩展能力,为后期功能拓展提供良好的平台。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)