OpenEdv-开源电子网

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

将GPS数据通过NRF24L01发送到另外一块mini版

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-9-21
在线时间
0 小时
发表于 2015-3-30 15:19:47 | 显示全部楼层 |阅读模式
5金钱
我想将“GPS经纬度”信息通过NRF24L01发送到另外一块mini版在通过串口传给电脑。。但是新手,弄了好长时间也没弄对。。这个接收的数据就是不对。。我把代码放上来求助。。<br />
#include "led.h"<br />
#include "delay.h"<br />
#include "sys.h"<br />
#include "usart.h"<br />
#include "lcd.h"<br />
#include "usart2.h"         &nbsp;&nbsp;<br />
#include "gps.h"<br />
#include "string.h"<br />
#include "key.h"<br />
&nbsp;#define TX_OK &nbsp;         0x20 &nbsp;//TX发送完成中断<br />
&nbsp;static float m1=0;<br />
&nbsp;static float m2=0;<br />
u8 USART1_TX_BUF[USART2_MAX_RECV_LEN];                                         //串口1,发送缓存区<br />
nmea_msg gpsx;                                                                                         //GPS信息<br />
__align(4) u8 dtbuf[50]; &nbsp;                                                                 //打印缓存器<br />
const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "};        //fix mode字符串&nbsp;<br />
//显示GPS定位信息&nbsp;<br />
<span style="color:#E53333;">void Gps_Msg_Show(void)</span><br />
<span style="color:#E53333;">{//下个一个红色大括号表示<span style="color:#E53333;">&nbsp;Gps_Msg_Show</span>。</span><br />
&nbsp;        float tp;                 &nbsp;&nbsp;<br />
POINT_COLOR=BLUE; &nbsp;        &nbsp;<br />
tp=gpsx.longitude;         &nbsp;<br />
sprintf((char *)dtbuf,"Longitude:%.5f %1c &nbsp; ",tp/=100000,gpsx.ewhemi);        //得到经度字符串<br />
<span style="background-color:#E53333;">m1=tp; &nbsp;</span> &nbsp; &nbsp; &nbsp;&nbsp;<br />
//printf("%.5f\r\n",tp);<br />
&nbsp;        LCD_ShowString(30,130,200,16,16,dtbuf);                  &nbsp;&nbsp;<br />
tp=gpsx.latitude;         &nbsp;&nbsp;<br />
sprintf((char *)dtbuf,"Latitude:%.5f %1c &nbsp; ",tp/=100000,gpsx.nshemi);        //得到纬度字符串<br />
<span style="background-color:#E53333;">m2=tp;</span><br />
&nbsp;        //printf("%.5f\r\n",tp);<br />
LCD_ShowString(30,150,200,16,16,dtbuf);                 &nbsp;<br />
tp=gpsx.altitude;         &nbsp;&nbsp;<br />
&nbsp;        sprintf((char *)dtbuf,"Altitude:%.1fm &nbsp; &nbsp; ",tp/=10);         &nbsp; &nbsp;                        //得到高度字符串<br />
LCD_ShowString(30,170,200,16,16,dtbuf);                                  &nbsp;&nbsp;<br />
tp=gpsx.speed;         &nbsp;&nbsp;<br />
&nbsp;        sprintf((char *)dtbuf,"Speed:%.3fkm/h &nbsp; &nbsp; ",tp/=1000);                 &nbsp; &nbsp;                //得到速度字符串        &nbsp;<br />
&nbsp;        LCD_ShowString(30,190,200,16,16,dtbuf);                                          &nbsp; &nbsp;<br />
if(gpsx.fixmode&lt;=3)                                                                                                                //定位状态<br />
{ &nbsp;<br />
sprintf((char *)dtbuf,"Fix Mode:%s",fixmode_tbl[gpsx.fixmode]); <br />
&nbsp;        LCD_ShowString(30,210,200,16,16,dtbuf);                         &nbsp;&nbsp;<br />
}                  &nbsp;&nbsp;<br />
sprintf((char *)dtbuf,"Valid satellite:%02d",gpsx.posslnum);                         //用于定位的卫星数<br />
&nbsp;        LCD_ShowString(30,230,200,16,16,dtbuf);         &nbsp; &nbsp;<br />
sprintf((char *)dtbuf,"Visible satellite:%02d",gpsx.svnum%100);                         //可见卫星数<br />
&nbsp;        LCD_ShowString(30,250,200,16,16,dtbuf);                &nbsp;<br />
sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d &nbsp; ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date);        //显示UTC日期<br />
//printf("year2:%d\r\n",gpsx.utc.year);<br />
LCD_ShowString(30,270,200,16,16,dtbuf);                 &nbsp; &nbsp;<br />
sprintf((char *)dtbuf,"UTC Time:%02d:%02d:%02d &nbsp; ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec);        //显示UTC时间<br />
&nbsp;         LCD_ShowString(30,290,200,16,16,dtbuf);                 &nbsp;<br />
<span style="color:#E53333;">}        &nbsp;<br />
<br />
<br />
</span><br />
&nbsp;int main(void)<br />
&nbsp;{&nbsp;<br />
<br />
u16 t=0;                        &nbsp;<br />
u8 tmp_buf[33];<br />
u8 buffer;<br />
u16 i,rxlen;<br />
u16 lenx;<br />
u8 key=0XFF;<br />
u8 upload=0;<br />
delay_init();         &nbsp; &nbsp;         //延时函数初始化         &nbsp;<br />
uart_init(38400);                 //串口初始化为9600<br />
USART2_Init(38400);        //初始化串口2<br />
LED_Init();                                //初始化与LED连接的硬件接口<br />
KEY_Init();                                //初始化与LED连接的硬件接口<br />
&nbsp; &nbsp;LCD_Init();                                //初始化LCD<br />
&nbsp;<br />
NRF24L01_Init(); &nbsp; &nbsp;//初始化NRF24L01&nbsp;<br />
&nbsp;        POINT_COLOR=RED; &nbsp;<br />
&nbsp;<br />
while(NRF24L01_Check())//检测不到24L01<br />
{<br />
LCD_ShowString(30,120,200,16,16,"fail...");<br />
delay_ms(500);<br />
<br />
}        &nbsp;<br />
TX_Mode(); &nbsp;<span style="color:#E53333;">//这里只做发送。。不接收</span><br />
<br />
if(Ublox_Cfg_Rate(1000,1)!=0)        //设置定位信息更新速度为1000ms,顺便判断GPS模块是否在位.&nbsp;<br />
{<br />
&nbsp; &nbsp;                LCD_ShowString(30,120,200,16,16,"NEO-6M Setting...");<br />
while((Ublox_Cfg_Rate(1000,1)!=0)&amp;&amp;key)        //持续判断,直到可以检查到NEO-6M,且数据保存成功<br />
{<br />
USART2_Init(9600);                        //初始化串口2波特率为9600(EEPROM没有保存数据的时候,波特率为9600.)<br />
&nbsp;                Ublox_Cfg_Prt(38400);                        //重新设置模块的波特率为38400<br />
Ublox_Cfg_Tp(1000000,100000,1);        //设置PPS为1秒钟输出1次,脉冲宽度为100ms         &nbsp; &nbsp;<br />
key=Ublox_Cfg_Cfg_Save();                //保存配置 &nbsp;<br />
}         &nbsp;                                        &nbsp;<br />
&nbsp;         LCD_ShowString(30,120,200,16,16,"NEO-6M Set Done!!");<br />
delay_ms(500);<br />
LCD_Fill(30,120,30+200,120+16,WHITE);//清除显示&nbsp;<br />
}<br />
<br />
while(1)&nbsp;<br />
{ <br />
delay_ms(100);<br />
if(USART2_RX_STA&amp;0X8000)                //接收到一次数据了<br />
{<br />
rxlen=USART2_RX_STA&amp;0X7FFF;        //得到数据长度<br />
for(i=0;i&lt;rxlen;i++)USART1_TX_BUF=USART2_RX_BUF;         &nbsp;&nbsp;<br />
&nbsp;                        USART2_RX_STA=0;                 &nbsp;         //启动下一次接收<br />
USART1_TX_BUF=0;                        //自动添加结束符<br />
GPS_Analysis(&amp;gpsx,(u8*)USART1_TX_BUF);//分析字符串<br />
Gps_Msg_Show();                                //显示信?<br />
delay_ms(1000); <br />
printf("%.5f\r\n",m1);<br />
delay_ms(1000);<br />
printf("%.5f\r\n",m2);<br />
if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//发送接收到的数据到串口1<br />
&nbsp;                }<br />
key=KEY_Scan(0);<br />
if(key==KEY0_PRES)<br />
{<br />
upload=!upload;<br />
POINT_COLOR=RED;<br />
if(upload)LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:ON ");<br />
else LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF");<br />
&nbsp;                }<br />
if((lenx%500)==0)LED0=!LED0;          &nbsp; &nbsp;                                &nbsp;<br />
lenx++; <br />
<br />
<br />
LCD_ShowString(30,20,200,16,16,"24L01 Ready!");<br />
LCD_ShowString(30,40,200,16,16,"NRF24L01 TX_Mode"); <br />
<br />
<span style="background-color:#E53333;">tmp_buf[0]=m1;//这里,我觉得问题出在这里。。。,m1=<span>gpsx.longitude;</span></span><br />
delay_ms(5);<br />
&nbsp; &nbsp; &nbsp; &nbsp;<br />
if(NRF24L01_TxPacket(tmp_buf)==TX_OK) &nbsp; &nbsp;<br />
{<br />
LCD_ShowString(60,170,"Sended DATA:"); <br />
LCD_ShowString(50,190+key*16,230,16,16,tmp_buf);&nbsp;<br />
tmp_buf[32]=0;<br />
&nbsp; &nbsp;key++;<br />
&nbsp; &nbsp; &nbsp; if(key==6)&nbsp;<br />
{<br />
&nbsp; &nbsp;key=0; <br />
&nbsp; &nbsp;        LCD_Fill(0,190,240,320,WHITE);//清空上面的显示<br />
}<br />
else<br />
{ <br />
};<br />
delay_ms(1500); <br />
}<br />
<br />
<br />
<br />
<br />
}                                                                                         &nbsp; &nbsp;<br />
} <br />
<br />

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-3-30 18:33:28 | 显示全部楼层
楼主你得学会自己分析问题。
<br>先搞懂一个NRF24L01的数据传输再说。
<br>说多了也没用。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 13:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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