久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stm32 GPS模塊實驗 ATK-NEO-6M
[打印本頁]
作者:
Luck乄風云
時間:
2017-7-2 19:32
標題:
stm32 GPS模塊實驗 ATK-NEO-6M
單片機源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "usmart.h"
#include "usart3.h"
#include "key.h"
#include "string.h"
#include "gps.h"
#include "ff.h"
#include "exfuns.h"
//ALIENTEK 探索者STM32F407開發板 擴展實驗2
//ATK-NEO-6M GPS模塊測試實驗 -庫函數版本
u8 USART1_TX_BUF[USART3_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:%.7f %1c ",tp/=100000,gpsx.ewhemi); //得到經度字符串
LCD_ShowString(30,130,200,16,16,dtbuf);
tp=gpsx.latitude;
sprintf((char *)dtbuf,"Latitude:%.7f %1c ",tp/=100000,gpsx.nshemi); //得到緯度字符串
LCD_ShowString(30,150,200,16,16,dtbuf);
tp=gpsx.altitude;
sprintf((char *)dtbuf,"Altitude:%.1fm ",tp/=10); //得到高度字符串
LCD_ShowString(30,170,200,16,16,dtbuf);
tp=gpsx.speed;
sprintf((char *)dtbuf,"Speed:%.3fkm/h ",tp/=1000); //得到速度字符串
LCD_ShowString(30,190,200,16,16,dtbuf);
if(gpsx.fixmode<=3) //定位狀態
{
sprintf((char *)dtbuf,"Fix Mode:%s",fixmode_tbl[gpsx.fixmode]);
LCD_ShowString(30,210,200,16,16,dtbuf);
}
sprintf((char *)dtbuf,"Valid satellite:%02d",gpsx.posslnum); //用于定位的衛星數
LCD_ShowString(30,230,200,16,16,dtbuf);
sprintf((char *)dtbuf,"Visible satellite:%02d",gpsx.svnum%100); //可見衛星數
LCD_ShowString(30,250,200,16,16,dtbuf);
sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //顯示UTC日期
//printf("year2:%d\r\n",gpsx.utc.year);
LCD_ShowString(30,270,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,290,200,16,16,dtbuf);
}
int main(void)
{
u8 record=0;
u16 i,rxlen,j=0;
u16 r=0;
u16 lenx;
u8 key=0XFF;
u8 upload=0;
u8 temp[24];
u32 total,free;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(168); //初始化延時函數
uart_init(115200); //初始化串口波特率為115200
usart3_init(9600); //初始化串口3波特率為9600
usmart_dev.init(84); //初始化USMART
LED_Init(); //初始化LED
KEY_Init(); //初始化按鍵
LCD_Init(); //初始化LCD
usmart_dev.init(72); //初始化USMART
exfuns_init(); //為fatfs相關變量申請內存
f_mount(fs[0],"0:",1); //掛載SD卡
while(SD_Init()) //初始化SD卡失敗
{
LCD_ShowString(60,150,240,16,16,"SD Init Error!");
delay_ms(200);
}
//如果之前有記錄,重新上電先算出之前記錄的條數,非常重要
f_open(file, "gps_log.gtxt", FA_READ );
r=(*file).fsize/64;
f_close(file); //關閉文件
POINT_COLOR=RED;
LCD_ShowString(30,20,200,16,16,"ALIENTEK STM32F4 ^_^");
LCD_ShowString(30,40,200,16,16,"NE0-6M 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(Ublox_Cfg_Rate(1000,1)!=0) //設置定位信息更新速度為1000ms,順便判斷GPS模塊是否在位.
{
LCD_ShowString(30,120,200,16,16,"NEO-6M Setting...");
while((Ublox_Cfg_Rate(1000,1)!=0)&&key) //持續判斷,直到可以檢查到NEO-6M,且數據保存成功
{
usart3_init(9600); //初始化串口3波特率為9600(EEPROM沒有保存數據的時候,波特率為9600.)
Ublox_Cfg_Prt(38400); //重新設置模塊的波特率為38400
Ublox_Cfg_Tp(1000000,100000,1); //設置PPS為1秒鐘輸出1次,脈沖寬度為100ms
key=Ublox_Cfg_Cfg_Save(); //保存配置
}
LCD_ShowString(30,120,200,16,16,"NEO-6M Set Done!!");
delay_ms(500);
LCD_Fill(30,120,30+200,120+16,WHITE);//清除顯示
}
while(1)
{
delay_ms(1);
if(USART3_RX_STA&0X8000) //接收到一次數據了
{
rxlen=USART3_RX_STA&0X7FFF; //得到數據長度
for(i=0;i<rxlen;i++)USART1_TX_BUF[i]=USART3_RX_BUF[i];
USART3_RX_STA=0; //啟動下一次接收
USART1_TX_BUF[i]=0; //自動添加結束符
GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF);//分析字符串
Gps_Msg_Show(); //顯示信息
//SD卡信息顯示
exf_getfree("0",&total,&free); //得到SD卡總容量和剩余容量
LCD_ShowString(30, 330,200,16,16,"SD Card:");
sprintf(temp,"%d/%dMB",free>>10,total>>10);
LCD_ShowString(30+80,330,200,16,16,temp);
if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//發送接收到的數據到串口1
}
if(j>=1000) //大約1s記錄一次
{
j=0;
if(record)
{
r++;
f_lseek(file,(*file).fsize); //移動指針
f_printf(file,"記錄%03d 自動 ",r); //寫序號
sprintf(temp,"%04d-%02d-%02d ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //日期
f_write(file,temp,11,&br); //日期
sprintf(temp,"%02d:%02d:%02d ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //時間
f_write(file,temp,9,&br); //時間
sprintf(temp,"(%03.7f,",gpsx.longitude/100000+gpsx.longitude%100000/100000.0); //得到經度字符串
f_write(file,temp,13,&br); //經度
sprintf(temp,"%02.7f)",gpsx.latitude/100000+gpsx.latitude%100000/100000.0); //得到緯度字符串
f_write(file,temp,12,&br); //緯度
f_printf(file,"\r\n"); //回車換行
}
}
j++;
key=KEY_Scan(0);
if(key==KEY0_PRES)
{
upload=!upload;
POINT_COLOR=RED;
if(upload)LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:ON ");
else LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF");
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
擴展實驗2 ATK-NEO-6M GPS模塊實驗(文件記錄).7z
(893.37 KB, 下載次數: 87)
2022-12-13 04:05 上傳
點擊文件名下載附件
gps
下載積分: 黑幣 -5
作者:
虓尨
時間:
2017-12-22 11:50
樓樓有沒有proteus的仿真圖??proteus元件也行
作者:
虓尨
時間:
2017-12-22 11:51
ATK-NEO-6M的GPS在proteus怎么找啊??
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本在线网站
|
欧美成年人视频
|
国产精品永久久久久久久久久
|
日日干天天操
|
青娱乐99
|
99在线精品视频
|
亚洲第一视频网站
|
av大全在线观看
|
伊人久久av
|
欧美色综合天天久久综合精品
|
国产成人精品视频
|
天天插天天狠天天透
|
四虎黄色片
|
国v精品久久久网
|
欧美三级 欧美一级
|
黄色成人在线
|
国产精品2
|
色综合国产
|
日韩国产中文字幕
|
亚洲成人黄色
|
99九九久久
|
日本不卡视频在线观看
|
成人av一区二区三区在线观看
|
日韩免费精品视频
|
国产精品久久久久久久久久久久久
|
av网址在线免费观看
|
在线视频91
|
亚洲精品18在线观看
|
国产又粗又大又长
|
国产成人三级一区二区在线观看一
|
黄色片在线看
|
国产精品一区在线播放
|
久久综合一区
|
日韩专区在线观看
|
亚洲视频中文字幕
|
日本在线观看网站
|
欧美成人精品欧美一级私黄
|
欧美9999
|
欧美日韩四区
|
91国产丝袜在线播放
|
四虎影院永久免费
|