chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32入門學(xué)習(xí)筆記之MPU6050傳感器解析實(shí)驗(yàn)4

jf_78858299 ? 來(lái)源:滑小稽筆記 ? 作者:電子技術(shù)園地 ? 2023-02-16 14:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

(2)創(chuàng)建mpu6050.c文件,輸入以下代碼。

/*********************************************************************************************************
                MUP6050    驅(qū)    動(dòng)    程    序
*********************************************************************************************************/
#include "mpu6050.h"
#include "delay.h"
/***************************************************
Name    :MPU_IIC_Init
Function  :初始化IIC
Paramater  :None
Return    :None
***************************************************/
void MPU_IIC_Init()
{
   RCC->APB2ENR |= 1<<3 ;                                        //先使能PB時(shí)鐘
  GPIOB->CRH &= 0xFFFF00FF ;                                      //PB10/11 推挽輸出
  GPIOB->CRH |= 0x00003300 ;
  GPIOB->ODR |= 3<<10 ;                                        //PB10,11 輸出高
}
/***************************************************
Name    :MPU_IIC_Wait_Ack
Function  :開(kāi)始時(shí)序
Paramater  :None
Return    :None
***************************************************/
void MPU_IIC_Start()
{
  GPIOB->CRH &= 0xFFFF0FFF ;
  GPIOB->CRH |= 0x00003000 ;
  MPU_IIC_SDA = 1 ;
  MPU_IIC_SCL = 1 ;
  delay_us( 2 ) ;
  MPU_IIC_SDA = 0 ;
  delay_us( 2 ) ;
  MPU_IIC_SCL = 0 ;
}
/***************************************************
Name    :MPU_IIC_Wait_Ack
Function  :停止時(shí)序
Paramater  :None
Return    :None
***************************************************/
void MPU_IIC_Stop()
{
  GPIOB->CRH &= 0xFFFF0FFF ;
  GPIOB->CRH |= 0x00003000 ;
  MPU_IIC_SCL = 0 ;
  MPU_IIC_SDA = 0 ;
  delay_us( 2 ) ;
  MPU_IIC_SCL = 1 ;
  MPU_IIC_SDA = 1 ;
  delay_us( 2 ) ;
}
/***************************************************
Name    :MPU_IIC_Wait_Ack
Function  :應(yīng)答時(shí)序
Paramater  :None
Return    :
      0:成功
      1:失敗
***************************************************/
u8 MPU_IIC_Wait_Ack()
{
  u8 ucErrTime=0 ;
  GPIOB->CRH &= 0xFFFF0FFF ;
  GPIOB->CRH |= 0x00008000 ;
  MPU_IIC_SDA = 1 ;
  delay_us( 2 ) ;
  MPU_IIC_SCL = 1 ;
  delay_us( 2 ) ;
  while( MPU_READ_SDA )
  {
    ucErrTime ++ ;
    if( ucErrTime>250 )
    {
      MPU_IIC_Stop() ;
      return 1 ;
    }
  }
  MPU_IIC_SCL = 0 ;                                          //時(shí)鐘輸出0
  return 0 ;
}
/***************************************************
Name    :MPU_IIC_Send_Byte
Function  :IIC發(fā)送1個(gè)字節(jié)
Paramater  :
      Ack:應(yīng)答控制
        0:不應(yīng)答
        1:應(yīng)答
Return    :None
***************************************************/
void MPU_IIC_Send_Byte( u8 Byte )
{
  u8 i ;
  GPIOB->CRH &= 0xFFFF0FFF ;
  GPIOB->CRH |= 0x00003000 ;
  MPU_IIC_SCL = 0 ;                                          //拉低時(shí)鐘開(kāi)始數(shù)據(jù)傳輸
  for( i=0; i<8; i++ )
  {
    if( ( Byte&0x80 )==0x80 )
      MPU_IIC_SDA = 1 ;
    else
      MPU_IIC_SDA = 0 ;
        Byte <<= 1 ;
    MPU_IIC_SCL = 1 ;
    delay_us( 2 ) ;
    MPU_IIC_SCL = 0 ;
    delay_us( 2 ) ;
  }
}
/***************************************************
Name    :MPU_IIC_Read_Byte
Function  :IIC讀取1個(gè)字節(jié)
Paramater  :
      Ack:應(yīng)答控制
        0:不應(yīng)答
        1:應(yīng)答
Return    :讀取的字節(jié)
***************************************************/
u8 MPU_IIC_Read_Byte( u8 Ack )
{
  u8 i, Byte=0;
  GPIOB->CRH &= 0xFFFF0FFF ;
  GPIOB->CRH |= 0x00008000 ;
    for( i=0; i<8; i++ )
  {
    MPU_IIC_SCL = 0 ;
    delay_us( 2 ) ;
    MPU_IIC_SCL = 1 ;
    Byte <<= 1 ;
    if( MPU_READ_SDA )
      Byte ++ ;
    delay_us( 2 ) ;
  }
  MPU_IIC_SCL = 0 ;
  GPIOB->CRH &= 0xFFFF0FFF ;
  GPIOB->CRH |= 0x00003000 ;
  MPU_IIC_SDA = 1-Ack ;
  delay_us( 2 ) ;
  MPU_IIC_SCL = 1 ;
  delay_us( 2 ) ;
  MPU_IIC_SCL = 0 ;
  return Byte ;
}
/***************************************************
Name    :MPU_Write_Byte
Function  :IIC寫(xiě)一個(gè)字節(jié)
Paramater  :
      reg:寄存器地址
      data:數(shù)據(jù)
Return    :
      0:正常
      其他:錯(cuò)誤代碼
***************************************************/
u8 MPU_Write_Byte( u8 reg, u8 data )
{ 
    MPU_IIC_Start() ; 
  MPU_IIC_Send_Byte( MPU_ADDR<<1 ) ;                                  //發(fā)送器件地址+寫(xiě)命令
  //等待應(yīng)答
  if( MPU_IIC_Wait_Ack() )
  {
    MPU_IIC_Stop() ;
    return 1 ;
  }
    MPU_IIC_Send_Byte( reg ) ;                                      //寫(xiě)寄存器地址
    MPU_IIC_Wait_Ack() ;                                        //等待應(yīng)答
  MPU_IIC_Send_Byte( data ) ;                                      //發(fā)送數(shù)據(jù)
  //等待ACK
  if( MPU_IIC_Wait_Ack() )
  {
    MPU_IIC_Stop() ;
    return 1 ;
  }
    MPU_IIC_Stop() ;
  return 0 ;
}
/***************************************************
Name    :MPU_Read_Byte
Function  :IIC讀一個(gè)字節(jié)
Paramater  :
      reg:寄存器地址
Return    :讀到的數(shù)據(jù)
***************************************************/
u8 MPU_Read_Byte( u8 reg )
{
  u8 res ;
    MPU_IIC_Start() ;
  MPU_IIC_Send_Byte( MPU_ADDR<<1 ) ;                                  //發(fā)送器件地址+寫(xiě)命令
  MPU_IIC_Wait_Ack() ;                                        //等待應(yīng)答
    MPU_IIC_Send_Byte( reg ) ;                                      //寫(xiě)寄存器地址
    MPU_IIC_Wait_Ack() ;                                        //等待應(yīng)答
    MPU_IIC_Start() ;
  MPU_IIC_Send_Byte( ( MPU_ADDR<<1 )|1 ) ;                              //發(fā)送器件地址+讀命令
    MPU_IIC_Wait_Ack() ;                                        //等待應(yīng)答
  res = MPU_IIC_Read_Byte( 0 ) ;                                    //讀取數(shù)據(jù),發(fā)送nACK
    MPU_IIC_Stop() ;                                          //產(chǎn)生一個(gè)停止條件
  return res ;
}
/***************************************************
Name    :MPU_Read_Byte
Function  :設(shè)置MPU6050的采樣率(假定Fs=1KHz)
Paramater  :
      rate:4~1000(Hz)
Return    :
      0:成功
      其他:失敗
***************************************************/
u8 MPU_Set_Rate( u16 rate )
{
  u8 data ;
  if( rate>1000 )
    rate=1000 ;
  if( rate<4 )
    rate = 4 ;
  data = 1000/rate-1 ;
  data = MPU_Write_Byte( MPU_SAMPLE_RATE_REG, data ) ;                        //設(shè)置數(shù)字低通濾波器
  //自動(dòng)設(shè)置LPF為采樣率的一半
  if( ( rate/2 )>=188 )
    data = 1 ;
  else if( ( rate/2 )>=98 )
    data = 2 ;
  else if( ( rate/2 )>=42 )
    data = 3 ;
  else if( ( rate/2 )>=20 )
    data = 4;
  else if( ( rate/2 )>=10 )
    data = 5 ;
  else
    data = 6 ;
  return MPU_Write_Byte( MPU_CFG_REG, data ) ;                            //設(shè)置數(shù)字低通濾波器
}
/***************************************************
Name    :MPU_Init
Function  :初始化MPU6050
Paramater  :None
Return    :
      0:成功
      其他:錯(cuò)誤代碼
***************************************************/
u8 MPU_Init()
{ 
  u8 res ;
  RCC->APB2ENR |= 1<<2 ;                                        //使能PORTA時(shí)鐘 
  GPIOA->CRH &= 0x0FFFFFFF ;                                      //PA15設(shè)置成推挽輸出    
  GPIOA->CRH |= 0x30000000 ; 
  JTAG_Set( 1 ) ;                                            //禁止JTAG,從而PA15可以做普通IO使用,否則PA15不能做普通IO
  MPU_AD0_CTRL = 0 ;                                          //控制MPU6050的AD0腳為低電平,從機(jī)地址為:0X68
  //初始化IIC總線
  RCC->APB2ENR |= 1<<3 ;                                        //先使能PB時(shí)鐘
  GPIOB->CRH &= 0xFFFF00FF ;                                      //PB10/11 推挽輸出
  GPIOB->CRH |= 0x00003300 ;
  GPIOB->ODR |= 3<<10 ;                                        //PB10,11 輸出高
  MPU_Write_Byte( MPU_PWR_MGMT1_REG, 0x80 ) ;                              //復(fù)位MPU6050
    delay_ms( 100 ) ;
  MPU_Write_Byte( MPU_PWR_MGMT1_REG, 0x00 ) ;                              //喚醒MPU6050
  MPU_Write_Byte( MPU_GYRO_CFG_REG, 3<<3 ) ;                              //陀螺儀傳感器,±2000dps
  MPU_Write_Byte( MPU_ACCEL_CFG_REG, 0<<3 ) ;                              //加速度傳感器,±2g
  MPU_Set_Rate( 50 ) ;                                        //設(shè)置采樣率50Hz
  MPU_Write_Byte( MPU_INT_EN_REG, 0x00 ) ;                              //關(guān)閉所有中斷
  MPU_Write_Byte( MPU_USER_CTRL_REG, 0x00 ) ;                              //I2C主模式關(guān)閉
  MPU_Write_Byte( MPU_FIFO_EN_REG, 0x00 ) ;                              //關(guān)閉FIFO
  MPU_Write_Byte( MPU_INTBP_CFG_REG, 0x80 ) ;                              //INT引腳低電平有效
  res = MPU_Read_Byte( MPU_DEVICE_ID_REG ) ;
  //器件ID正確
  if( res==MPU_ADDR )
  {
    MPU_Write_Byte( MPU_PWR_MGMT1_REG, 0x01 ) ;                            //設(shè)置CLKSEL,PLL X軸為參考
    MPU_Write_Byte( MPU_PWR_MGMT2_REG, 0x00 ) ;                            //加速度與陀螺儀都工作
    MPU_Set_Rate( 50 ) ;                                      //設(shè)置采樣率為50Hz
   }
  else
    return 1 ;
  return 0 ;
}
/***************************************************
Name    :MPU_Write_Len
Function  :IIC連續(xù)寫(xiě)
Paramater  :
      addr:器件地址
      reg:寄存器地址
      len:寫(xiě)入長(zhǎng)度
      buf:數(shù)據(jù)區(qū)
Return    :
      0:成功
      其他:錯(cuò)誤代碼
***************************************************/
u8 MPU_Write_Len( u8 addr, u8 reg, u8 len, u8 *buf )
{
  u8 i ;
    MPU_IIC_Start() ;
  MPU_IIC_Send_Byte( addr<<1 ) ;                                    //發(fā)送器件地址+寫(xiě)命令
  if( MPU_IIC_Wait_Ack() )                                      //等待應(yīng)答
  {
    MPU_IIC_Stop() ;
    return 1 ;
  }
    MPU_IIC_Send_Byte( reg ) ;                                      //寫(xiě)寄存器地址
    MPU_IIC_Wait_Ack() ;                                        //等待應(yīng)答
  for( i=0; i

(3)創(chuàng)建1.c文件,輸入以下代碼。

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "lcd.h"
#include "mpu6050.h"
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"


int main()
{
  u8 t, Str[ 20 ] ;
  float pitch, roll, yaw ;                                      //歐拉角
  short aacx, aacy, aacz ;                                      //加速度傳感器原始數(shù)據(jù)
  short gyrox, gyroy, gyroz ;                                      //陀螺儀原始數(shù)據(jù)
  float temp ;                                            //溫度
   STM32_Clock_Init( 9 ) ;                                        //系統(tǒng)時(shí)鐘設(shè)置
  SysTick_Init( 72 ) ;                                        //延時(shí)初始化
  USART1_Init( 72, 500000 ) ;                                      //串口初始化為500000
  LCD_Init() ;                                            //初始化LCD
  MPU_Init() ;                                            //初始化MPU6050
  while( mpu_dmp_init() ) ;
  POINT_COLOR = RED ;                                          //設(shè)置字體為藍(lán)色
   while(1)
  {
    if( mpu_dmp_get_data( &pitch, &roll, &yaw )==0 )
    {
      temp = ( float )MPU_Get_Temperature()/100 ;                          //得到溫度值
      MPU_Get_Accelerometer( &aacx, &aacy, &aacz ) ;                        //得到加速度傳感器數(shù)據(jù)
      MPU_Get_Gyroscope( &gyrox, &gyroy, &gyroz ) ;                        //得到陀螺儀數(shù)據(jù)
      //轉(zhuǎn)換溫度
      sprintf( ( char* )Str, "Temp: %.2f C", temp ) ;
      for( t=0; t<20; t++ )
      {
        if( Str[ t ]=='.' )
        {
          t += 4 ;
          while( t<20 )
          {
            t ++ ;
            Str[ t ] = ' ' ;
          }
        }
      }
      LCD_ShowString( 10, 0, Str ) ;
      //自轉(zhuǎn)角
      sprintf( ( char* )Str, "Pitch: %.1f C", pitch  ) ;
      for( t=0; t<20; t++ )
      {
        if( Str[ t ]=='.' )
        {
          t += 3 ;
          while( t<20 )
          {
            t ++ ;
            Str[ t ] = ' ' ;
          }
        }
      }
      LCD_ShowString( 10, 30, Str ) ;


      //章動(dòng)角
      sprintf( ( char* )Str, "Roll: %.1f C", roll  ) ;
      for( t=0; t<20; t++ )
      {
        if( Str[ t ]=='.' )
        {
          t += 3 ;
          while( t<20 )
          {
            t ++ ;
            Str[ t ] = ' ' ;
          }
        }
      }
      LCD_ShowString( 10, 60, Str ) ;


      //旋轉(zhuǎn)角
      sprintf( ( char* )Str, "Yaw: %.1f C", yaw  ) ;
      for( t=0; t<20; t++ )
      {
        if( Str[ t ]=='.' )
        {
          t += 3 ;
          while( t<20 )
          {
            t ++ ;
            Str[ t ] = ' ' ;
          }
        }
      }
      LCD_ShowString( 10, 90, Str ) ;
    }
  }
}

注:例程使用了網(wǎng)上已經(jīng)移植成功的DMP源碼,直接調(diào)用即可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2565

    文章

    52861

    瀏覽量

    766207
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19869

    瀏覽量

    234580
  • MPU6050
    +關(guān)注

    關(guān)注

    39

    文章

    310

    瀏覽量

    72993
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32控制MPU6050使用說(shuō)明

    STM32 控制MPU6050使用說(shuō)明 mpu6050是陀螺儀、加速計(jì)和一個(gè)可擴(kuò)展的傳根RM-MPU
    發(fā)表于 07-02 08:05

    STM32解析MPU6050上位機(jī)與下位機(jī)源碼

    STM32解析MPU6050 MPU6050使用說(shuō)明書(shū)V4.pdf 上位機(jī).rar STM32
    發(fā)表于 07-02 08:04

    STM32控制MPU6050使用說(shuō)明

    STM32 控制MPU6050使用說(shuō)明 mpu6050是陀螺儀、加速計(jì)和一個(gè)可擴(kuò)展的傳根RM-MPU
    發(fā)表于 07-06 02:25

    基于stm32mpu6050傳感器實(shí)驗(yàn) 精選資料推薦

    @TOCMPU6050+STM32學(xué)習(xí)筆記學(xué)習(xí)了差不多兩天的mpu6050,參考了很多篇博客還有看一些資料,今晚終于把這個(gè)東西在我的串口顯示
    發(fā)表于 08-17 09:23

    如何對(duì)基于stm32mpu6050傳感器進(jìn)行測(cè)試呢

    如何對(duì)基于stm32mpu6050傳感器進(jìn)行測(cè)試呢?有哪些測(cè)試步驟呢?
    發(fā)表于 11-18 06:59

    MPU6050六軸傳感器筆記分享

    MPU6050六軸傳感器1 自帶數(shù)字運(yùn)動(dòng)處理2 集成可程序控制(陀螺儀)3 集成可程序控制(加速度傳感器4 自帶數(shù)字溫度傳感器5 可輸出中
    發(fā)表于 02-10 06:49

    基于STM32單片機(jī)+MPU6050傳感器做的載人平衡車

    基于STM32單片機(jī)+MPU6050傳感器做的載人平衡車
    發(fā)表于 01-20 15:54 ?236次下載

    mpu6050六軸傳感器模塊驅(qū)動(dòng)程序源代碼分享

    本文為大家分享了mpu6050六軸傳感器模塊驅(qū)動(dòng)程序源代碼,STM32F1讀取MPU6050的加速度和角度傳感器數(shù)據(jù)的初始化步驟,以及
    發(fā)表于 12-11 14:26 ?3.8w次閱讀
    <b class='flag-5'>mpu6050</b>六軸<b class='flag-5'>傳感器</b>模塊驅(qū)動(dòng)程序源代碼分享

    使用STM32單片機(jī)讀取MPU6050傳感器數(shù)據(jù)的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用STM32單片機(jī)讀取MPU6050傳感器數(shù)據(jù)的程序免費(fèi)下載。
    發(fā)表于 07-26 17:35 ?64次下載
    使用<b class='flag-5'>STM32</b>單片機(jī)讀取<b class='flag-5'>MPU6050</b><b class='flag-5'>傳感器</b>數(shù)據(jù)的程序免費(fèi)下載

    MPU6050六軸傳感器實(shí)驗(yàn)的程序和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是MPU6050六軸傳感器實(shí)驗(yàn)的程序和工程文件免費(fèi)下載。
    發(fā)表于 09-20 08:00 ?16次下載
    <b class='flag-5'>MPU6050</b>六軸<b class='flag-5'>傳感器</b><b class='flag-5'>實(shí)驗(yàn)</b>的程序和工程文件免費(fèi)下載

    MPU6050六軸陀螺儀傳感器實(shí)驗(yàn)的資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是MPU6050六軸陀螺儀傳感器實(shí)驗(yàn)的資料合集免費(fèi)下載。
    發(fā)表于 06-02 08:00 ?29次下載
    <b class='flag-5'>MPU6050</b>六軸陀螺儀<b class='flag-5'>傳感器</b><b class='flag-5'>實(shí)驗(yàn)</b>的資料合集免費(fèi)下載

    基于stm32mpu6050傳感器實(shí)驗(yàn)

    @TOCMPU6050+STM32學(xué)習(xí)筆記學(xué)習(xí)了差不多兩天的mpu6050,參考了很多篇博客還有看一些資料,今晚終于把這個(gè)東西在我的串口顯示
    發(fā)表于 12-06 11:36 ?9次下載
    基于<b class='flag-5'>stm32</b>的<b class='flag-5'>mpu6050</b><b class='flag-5'>傳感器</b><b class='flag-5'>實(shí)驗(yàn)</b>

    STM32入門學(xué)習(xí)筆記MPU6050傳感器解析實(shí)驗(yàn)1

    MPU6050是InvenSense公司推出的一款6軸運(yùn)動(dòng)處理芯片,內(nèi)置3軸陀螺儀及3軸速度傳感器,內(nèi)置兩組I2C接口,其中一組用于通信,另一組則用于連接外部磁力傳感器,采用自帶的數(shù)字運(yùn)動(dòng)處理
    的頭像 發(fā)表于 02-16 14:53 ?6286次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>入門</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>MPU6050</b><b class='flag-5'>傳感器</b><b class='flag-5'>解析</b><b class='flag-5'>實(shí)驗(yàn)</b>1

    STM32入門學(xué)習(xí)筆記MPU6050傳感器解析實(shí)驗(yàn)2

    MPU6050是InvenSense公司推出的一款6軸運(yùn)動(dòng)處理芯片,內(nèi)置3軸陀螺儀及3軸速度傳感器,內(nèi)置兩組I2C接口,其中一組用于通信,另一組則用于連接外部磁力傳感器,采用自帶的數(shù)字運(yùn)動(dòng)處理
    的頭像 發(fā)表于 02-16 14:54 ?1510次閱讀

    STM32入門學(xué)習(xí)筆記MPU6050傳感器解析實(shí)驗(yàn)3

    MPU6050是InvenSense公司推出的一款6軸運(yùn)動(dòng)處理芯片,內(nèi)置3軸陀螺儀及3軸速度傳感器,內(nèi)置兩組I2C接口,其中一組用于通信,另一組則用于連接外部磁力傳感器,采用自帶的數(shù)字運(yùn)動(dòng)處理
    的頭像 發(fā)表于 02-16 14:54 ?1491次閱讀