• 方案介绍
  • 相关推荐
申请入驻 产业图谱

基于STM32的GPS北斗定位系统

04/16 22:55
547
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

基于STM32的GPS北斗定位系统设计

1. 系统功能介绍

随着卫星导航技术的发展,GPS和北斗定位系统已经广泛应用于车辆定位、人员跟踪、智能设备和各类物联网应用中。为了更好地理解和掌握定位系统的工作原理,本设计基于STM32单片机,结合GPS模块和OLED显示模块,完成了一套简易的GPS北斗定位系统。

该系统具备以下功能:

  1. 通过GPS模块获取卫星定位数据,包括年月日、时分秒、经度和纬度信息;
  2. 利用OLED显示屏实时显示获取到的时间与位置信息,用户可以直观地查看定位结果;
  3. 系统通过STM32单片机的串口通信,将解析后的GPS数据发送至电脑上位机,用户可以在串口调试助手中观察定位数据的变化;
  4. 系统具有良好的扩展性,未来可接入GPRS、NB-IoT无线模块,实现远程位置上传。

2. 系统电路设计

2.1 STM32单片机最小系统电路

本系统采用STM32F103C8T6作为主控芯片。其内部具有强大的处理能力和丰富的外设接口,尤其是串口资源,能够方便地与GPS模块和上位机进行数据通信。最小系统包括晶振电路复位电路电源电路。晶振采用8MHz外部晶振,保证系统稳定运行,电源采用5V转3.3V稳压模块,为STM32及外围电路提供电源。

2.2 GPS定位电路

GPS模块是系统的核心器件之一,常用的有NEO-6M、ATGM336H等。该模块通过串口输出NMEA-0183协议的数据,其中包含时间、经纬度、速度、卫星数等信息。本系统主要解析GPRMC(推荐最简定位信息)和GPGGA(定位点信息)语句,以获取时间和经纬度。模块与STM32通过UART接口连接,波特率一般为9600bps。

2.3 OLED显示电路

OLED显示屏采用I2C接口的128×64点阵模块。OLED具有显示清晰、低功耗、视角大等优点。通过I2C总线与STM32相连,占用SCL和SDA两个引脚,能够快速实现定位信息的实时显示。

2.4 串口通信电路

STM32通过USART1与GPS模块通信,同时利用USART2与电脑上位机进行数据交互。电脑端通过串口调试助手即可接收并显示STM32转发的数据。串口部分可通过USB转TTL模块实现与PC的连接。

2.5 电源电路

系统供电采用5V电源输入,经过AMS1117-3.3稳压芯片为STM32、GPS模块和OLED提供3.3V电源,保证各模块稳定运行。


3. 程序设计

3.1 主程序框架

主程序实现对各模块的初始化和数据处理。系统运行流程为:初始化外设 → 接收GPS模块数据 → 解析NMEA语句 → 显示在OLED → 通过串口转发给上位机。

#include "stm32f10x.h"
#include "usart.h"
#include "oled.h"
#include "gps.h"

int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    USART1_Init(9600);   // GPS模块通信串口
    USART2_Init(115200); // 上位机通信串口
    OLED_Init();         // OLED初始化
    GPS_Init();          // GPS数据结构初始化

    while(1)
    {
        if(GPS_NewDataReady())  // 判断是否有新的数据
        {
            GPS_ParseData();    // 解析NMEA语句
            OLED_ShowString(0,0,"Time:");
            OLED_ShowString(40,0,GPS.time);
            OLED_ShowString(0,2,"Lat:");
            OLED_ShowString(40,2,GPS.latitude);
            OLED_ShowString(0,4,"Lon:");
            OLED_ShowString(40,4,GPS.longitude);
            
            // 将数据通过串口发送给上位机
            USART2_SendString("Time:");
            USART2_SendString(GPS.time);
            USART2_SendString("rnLat:");
            USART2_SendString(GPS.latitude);
            USART2_SendString("rnLon:");
            USART2_SendString(GPS.longitude);
            USART2_SendString("rn");
        }
    }
}

3.2 GPS数据接收与解析程序

GPS模块输出的NMEA语句是标准的ASCII码字符串。常用的语句有:

  • $GPRMC:推荐最简定位信息,包含时间、经纬度、速度等。
  • $GPGGA:包含定位点的详细信息。

系统通过串口接收GPS模块的数据,存入缓存区,再进行字符串解析,提取出需要的信息。

char rxBuffer[128];
unsigned char rxIndex = 0;
GPS_Data GPS;

void USART1_IRQHandler(void)
{
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        char data = USART_ReceiveData(USART1);
        if(data == 'n')
        {
            rxBuffer[rxIndex] = '�';
            GPS_ProcessData(rxBuffer);
            rxIndex = 0;
        }
        else
        {
            rxBuffer[rxIndex++] = data;
            if(rxIndex >= sizeof(rxBuffer)) rxIndex = 0;
        }
    }
}

void GPS_ProcessData(char *buf)
{
    if(strstr(buf, "$GPRMC"))
    {
        GPS_ParseRMC(buf);
    }
}

3.3 NMEA语句解析

解析过程主要是对逗号分隔的字符串进行分解,然后提取出时间、经度和纬度信息。

void GPS_ParseRMC(char *buf)
{
    char *p = strtok(buf, ",");
    int fieldIndex = 0;
    while(p != NULL)
    {
        switch(fieldIndex)
        {
            case 1: strcpy(GPS.time, p); break;       // UTC时间
            case 3: strcpy(GPS.latitude, p); break;   // 纬度
            case 5: strcpy(GPS.longitude, p); break;  // 经度
        }
        p = strtok(NULL, ",");
        fieldIndex++;
    }
}

3.4 OLED显示程序

OLED采用I2C接口驱动,系统将解析出的数据实时显示。

void OLED_ShowGPS(void)
{
    OLED_ShowString(0,0,"Time:");
    OLED_ShowString(40,0,GPS.time);
    OLED_ShowString(0,2,"Lat:");
    OLED_ShowString(40,2,GPS.latitude);
    OLED_ShowString(0,4,"Lon:");
    OLED_ShowString(40,4,GPS.longitude);
}

3.5 串口通信程序

STM32通过USART2将数据转发给上位机。

void USART2_SendString(char *str)
{
    while(*str)
    {
        USART_SendData(USART2, *str++);
        while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
    }
}

4. 总结

本设计基于STM32单片机实现了一个GPS北斗定位系统,具备定位信息采集、OLED显示和串口转发等功能。系统采用NEO-6M等常见GPS模块作为信号源,通过解析NMEA协议获取所需数据,能够满足日常的定位和实验需求。

与传统单片机控制系统相比,本系统不仅展示了STM32强大的外设接口能力,还体现了GPS技术在实际应用中的重要性。通过该设计,学生和研究人员可以深入理解GPS模块的通信原理、NMEA语句解析方法以及嵌入式系统在物联网中的应用场景。

未来,本系统可扩展至无线数据传输,将位置信息上传至云平台,结合地图服务实现实时定位和轨迹记录,进一步提升其实用价值和应用范围。

相关推荐