社区导航

 

搜索
查看: 2412|回复: 8

[求助] 为什么陀螺仪数据不变?

[复制链接]

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-7 11:47 | 显示全部楼层 |阅读模式
时钟我用的是HSI(36mhz),使用SPI读取L3GA20的值,在调试时,全速运行时感觉会卡,单步运行没问题,陀螺仪的数据不会变?

void Gyro_ReadAngRate (float* pfData)
{
  uint8_t tmpbuffer[6] ={0};
  int16_t RawData[3] = {0};
  uint8_t tmpreg = 0;
  float sensitivity = 0;
  int i =0;
  L3GD20_Read(&tmpreg,L3GD20_CTRL_REG4_ADDR,1);
  L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);
  if(!(tmpreg & 0x40))
  {
  for(i=0; i<3; i++)
    {
      RawData=(int16_t)(((uint16_t)tmpbuffer[2*i+1] << 8) + tmpbuffer[2*i]);//ÏȶÁµÍλ
    }
  }
  else
  {
    for(i=0; i<3; i++)
    {
      RawData=(int16_t)(((uint16_t)tmpbuffer[2*i] << 8) + tmpbuffer[2*i+1]);//ÏȶÁ¸ßλ
    }
}
  
  switch(tmpreg & 0x30)
  {
  case 0x00:
    sensitivity=L3G_Sensitivity_250dps;  //L3G_Sensitivity_500dps=360/pi
    break;
  case 0x10:
  sensitivity=L3G_Sensitivity_500dps;  //L3G_Sensitivity_500dps=180/pi=57.1429
    break;
  case 0x20:
    sensitivity=L3G_Sensitivity_2000dps;//L3G_Sensitivity_500dps=1/4*180/pi
    break;
  }

for(i=0; i<3; i++)
  {
    pfData=(float)RawData/sensitivity; //¶Á³öÊý¾Ý³ýÒÔÁ¿³Ì
  }
}
各位大神看看是哪有问题,不甚感激!
此帖出自stm32/stm8论坛

回复

使用道具 举报

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 11:53 | 显示全部楼层
void gyro_Config(void)
{
        L3GD20_InitTypeDef   L3GD20_InitStructure;
        L3GD20_FilterConfigTypeDef   L3GD20_FilterConfigStructure;

        L3GD20_InitStructure.Power_Mode=L3GD20_MODE_ACTIVE;//L3GD20_MODE_POWERDOWN;
        L3GD20_InitStructure.Output_DataRate=L3GD20_OUTPUT_DATARATE_1;
        L3GD20_InitStructure.Axes_Enable=L3GD20_AXES_ENABLE;
        L3GD20_InitStructure.Band_Width=L3GD20_BANDWIDTH_4;
        L3GD20_InitStructure.BlockData_Update=L3GD20_BlockDataUpdate_Continous;//L3GD20_BlockDataUpdate_Single;
        L3GD20_InitStructure.Endianness=L3GD20_BLE_MSB;//ÏÈ´Ó¸ßλ·¢ËÍ
        L3GD20_InitStructure.Full_Scale=L3GD20_FULLSCALE_500;
       
        L3GD20_Init(&L3GD20_InitStructure);
       
        L3GD20_FilterConfigStructure.HighPassFilter_Mode_Selection=L3GD20_HPM_AUTORESET_INT;// L3GD20_HPM_NORMAL_MODE;
  L3GD20_FilterConfigStructure.HighPassFilter_CutOff_Frequency=L3GD20_HPFCF_0;
       
        L3GD20_FilterConfig(&L3GD20_FilterConfigStructure);
       
        //L3GD20_InterruptConfigStructure.Latch_Request=
        //L3GD20_InterruptConfigStructure.Interrupt_Axes=
        //L3GD20_InterruptConfigStructure.Interrupt_ActiveEdge=L3GD20_INT1INTERRUPT_HIGH_EDGE;
}

回复

使用道具 举报

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 12:09 | 显示全部楼层
这是主函数:
int main(void)
{

        RCC_configuration();
        //RCC_GetClocksFreq(&clock);
        gyro_Config();
  
  while (1)
  {
          //L3GD20_Read(l3gd20_id,L3GD20_ID,1);//¶ÁÈ¡ÍÓÂÝÒǵÄID
                //L3GD20_Read(tmp,L3GD20_CTRL_REG4_ADDR,1);
                //L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);
    Gyro_ReadAngRate(GyroBuffer);
  }
}

回复

使用道具 举报

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 12:26 | 显示全部楼层
我不知道是不是我没说清楚,为什么没人理我,这问题已经困扰我两天了,读出的数据是对的,但是全速运行时数据不会变。

回复

使用道具 举报

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 17:22 | 显示全部楼层
已解决忘了打勾了

回复

使用道具 举报

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 17:23 | 显示全部楼层


回复

使用道具 举报

5

TA的帖子

1

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-7 17:25 | 显示全部楼层
怎么解决的??

点评

在调试的时候,在view中将periodic windows update打勾,我忘打了,还以为时序有问题。  详情 回复 发表于 2015-8-7 18:22

回复

使用道具 举报

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 18:21 | 显示全部楼层
在调试的时候,在view中将periodic windows update打勾,我忘打了,还以为时序有问题。

回复

使用道具 举报

41

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 18:22 | 显示全部楼层

在调试的时候,在view中将periodic windows update打勾,我忘打了,还以为时序有问题。

回复

使用道具 举报

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

关闭

站长推荐上一条 1/7 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-1 23:03 , Processed in 0.326634 second(s), 31 queries , Gzip On, MemCache On.

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