你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MPU9255讀取AK8963地磁的問題

[复制链接]
nickyliu6 提问时间:2018-5-25 11:55 /
我目前在調通mpu9255的通訊,傳輸介面是使用SPI
但磁力計一直無法獲取數據,想請問板上高手協助看問題在哪裡,
以下是我的code,麻煩各位幫我看看哪裡出了問題,謝謝

void readMagData(float *mx,float *my, float *mz){
        uint8_t rawData[7];
  int16_t magCount[3];
        float destination[3];
        float data;
        int i;
       
  writeByte(I2C_SLV0_ADDR,AK8963_ADDRESS|READ_FLAG); //Set the I2C slave addres of AK8963 and set for read.
  writeByte(I2C_SLV0_REG, AK8963_XOUT_L); //I2C slave 0 register address from where to begin data transfer
  writeByte(I2C_SLV0_CTRL, 0x87); //Read 6 bytes from the magnetometer
       
  wait(0.01);
  readBytes(EXT_SENS_DATA_00,rawData,7);
  //must start your read from AK8963A register 0x03 and read seven bytes so that upon read of ST2 register 0x09 the AK8963A will unlatch the data registers for the next measurement.

           magCount[0]=(int16_t)(((int16_t)rawData[1]<<8)|rawData[0]);
           magCount[1]=(int16_t)(((int16_t)rawData[3]<<8)|rawData[2]);
           magCount[2]=(int16_t)(((int16_t)rawData[5]<<8)|rawData[4]);
       
                *mx = (float)magCount[0]*mRes*magCalibration[0] - magbias[0];  // get actual magnetometer value, this depends on scale being set
                *my = (float)magCount[1]*mRes*magCalibration[1] - magbias[1];  
                *mz = (float)magCount[2]*mRes*magCalibration[2] - magbias[2];


**********************************************************************************************************

unsigned int writeByte(uint8_t WriteAddr,uint8_t WriteData){
    unsigned int temp_val;
    select();
    spi.write(WriteAddr);
    temp_val=spi.write(WriteData);
    deselect();
    wait_us(500);
    return temp_val;
        }


***************************************************************************************************************

void readBytes(uint8_t ReadAddr, uint8_t *ReadBuf, unsigned int Bytes){
    unsigned int  i = 0;

    select();
    spi.write(ReadAddr | READ_FLAG);
    for(i=0; i<Bytes; i++)
        ReadBuf[i] = spi.write(0x00);
    deselect();
    wait_us(500);
        }

收藏 评论1 发布时间:2018-5-25 11:55

举报

1个回答
feixiang20 回答时间:2018-5-26 00:43:56
怀疑芯片是不是出问题了,或者接线不对,也可以参考下面的资料【MPU9150读磁力计数据问题】

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版