OpenEdv-开源电子网

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

基于STM32单片机用NFR24L01发射数据和接收数据不一样求大神解决

[复制链接]

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-5-23
在线时间
0 小时
发表于 2015-5-28 10:29:36 | 显示全部楼层 |阅读模式
5金钱
基于STM32单片机用NFR24L01发射数据和接收数据不一样求大神解决;程序如下:<br />
#include "led.h"<br />
#include "delay.h"<br />
#include "sys.h"<br />
#include "usart.h"<br />
#include "lcd.h"<br />
#include "key.h"<br />
#include "spi.h"<br />
#include "24l01.h"<br />
#include "mpu6050.h"<br />
#include "bsp_i2c.h"<br />
//ALIENTEK Mini STM32??·?°?·????ú??24<br />
//?????¨?????é &nbsp;<br />
//?????§????www.openedv.com<br />
//?????????í??×????????????? &nbsp;<br />
<br />
&nbsp;int main(void)<br />
&nbsp;{&nbsp;<br />
short &nbsp;Gyro[4];<br />
short &nbsp;Accel[6];<br />
u8 key,mode;<br />
u16 t=0; <br />
// &nbsp;int16_t x;        &nbsp;<br />
u8 tmp_buf[33],tmp[33];&nbsp;<br />
delay_init();         &nbsp; &nbsp;         //???±?????????? <br />
NVIC_Configuration();        &nbsp;<br />
uart_init(115200);                 //?&reg;??????????9600<br />
LED_Init();                 &nbsp;                //????????LED??????????????<br />
LCD_Init();                         &nbsp;         //??????LCD <br />
&nbsp;        KEY_Init();                                //°??ü??????<br />
MPU6050_Init();<br />
i2c_GPIO_Config();<br />
&nbsp;        NRF24L01_Init(); &nbsp; &nbsp;        //??????NRF24L01 &nbsp;<br />
&nbsp;        POINT_COLOR=RED;//?è??×??????ì??&nbsp;<br />
LCD_ShowString(60,50,200,16,16,"Mini STM32"); <br />
LCD_ShowString(60,70,200,16,16,"NRF24L01 TEST"); <br />
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");<br />
LCD_ShowString(60,110,200,16,16,"2014/3/12");                 &nbsp;<br />
&nbsp;        while(NRF24L01_Check())        //?ì?éNRF24L01??·?????. <br />
{<br />
LCD_ShowString(60,130,200,16,16,"NRF24L01 Error");<br />
delay_ms(200);<br />
LCD_Fill(60,130,239,130+16,WHITE);<br />
&nbsp;                delay_ms(200);<br />
}                                                                 &nbsp;&nbsp;<br />
LCD_ShowString(60,130,200,16,16,"NRF24L01 OK");<br />
&nbsp;        while(1)//??????·??·?¨????????????!<br />
{<br />
key=KEY_Scan(0);<br />
if(key==KEY0_PRES)<br />
{<br />
mode=0; &nbsp;&nbsp;<br />
break;<br />
}else if(key==KEY1_PRES)<br />
{<br />
mode=1;<br />
break;<br />
}<br />
t++;<br />
if(t==100)LCD_ShowString(10,150,230,16,16,"KEY0:RX_Mode &nbsp;KEY1:TX_Mode"); //?????????á??????<br />
&nbsp;                if(t==200)<br />
{ <br />
LCD_Fill(10,150,230,150+16,WHITE);<br />
t=0;&nbsp;<br />
}<br />
delay_ms(5);         &nbsp;<br />
} &nbsp;&nbsp;<br />
&nbsp;        LCD_Fill(10,150,240,166,WHITE);//??????????????                 &nbsp;<br />
&nbsp;        POINT_COLOR=BLUE;//?è??×?????????         &nbsp;&nbsp;<br />
<br />
&nbsp;<br />
if(mode==0)//RX模式<br />
{<br />
LCD_ShowString(60,150,200,16,16,"NRF24L01 RX_Mode"); <br />
LCD_ShowString(60,170,200,16,16,"Received DATA:"); <br />
NRF24L01_RX_Mode();                 &nbsp;<br />
while(1)<br />
{        &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="background-color:#E53333;"> tmp[0]=((int16_t)tmp_buf[0]&lt;&lt;8)+tmp_buf[1];</span><br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp; &nbsp;tmp[1]=((int16_t)tmp_buf[2]&lt;&lt;8)+tmp_buf[3];</span><br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="background-color:#E53333;">tmp[2]=((int16_t)tmp_buf[4]&lt;&lt;8)+tmp_buf[5];</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br />
<br />
<br />
if(NRF24L01_RxPacket(tmp_buf)==0)//???&copy;??????????,?ò????????.<br />
{<br />
<br />
<br />
<br />
printf(" &nbsp; &nbsp;<span>加速度</span>%8d\n",tmp[1]);<br />
printf(" &nbsp; &nbsp;<span>加速度</span>%8d\n",tmp[2]);<br />
printf(" 陀螺仪 %8d\n",tmp[0]);<br />
<br />
tmp[32]=0;//加入结束符<br />
&nbsp; &nbsp; LCD_ShowString(0,190,239,32,16,tmp); &nbsp; &nbsp;<br />
}else delay_us(100);         &nbsp;&nbsp;<br />
t++;<br />
if(t==10000)//灯延时<br />
{<br />
t=0;<br />
LED0=!LED0;<br />
}                                  &nbsp; &nbsp;<br />
}; <br />
}else//TX模式<br />
{                                                         &nbsp; &nbsp;<br />
LCD_ShowString(60,150,200,16,16,"NRF24L01 TX_Mode"); <br />
NRF24L01_TX_Mode();<br />
&nbsp; mode=' ';//从空格键开始<br />
while(1)<br />
{         &nbsp;<br />
<br />
<br />
&nbsp; &nbsp; <span style="background-color:#E53333;">&nbsp;MPU6050ReadGyro(Gyro);</span><br />
<span style="background-color:#E53333;"> &nbsp;</span><br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp_buf[0]=Gyro[2]/256;</span><br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp_buf[1]=Gyro[2]%256;</span><br />
<br />
<br />
<span style="background-color:#E53333;">&nbsp; &nbsp; MPU6050ReadAcc(Accel);</span><br />
<br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp; tmp_buf[2]=Accel[0]/256;</span><br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp;&nbsp;</span><span style="background-color:#E53333;">tmp_buf[3]=Accel[0]%256;</span><br />
<br />
<br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp; tmp_buf[4]=Accel[1]/256;</span><br />
<span style="background-color:#E53333;">&nbsp; &nbsp; &nbsp; tmp_buf[5]=Accel[1]%256;</span><br />
<br />
<span style="background-color:#E53333;"> &nbsp; &nbsp;</span><br />
&nbsp; &nbsp;printf(" &nbsp; &nbsp;加速度%8d\n",Accel[0]);<br />
printf(" &nbsp; &nbsp;<span>加速度</span>%8d\n",Accel[1]);<br />
&nbsp;printf(" 陀螺仪%8d\n",Gyro[2]); &nbsp;<br />
&nbsp;&nbsp;<br />
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)<br />
{<br />
<br />
&nbsp;<br />
<br />
<br />
&nbsp; &nbsp; tmp_buf[32]=0;//?????á??·?<br />
LCD_ShowString(60,170,239,32,16,"Sended DATA:"); <br />
&nbsp; &nbsp; LCD_ShowString(0,190,239,32,16,tmp_buf);&nbsp;<br />
<br />
<br />
//                                key=mode;<br />
//                                for(t=0;t&lt;32;t++)<br />
//                                {<br />
//                                        key++;<br />
//                                        if(key&gt;('~'))key=' ';<br />
//                                        tmp_buf[t]=key; <br />
//                                }<br />
//                                mode++;&nbsp;<br />
//                                if(mode&gt;'~')mode=' '; &nbsp;         &nbsp;<br />
tmp_buf[32]=0;// 加入结束符<br />
}else<br />
{                                                                                 &nbsp; <br />
&nbsp;                                LCD_ShowString(60,170,239,32,16,"Send Failed ");&nbsp;<br />
LCD_Fill(0,188,240,218,WHITE);//??????????????                         &nbsp;&nbsp;<br />
};<br />
LED0=!LED0;<br />
delay_ms(1500);                                 &nbsp; &nbsp;<br />
};<br />
}&nbsp;<br />
}<br />
<br />
说明:本人想把MPU6050数据直接发送到另一个板子上并且显示出来,红色部分是发送和接收的东西,问题是发送的数据和接受的数据不一样,如下图,本程序是在原子的程序上改的,去掉了一些之前发的东西,<br />

