示例#1
0
/**
  * @brief Test GYROSCOPE MEMS Hardware.
  *   The main objectif of this test is to check the hardware connection of the 
  *   MEMS peripheral.
  * @param None
* @retval None
*/
void GYRO_MEMS_Test(void)
{
  /* Gyroscope variable */
  float Buffer[3];
  float Xval,Yval = 0x00;
  
  /* Read Gyro Angular data */
  BSP_GYRO_GetXYZ(Buffer);
  
  /* Update autoreload and capture compare registers value*/
  Xval = ABS((Buffer[0]));
  Yval = ABS((Buffer[1])); 
  
  if(Xval>Yval)
  {
    if(Buffer[0] > 5000.0f)
    { 
      /* LD10 On */
      BSP_LED_On(LED10);
      HAL_Delay(10);
    }
    else if(Buffer[0] < -5000.0f)
    { 
      /* LED3 On */
      BSP_LED_On(LED3);
      HAL_Delay(10);
    }
    else
    { 
      HAL_Delay(10);
    }
  }
  else
  {
    if(Buffer[1] < -5000.0f)
    {
        /* LD6 on */
        BSP_LED_On(LED6);
        HAL_Delay(10);
    }
    else if(Buffer[1] > 5000.0f)
    {
        /* LD7 On */
        BSP_LED_On(LED7);
        HAL_Delay(10);
    }
    else
    { 
      HAL_Delay(10);
    } 
  } 
    BSP_LED_Off(LED3);
    BSP_LED_Off(LED6);
    BSP_LED_Off(LED7);
    BSP_LED_Off(LED4);
    BSP_LED_Off(LED10);
    BSP_LED_Off(LED8);
    BSP_LED_Off(LED9);
    BSP_LED_Off(LED5);
}
/**
  * @brief  Main program
  * @param  None
  * @retval None
  */
int main(void)
{
//   uint8_t R;
   uint8_t buf[10];
   uint8_t buf_1[10];
   uint8_t buf_2[10];
   float pdd[3];
  /* STM32F4xx HAL library initialization:
       - Configure the Flash prefetch, instruction and Data caches
       - Configure the Systick to generate an interrupt each 1 msec
       - Set NVIC Group Priority to 4
       - Low Level Initialization
     */
  HAL_Init();
  SystemClock_Config();
  BSP_LCD_Init();
  BSP_LCD_LayerDefaultInit(LCD_FOREGROUND_LAYER, (LCD_FRAME_BUFFER + BUFFER_OFFSET));
  /* Configure the transparency for foreground : Increase the transprency */
  BSP_LCD_SetTransparency(LCD_BACKGROUND_LAYER, 0);
  BSP_LCD_SelectLayer(LCD_FOREGROUND_LAYER);
  BSP_GYRO_Init();
	//R=BSP_GYRO_ReadID();
	
	/* Configure the System clock to have a frequency of 180 MHz */
  SystemClock_Config();
	Delaimes(20);
	BSP_GYRO_Init();
	Delaimes(4);
	BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
  BSP_LCD_Clear(LCD_COLOR_BLACK );
	BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
 	Delaimes(4);	

  /* Infinite loop */
  while (1)
  {
		BSP_GYRO_GetXYZ(pdd);	 
  sprintf(buf,"%.3f",pdd[0]);	
	sprintf(buf_1,"%.3f",pdd[1]);
	sprintf(buf_2,"%.3f",pdd[2]);		
	BSP_LCD_DisplayStringAtLine(0,buf);
	BSP_LCD_DisplayStringAtLine(1,buf_1);
	BSP_LCD_DisplayStringAtLine(2,buf_2);
	Delaimes(200);
  }
}
void CmdGyro(int mode)
{
  float xyz[3];

  if(mode != CMD_INTERACTIVE) {
    return;
  }

  BSP_GYRO_GetXYZ(xyz);

  printf("Gyroscope returns:\n"
	 "   X: %d\n"
	 "   Y: %d\n"
	 "   Z: %d\n",
	 (int)(xyz[0]*256),
	 (int)(xyz[1]*256),
	 (int)(xyz[2]*256));
}
示例#4
0
/**
  * @brief  Read Gyroscope Angular data.
  * @param  None
  * @retval None
  */
