初级会员

- 积分
- 66
- 金钱
- 66
- 注册时间
- 2019-4-13
- 在线时间
- 35 小时
|

楼主 |
发表于 2019-8-21 21:20:25
|
显示全部楼层
main函数如下#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "usmart.h"
#include "malloc.h"
#include "sdio_sdcard.h"
#include "w25qxx.h"
#include "ff.h"
#include "exfuns.h"
#include "text.h"
#include "usart3.h"
#include "string.h"
#include "touch.h"
#include "lora_app.h"
#include "gps.h"
#include "usart2.h"
u8 USART1_TX_BUF[USART2_MAX_RECV_LEN]; //串口1,发送缓存区
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;
POINT_COLOR=BLUE;
tp=gpsx.longitude;
sprintf((char *)dtbuf,"Longitude:%.5f %1c ",tp/=100000,gpsx.ewhemi); //得到经度字符串
LCD_ShowString(30,70,200,16,16,dtbuf);
tp=gpsx.latitude;
sprintf((char *)dtbuf,"Latitude:%.5f %1c ",tp/=100000,gpsx.nshemi); //得到纬度字符串
LCD_ShowString(30,90,200,16,16,dtbuf);
tp=gpsx.altitude;
sprintf((char *)dtbuf,"Altitude:%.1fm ",tp/=10); //得到高度字符串
LCD_ShowString(30,110,200,16,16,dtbuf);
tp=gpsx.speed;
sprintf((char *)dtbuf,"Speed:%.3fkm/h ",tp/=1000); //得到速度字符串
LCD_ShowString(30,130,200,16,16,dtbuf);
if(gpsx.fixmode<=3) //定位状态
{
sprintf((char *)dtbuf,"Fix Mode:%s",fixmode_tbl[gpsx.fixmode]);
LCD_ShowString(30,150,200,16,16,dtbuf);
}
sprintf((char *)dtbuf,"GPS+BD Valid satellite:%02d",gpsx.posslnum); //用于定位的GPS卫星数
LCD_ShowString(30,170,200,16,16,dtbuf);
sprintf((char *)dtbuf,"GPS Visible satellite:%02d",gpsx.svnum%100); //可见GPS卫星数
LCD_ShowString(30,190,200,16,16,dtbuf);
sprintf((char *)dtbuf,"BD Visible satellite:%02d",gpsx.beidou_svnum%100); //可见北斗卫星数
LCD_ShowString(30,210,200,16,16,dtbuf);
sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //显示UTC日期
LCD_ShowString(30,230,200,16,16,dtbuf);
sprintf((char *)dtbuf,"UTC Time:%02d:%02d:%02d ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //显示UTC时间
LCD_ShowString(30,250,200,16,16,dtbuf);
}
//主函数
int main(void)
{
u8 key=0;
u8 fontok=0;
u16 i,rxlen;
u16 lenx;
// u8 key=0XFF;
u8 upload=0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LCD_Init();
tp_dev.init(); //初始化触摸屏
LED_Init();
KEY_Init();
W25QXX_Init(); //初始化W25Q128
my_mem_init(SRAMIN); //初始化内部内存池
exfuns_init(); //为fatfs相关变量申请内存
usmart_dev.init(72); //初始化USMART
usart2_init(38400); //初始化串口3
fontok=font_init(); //检查字库是否OK
POINT_COLOR=RED;
LCD_ShowString(30,20,200,16,16,"ALIENTEK STM32F1 ^_^");
LCD_ShowString(30,40,200,16,16,"S1216F8 GPS TEST");
LCD_ShowString(30,60,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,80,200,16,16,"KEY0:Upload NMEA Data SW");
LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF");
if(SkyTra_Cfg_Rate(5)!=0) //设置定位信息更新速度为5Hz,顺便判断GPS模块是否在位.
{
LCD_ShowString(30,120,200,16,16,"SkyTraF8-BD Setting...");
do
{
usart2_init(9600); //初始化串口3波特率为9600
SkyTra_Cfg_Prt(3); //重新设置模块的波特率为38400
usart2_init(38400); //初始化串口3波特率为38400
key=SkyTra_Cfg_Tp(100000); //脉冲宽度为100ms
}
while(SkyTra_Cfg_Rate(5)!=0&&key!=0);//配置SkyTraF8-BD的更新速率为5Hz
LCD_ShowString(30,120,200,16,16,"SkyTraF8-BD Set Done!!");
delay_ms(500);
LCD_Fill(30,120,30+200,120+16,WHITE);//清除显示
}
if(USART2_RX_STA&0X8000) //接收到一次数据了
rxlen=USART2_RX_STA&0X7FFF; //得到数据长度
for(i=0;i<rxlen;i++)USART1_TX_BUF[i]=USART2_RX_BUF[i];
USART2_RX_STA=0; //启动下一次接收
USART1_TX_BUF[i]=0; //自动添加结束符
GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF);//分析字符串
Gps_Msg_Show(); //显示信息
if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//发送接收到的数据到串口1
u8 t=0;
// u8 key=0;
u8 netpro=0;
LCD_Clear(WHITE);
POINT_COLOR=RED;
Show_Str_Mid(0,30,"ATK-LORA-01 测试程序",16,240);
while(LoRa_Init())//初始化ATK-LORA-01模块
{
Show_Str(40+30,50+20,200,16,"未检测到模块!!!",16,0);
delay_ms(300);
Show_Str(40+30,50+20,200,16," ",16,0);
}
Show_Str(40+30,50+20,200,16,"检测到模块!!!",16,0);
delay_ms(500);
Menu_ui();//主界面显示
while(1)
{
if(USART2_RX_STA&0X8000) //接收到一次数据了
rxlen=USART2_RX_STA&0X7FFF; //得到数据长度
for(i=0;i<rxlen;i++)USART1_TX_BUF[i]=USART2_RX_BUF[i];
USART2_RX_STA=0; //启动下一次接收
USART1_TX_BUF[i]=0; //自动添加结束符
GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF);//分析字符串
Gps_Msg_Show(); //显示信息
if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//发送接收到的数据到串口1
delay_ms(100);
key = KEY_Scan(0);
if(key)
{
Show_Str(30+10,95+45+netpro*25,200,16," ",16,0);//清空之前的显示
if(key==KEY0_PRES)//KEY0按下
{
if(netpro<6)
netpro++;
else
netpro=0;
}
else if(key==KEY1_PRES)//KEY1按下
{
if(netpro>0)netpro--;
else netpro=6;
}
else if(key==WKUP_PRES)//KEY_UP按下
{
if(netpro==0)//进入通信选项
{
LoRa_Process();//开始数据测试
netpro=0;//索引返回第0
Menu_ui();
}
else
{
Show_Str(30+40,95+45+netpro*25+2,200,16,"________",16,1);//显示下划线,表示选中
Show_Str(30+10,95+45+netpro*25,200,16,"→",16,0);//指向新条目
Menu_cfg(netpro);//参数配置
LCD_Fill(30+40,95+45+netpro*25+2+15,30+40+100,95+45+netpro*25+2+18,WHITE);//清除下划线显示
}
}
Show_Str(30+10,95+45+netpro*25,200,16,"→",16,0);//指向新条目
}
t++;
if(t==30)
{
t=0;
LED1=~LED1;
}
delay_ms(10);
}
}
|
|