<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span style="background-color:#E53333;"></span><br />

最佳答案

查看完整内容[请看2#楼]

short  Gyro[4];  short  Accel[6];    这都是短整型数据只会把1个字节的数据给tmp_buf[t]     要是你是16位的数据   那么没处理好的话只会把低八位的数据给tmp_buf[t]         我是这么理解的
思想有多远我们就能走多远
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-5-21
在线时间
1 小时
发表于 2015-5-28 10:29:37 | 显示全部楼层
short&nbsp;&nbsp;Gyro[4];
<br>&nbsp;short&nbsp;&nbsp;Accel[6];&nbsp;&nbsp;&nbsp;&nbsp;这都是短整型数据只会把1个字节的数据给tmp_buf[t]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要是你是16位的数据&nbsp;&nbsp;&nbsp;那么没处理好的话只会把低八位的数据给tmp_buf[t]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我是这么理解的
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-5-21
在线时间
1 小时
发表于 2015-5-28 11:37:40 | 显示全部楼层
tmp_buf[t]&nbsp;&nbsp;这个东西是char型的
回复

使用道具 举报

7

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-5-23
在线时间
0 小时
 楼主| 发表于 2015-5-31 08:05:13 | 显示全部楼层
回复【3楼】fei88808:
<br>---------------------------------
<br>谢了,已解决,嘎嘎
思想有多远我们就能走多远
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-5-21
在线时间
1 小时
发表于 2015-6-2 09:23:47 | 显示全部楼层
谢了&nbsp;&nbsp;&nbsp;再看看
回复

使用道具 举报

3

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-3-21
在线时间
23 小时
发表于 2018-4-11 10:31:32 | 显示全部楼层
yh411335 发表于 2015-5-31 08:05
回复【3楼】fei88808:
---------------------------------
谢了,已解决,嘎嘎

楼主可以给我看看怎么处理MPU6050的数据的吗,我最近也在看这个东西,能把主代码给我看看吗,邮箱761625852@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 03:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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