OpenEdv-开源电子网

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

为什么NRF传递MPU6050的数据出错?

[复制链接]

3

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2019-7-8
在线时间
27 小时
发表于 2019-8-29 16:55:57 | 显示全部楼层 |阅读模式
1金钱
我用C8T6的最小系统板接MPU6050单独测试的时候没有问题,用匿名四轴上位机也能正常显示波形和飞控状态,但是把它和NRF的程序融合在一起的时候就不行了,把C8T6上的MPU6050数据通过NRF传给ZET6用触摸屏显示出来的TEMP,ROLL,PITCH,YAW值全部为0,接线应该没有问题,模块代码也基本上是copy原子哥的例程,就是把NRF的PG678引脚改成了PB678引脚,方便接在C8T6上,下面是主函数,请大家帮忙看看:#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "led.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "24l01.h"


//′®¿ú1·¢Ëí1¸ö×Ö·û
//c:òa·¢ËíμÄ×Ö·û
void usart1_send_char(u8 c)
{          
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //Ñ-»··¢Ëí,Ö±μ½·¢Ëííê±Ï   
        USART_SendData(USART1,c);  
}

//′«Ëíêy¾Y¸øÄäÃûËÄÖáéÏλ»úèí¼t(V2.6°æ±¾)
//fun:1|Äü×Ö. 0XA0~0XAF
//data:êy¾Y»o′æÇø,×î¶à28×Ö½ú!!
//len:dataÇøóDD§êy¾Y¸öêy
void usart1_niming_report(u8 fun,u8*data,u8 len)
{
        u8 send_buf[32];
        u8 i;
        if(len>28)return;        //×î¶à28×Ö½úêy¾Y
        send_buf[len+3]=0;        //D£ÑéêyÖÃáã
        send_buf[0]=0X88;        //Ö¡í·
        send_buf[1]=fun;        //1|Äü×Ö
        send_buf[2]=len;        //êy¾Y3¤¶è
        for(i=0;i<len;i++)send_buf[3+i]=data[i];                        //&#184;′&#214;&#198;êy&#190;Y
        for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i];        //&#188;&#198;&#203;&#227;D£&#209;éoí       
        for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]);        //·¢&#203;íêy&#190;Yμ&#189;′&#174;&#191;ú1
}


//·¢&#203;í&#188;ó&#203;ù&#182;è′&#171;&#184;D&#198;÷êy&#190;Yoííó&#194;Yò&#199;êy&#190;Y
//aacx,aacy,aacz:x,y,zèy&#184;&#246;·&#189;&#207;òé&#207;&#195;&#230;μ&#196;&#188;ó&#203;ù&#182;è&#214;μ
//gyrox,gyroy,gyroz:x,y,zèy&#184;&#246;·&#189;&#207;òé&#207;&#195;&#230;μ&#196;íó&#194;Yò&#199;&#214;μ
void mpu6050_send_data(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz)
{
        u8 tbuf[12];
        tbuf[0]=(aacx>>8)&0XFF;
        tbuf[1]=aacx&0XFF;
        tbuf[2]=(aacy>>8)&0XFF;
        tbuf[3]=aacy&0XFF;
        tbuf[4]=(aacz>>8)&0XFF;
        tbuf[5]=aacz&0XFF;
        tbuf[6]=(gyrox>>8)&0XFF;
        tbuf[7]=gyrox&0XFF;
        tbuf[8]=(gyroy>>8)&0XFF;
        tbuf[9]=gyroy&0XFF;
        tbuf[10]=(gyroz>>8)&0XFF;
        tbuf[11]=gyroz&0XFF;
        usart1_niming_report(0XA1,tbuf,12);//×&#212;&#182;¨ò&#229;&#214;&#161;,0XA1
}       

//í¨1y′&#174;&#191;ú1é&#207;±¨&#189;á&#203;&#227;oóμ&#196;×&#203;ì&#172;êy&#190;Y&#184;&#248;μ&#231;&#196;&#212;
//aacx,aacy,aacz:x,y,zèy&#184;&#246;·&#189;&#207;òé&#207;&#195;&#230;μ&#196;&#188;ó&#203;ù&#182;è&#214;μ
//gyrox,gyroy,gyroz:x,y,zèy&#184;&#246;·&#189;&#207;òé&#207;&#195;&#230;μ&#196;íó&#194;Yò&#199;&#214;μ
//rollá1&#246;&#189;&#199;.μ¥&#206;&#187;0.01&#182;è&#161;£ -18000 -> 18000 &#182;&#212;ó| -180.00  ->  180.00&#182;è
//pitch:&#184;&#169;&#209;&#246;&#189;&#199;.μ¥&#206;&#187; 0.01&#182;è&#161;£-9000 - 9000 &#182;&#212;ó| -90.00 -> 90.00 &#182;è
//yaw&#189;&#207;ò&#189;&#199;.μ¥&#206;&#187;&#206;a0.1&#182;è 0 -> 3600  &#182;&#212;ó| 0 -> 360.0&#182;è
void usart1_report_imu(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short roll,short pitch,short yaw)
{
        u8 tbuf[28];
        u8 i;
        for(i=0;i<28;i++)tbuf[i]=0;//&#199;&#229;0
        tbuf[0]=(aacx>>8)&0XFF;
        tbuf[1]=aacx&0XFF;
        tbuf[2]=(aacy>>8)&0XFF;
        tbuf[3]=aacy&0XFF;
        tbuf[4]=(aacz>>8)&0XFF;
        tbuf[5]=aacz&0XFF;
        tbuf[6]=(gyrox>>8)&0XFF;
        tbuf[7]=gyrox&0XFF;
        tbuf[8]=(gyroy>>8)&0XFF;
        tbuf[9]=gyroy&0XFF;
        tbuf[10]=(gyroz>>8)&0XFF;
        tbuf[11]=gyroz&0XFF;       
        tbuf[18]=(roll>>8)&0XFF;
        tbuf[19]=roll&0XFF;
        tbuf[20]=(pitch>>8)&0XFF;
        tbuf[21]=pitch&0XFF;
        tbuf[22]=(yaw>>8)&0XFF;
        tbuf[23]=yaw&0XFF;
        usart1_niming_report(0XAF,tbuf,28);//·é&#191;&#216;&#207;&#212;ê&#190;&#214;&#161;,0XAF
}




