OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2894|回复: 2

STM32F103+GPS+0.96oled使用串口1

[复制链接]

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2018-1-31
在线时间
13 小时
发表于 2018-2-2 16:26:16 | 显示全部楼层 |阅读模式
1金钱
新人小白一枚,C语音不是很懂,这样修改原子哥的GPS显示程序(红色字体本小白改的),不知有没有错,望论坛里的各位大神指点迷津,小弟在此谢过!
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "usart1.h"           
#include "gps.h"
#include "string.h"
#include "key.h"
//ALIENTEK Mini STM32开发板扩展实验12
//ATK-NEO-6M GPS模块实验-库函数版本
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司  

nmea_msg gpsx;                                                                                         //GPS信息
__align(4) u8 dtbuf[50];                                                                   //打印缓存器
const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "};        //fix mode字符串
         
//显示GPS定位信息
void Gps_Msg_Show(void)
{
         float tp;                           
        tp=gpsx.longitude;           
    //得到经度字符串        
    OLED_ShowNum(63,22,(gpsx.longitude),3,12);        
        tp=gpsx.latitude;           
        //得到纬度字符串
    OLED_ShowNum(57,12,(gpsx.latitude),3,12);               
        tp=gpsx.altitude;           
    //得到高度字符串
    OLED_ShowNum(87,42(gpsx.altitude),4,12);
        tp=gpsx.speed;           
    //得到速度字符串         
    OLED_ShowNum(75,32,(gpsx.speed),3,12);        
        if(gpsx.fixmode<=3)//定位状态                                                                                                
        {  //gpsx.fixmode
      OLED_ShowNum(30,130,(gpsx.fixmode));                        
        }                    
           //gpsx.posslnum
      OLED_ShowNum(69,0,(gpsx.posslnum),2,12);         //用于定位的卫星数   
         //gpsx.svnum
      OLED_ShowNum(69,0,(gpsx.svnum),3,12);         //可见卫星数         
         //gpsx.utc.year,gpsx.utc.month,gpsx.utc.date        
      OLED_ShowNum(3,0,(gpsx.utc.year,gpsx.utc.month,gpsx.utc.date        ),4,12);         //显示UTC日期            
         //gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec        //显示UTC时间
      OLED_ShowNum(3,0,(gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec),4,12);                  
}         
//暂存数组
u8 TEMP_BUF[USART1_MAX_RECV_LEN];
int main(void)
{
        u16 i,rxlen;
        u16 lenx;
        u8 key;
        delay_init();                        //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
         USART1_Init(38400);                //初始化串口1
        LED_Init();                                //初始化与LED连接的硬件接口
        OLED_Init();                //初始化OLED
        /*OLED_DrawPoint(27,8,1);//第一行显示框架
        OLED_DrawPoint(41,8,1);
        OLED_DrawPoint(115,7,1);
        OLED_DrawPoint(115,4,1);
        OLED_DrawPoint(101,7,1);
        OLED_DrawPoint(101,4,1);
        OLED_Fill(61,2,67,2,1);  //天线标志
        OLED_DrawPoint(62,3,1);
        OLED_DrawPoint(66,3,1);
        OLED_Fill(63,4,65,4,1);
        OLED_Fill(64,5,64,9,1);*/
        if(Ublox_Cfg_Rate(1000,1)!=0)        //设置定位信息更新速度为1000ms,顺便判断GPS模块是否在位.
        {
                   OLED_ShowString(30,120,200,16,16,"NEO-6M Setting...");
                while((Ublox_Cfg_Rate(1000,1)!=0)&&key)        //持续判断,直到可以检查到NEO-6M,且数据保存成功
                {
                        USART1_Init(9600);                                //初始化串口1波特率为9600(EEPROM没有保存数据的时候,波特率为9600.)
                          Ublox_Cfg_Prt(38400);                        //重新设置模块的波特率为38400
                        USART1_Init(38400);                                //初始化串口1波特率为38400
                        Ublox_Cfg_Tp(1000000,100000,1);        //设置PPS为1秒钟输出1次,脉冲宽度为100ms            
                        key=Ublox_Cfg_Cfg_Save();                //保存配置  
                }                                                   
                   OLED_ShowString(30,120,200,16,16,"NEO-6M Set Done!!");
                delay_ms(500);
                OLED_Fill(30,120,30+200,120+16,WHITE);//清除显示
        }
        while(1)
        {               
                delay_ms(1);
                if(USART1_RX_STA&0X8000)                //接收到一次数据了
                {
                        rxlen=USART1_RX_STA&0X7FFF;        //得到数据长度
                        for(i=0;i<rxlen;i++)TEMP_BUF=USART1_RX_BUF;           
                         USART1_RX_STA=0;                           //启动下一次接收
                        TEMP_BUF=0;                                //自动添加结束符
                        GPS_Analysis(&gpsx,(u8*)TEMP_BUF);//分析字符串
                        Gps_Msg_Show();                                //显示信息         
                 }
                if((lenx%500)==0)LED0=!LED0;                                             
                lenx++;        
        }                        
}        


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-2-3 01:29:03 | 显示全部楼层
下载验证就知道有没有错了
回复

使用道具 举报

4

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2018-1-31
在线时间
13 小时
 楼主| 发表于 2018-2-3 10:38:56 | 显示全部楼层
正点原子 发表于 2018-2-3 01:29
下载验证就知道有没有错了

好的,,,,,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 17:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表