static void GYRO_ReadAng(void)
{
  /* Gyroscope variables */
  float Buffer[3];
  float Xval, Yval = 0x00;
  
  /* Init Gyroscope Mems */
  if(BSP_GYRO_Init() != HAL_OK)
  {
    /* Initialization Error */
    Error_Handler(); 
  }
  
  /* Read Gyroscope Angular data */
  BSP_GYRO_GetXYZ(Buffer);
  
  Xval = ABS((Buffer[0]));
  Yval = ABS((Buffer[1])); 
  
  if(Xval>Yval)
  {
    if(Buffer[0] > 5000.0f)
    { 
      /* LED5 On */
      BSP_LED_On(LED5);
      HAL_Delay(10);
    }
    else if(Buffer[0] < -5000.0f)
    { 
      /* LED4 On */
      BSP_LED_On(LED4);
      HAL_Delay(10);
    }
    else
    { 
      HAL_Delay(10);
    }
  }
  else
  {
    if(Buffer[1] < -5000.0f)
    {
      /* LED6 On */
      BSP_LED_On(LED6);
      
      HAL_Delay(10);
    }
    else if(Buffer[1] > 5000.0f)
    {
      /* LED3 On */
      BSP_LED_On(LED3);
      HAL_Delay(10);
    } 
    else
    { 
      HAL_Delay(10);
    }
  } 
  
  BSP_LED_Off(LED3);
  BSP_LED_Off(LED4);
  BSP_LED_Off(LED5);
  BSP_LED_Off(LED6);
}
示例#5
0
/**
  * @brief  MEMS demo
  * @param  None
  * @retval None
  */
void MEMS_demo(void)
{
  MEMS_SetHint();
  
  if (BSP_GYRO_Init() != GYRO_OK)
  {
    BSP_LCD_SetBackColor(LCD_COLOR_WHITE); 
    BSP_LCD_SetTextColor(LCD_COLOR_RED);
    BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 95, (uint8_t*)"ERROR", CENTER_MODE);
    BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 80, (uint8_t*)"MEMS cannot be initialized", CENTER_MODE);
  }
  else
  {
    Gyroscope_DrawBackground(state);
  }
  
  BSP_GYRO_Reset();
  
  while (1)
  {	
    /* Read Gyro Angular data */
    BSP_GYRO_GetXYZ(Buffer);
    
    /* Update autoreload and capture compare registers value */
    Xval = ABS((Buffer[0]));
    Yval = ABS((Buffer[1])); 
    Zval = ABS((Buffer[2])); 
    
    if((Xval>Yval) && (Xval>Zval))
    {
      if(Buffer[0] > 10000.0f)
      { 
        if((state & 1) == 0)
        {
          Gyroscope_DrawBackground(1);			
          state |= 1;
          HAL_Delay(1000);
        }        
      }
      else if(Buffer[0] < -10000.0f)
      { 
        if((state & 2) == 0)
        {          
          Gyroscope_DrawBackground(2);            
          state |= 2;
          HAL_Delay(1000);
        }           
      }      
    }
    else if ((Yval>Xval) && (Yval>Zval))
    {
      if(Buffer[1] < -10000.0f)
      {
        if((state & 4) == 0)
        {                     
          Gyroscope_DrawBackground(4);            
          state |= 4;
          HAL_Delay(1000);
        }   
      }
      else if(Buffer[1] > 10000.0f)
      {
        if((state & 8) == 0)
        {          
          Gyroscope_DrawBackground(8);            
          state |= 8;
          HAL_Delay(1000);
        }
      }     
    } 
    else if ((Zval>Xval) && (Zval>Yval))
    {
      if(Buffer[2] < -10000.0f)
      {
        if((state & 16) == 0)
        {                     
          Gyroscope_DrawBackground(16);            
          state |= 16;
          HAL_Delay(1000);
        }   
      }		 
      else if(Buffer[2] > 10000.0f)
      {
        if((state & 32) == 0)
        {          
          Gyroscope_DrawBackground(32);            
          state |= 32;
          HAL_Delay(1000);			
        }
      }  	
    } 
    if (state != 0x3F)	
    {
    }
    else if (CheckForUserInput() > 0)
    { 
      state = 0;    
      return;
    }
  }
}