Получать данные MPU6050 в реальном времени с помощью STM32F3

Я пытаюсь построить Self Balancing Robot с микроконтроллером STM32F303 и для измерения положения использую MPU6050. Пока данные передаются и принимаются по протоколу передачи I2C. У меня есть предыдущий опыт использования STM32F303, а также я знаком с протоколом I2C и, ознакомившись с таблицей данных MPU6050, STM32F303 и некоторыми онлайн-ресурсами, я создал код с использованием стандартных периферийных библиотек, предоставляемых ST Electronics.

Проблема в том, как отобразить результат в реальном времени, чтобы проанализировать его???

////////////////////////////////////
#include "stm32f30x.h"
#include "stm32f3_discovery.h"
#include "stm32f30x_gpio.h"
#include "stm32f30x_i2c.h"
#include "stm32f30x_rcc.h"
#include "stm32f30x_spi.h"
#include "stm32f30x_misc.h"
#include "math.h"
#include "dboardsetup.h"

#include "mpu6050.h"
static __IO uint32_t Drapeau;

void TimingDelay_Decrement(void);

//#define LED1 GPIO_Pin_8 // PE8 sur la carte Microcontroleur

#define I2C_SDA_PIN     GPIO_Pin_9  // PORTB
#define I2C_SCL_PIN     GPIO_Pin_8  // PORTB
#define degconvert 57.2957786 // There are like 57 degrees in a radian.

MPU6050_errorstatus data;

float gyro_xdata;
float gyro_ydata;
float gyro_zdata;
float accel_xdata;
float accel_ydata;
float accel_zdata;
float roll;
float pitch;


void gpio_init();
void i2c_init();

int main(void)
{
 ////////////////////////////////
 //Enable the GPIOD Clock
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE,ENABLE);

  ////Drapeau=0;

  // GPIOD Configuration
  STM_EVAL_LEDInit(LED5);


  //Systick Configuration
  ////SysTick_Config(SystemCoreClock/10000);
////////////////////////////////
gpio_init();
i2c_init();


data = MPU6050_Initialization();

// Getting Raw Values
data = MPU6050_Get_Gyro_Data(&gyro_xdata, &gyro_ydata, &gyro_zdata);
data = MPU6050_Get_Accel_Data(&accel_xdata, &accel_ydata, &accel_zdata);
//



SysTick_Config(SystemCoreClock/1000);


while(1)
{
    if(Drapeau)
        {
        // Collect Raw Data from Sensor
        data = MPU6050_Get_Gyro_Data(&gyro_xdata, &gyro_ydata, &gyro_zdata);
        data = MPU6050_Get_Accel_Data(&accel_xdata, &accel_ydata, &accel_zdata);
        STM_EVAL_LEDToggle(LED5);
        Drapeau=0;
        }




}
}

void TimingDelay_Decrement(void)
{
   Drapeau=1;
}

0 ответов

Другие вопросы по тегам