为什么陀螺仪数据不变?

2019-03-23 18:30发布

时钟我用的是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]);//&Iuml;&Egrave;&para;&Aacute;&micro;&Iacute;&Icirc;&raquo;
    }
  }
  else
  {
    for(i=0; i<3; i++)
    {
      RawData=(int16_t)(((uint16_t)tmpbuffer[2*i] << 8) + tmpbuffer[2*i+1]);//&Iuml;&Egrave;&para;&Aacute;&cedil;&szlig;&Icirc;&raquo;
    }
}
  
  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; //&para;&Aacute;&sup3;&ouml;&Ecirc;&yacute;&frac34;&Yacute;&sup3;&yacute;&Ograve;&Ocirc;&Aacute;&iquest;&sup3;&Igrave;
  }
}
各位大神看看是哪有问题,不甚感激!
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
哈喽喽
1楼-- · 2019-03-23 19:58
/ 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;//&Iuml;&Egrave;&acute;&Oacute;&cedil;&szlig;&Icirc;&raquo;·&cent;&Euml;&Iacute;
        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;
}
哈喽喽
2楼-- · 2019-03-24 01:41
这是主函数:
int main(void)
{

        RCC_configuration();
        //RCC_GetClocksFreq(&clock);
        gyro_Config();
  
  while (1)
  {
          //L3GD20_Read(l3gd20_id,L3GD20_ID,1);//&para;&Aacute;&Egrave;&iexcl;&Iacute;&Oacute;&Acirc;&Yacute;&Ograve;&Ccedil;&micro;&Auml;ID
                //L3GD20_Read(tmp,L3GD20_CTRL_REG4_ADDR,1);
                //L3GD20_Read(tmpbuffer,L3GD20_OUT_X_L_ADDR,6);
    Gyro_ReadAngRate(GyroBuffer);
  }
}
哈喽喽
3楼-- · 2019-03-24 04:11
 精彩回答 2  元偷偷看……
哈喽喽
4楼-- · 2019-03-24 09:20
已解决忘了打勾了
哈喽喽
5楼-- · 2019-03-24 09:54

幻影豪
6楼-- · 2019-03-24 10:44
 精彩回答 2  元偷偷看……

一周热门 更多>