int main(void)
{       
  u8 report=1;                        //&#196;&#172;è&#207;&#191;a&#198;&#244;é&#207;±¨
        u8 tmp_buf[33];
        float pitch,roll,yaw;                 //&#197;·à-&#189;&#199;
        short aacx,aacy,aacz;                //&#188;ó&#203;ù&#182;è′&#171;&#184;D&#198;÷&#212;-ê&#188;êy&#190;Y
        short gyrox,gyroy,gyroz;        //íó&#194;Yò&#199;&#212;-ê&#188;êy&#190;Y
        short temp;                                        //&#206;&#194;&#182;è       
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //éè&#214;&#195;NVIC&#214;D&#182;&#207;·&#214;×é2:2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        uart_init(500000);                 //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a500000
        delay_init();        //&#209;óê±3&#245;ê&#188;&#187;ˉ
        LED_Init();                                          //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        MPU_Init();                                        //3&#245;ê&#188;&#187;ˉMPU6050
        NRF24L01_Init();

        /*u16 led0pwmval=0;
        u16 a=17000;
        u8 dir=1;       
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //éè&#214;&#195;NVIC&#214;D&#182;&#207;·&#214;×é2:2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        uart_init(115200);         //′&#174;&#191;ú3&#245;ê&#188;&#187;ˉ&#206;a115200
        LED_Init();                             //LED&#182;&#203;&#191;ú3&#245;ê&#188;&#187;ˉ
        TIM3_PWM_Init(19999,71);         // 72·&#214;&#198;μ£&#172;×&#238;&#184;&#223;&#198;μ&#194;ê20000
  while(1)
        {
                delay_ms(500);         
                if(dir)led0pwmval+=500;
                else led0pwmval-=500;

                if(led0pwmval>18000)dir=0;
                if(led0pwmval==0)dir=1;               
                a+=500;
                if(a>19500) a=17500;
                TIM_SetCompare2(TIM3,a);   //ò&#212;45&#161;&#227;&#206;a&#187;ù±&#190;×a&#182;ˉμ¥&#206;&#187;
                LED0=!LED0;
                delay_ms(200);
         }        */
  while(mpu_dmp_init()&&NRF24L01_Check())       
        {
                //LED0=!LED0;
                delay_ms(200);
        }
        while(1)
        {
                NRF24L01_TX_Mode();
                if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
                {
                        temp=MPU_Get_Temperature();        //μ&#195;μ&#189;&#206;&#194;&#182;è&#214;μ
                        MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //μ&#195;μ&#189;&#188;ó&#203;ù&#182;è′&#171;&#184;D&#198;÷êy&#190;Y
                        MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //μ&#195;μ&#189;íó&#194;Yò&#199;êy&#190;Y
                        if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//ó&#195;×&#212;&#182;¨ò&#229;&#214;&#161;·¢&#203;í&#188;ó&#203;ù&#182;èoííó&#194;Yò&#199;&#212;-ê&#188;êy&#190;Y
                        if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));
                        //LED0=!LED0;
                        //delay_ms(200);
                }
                tmp_buf[0]=temp/1000+'0';
                tmp_buf[1]=temp/100%10+'0';
                tmp_buf[2]=temp/10%10+'0';
                tmp_buf[3]=temp%10+'0';
                //temp=pitch*10;
                if(temp<0)
                {
                        temp=-temp;
                        tmp_buf[4]='-';
                }
                else
                        tmp_buf[4]='+';
                //tmp_buf[5]=temp/100+'0';
                //tmp_buf[6]=temp/10%10+'0';
               
                NRF24L01_TxPacket(tmp_buf);
                LED0=!LED0;
          delay_ms(200);
        }        
}


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

使用道具 举报

4

主题

231

帖子

0

精华

高级会员

Rank: 4

积分
755
金钱
755
注册时间
2018-12-7
在线时间
131 小时
发表于 2019-8-29 17:08:56 | 显示全部楼层
能收到 但全是0  看看是不是数据写入寄存器的时候有问题。
回复

使用道具 举报

3

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2019-7-8
在线时间
27 小时
 楼主| 发表于 2019-8-29 17:13:11 | 显示全部楼层
chenchen1 发表于 2019-8-29 17:08
能收到 但全是0  看看是不是数据写入寄存器的时候有问题。

你指的是MPU写入NRF里面吗,我是直接写入数组的啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 03:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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