查詢網(wǎng)站建設(shè)怎樣上百度做廣告
????????一、MPU6050常用配置寄存器
????????1、電源管理寄存器1( PWR_MGMT_1 )????????此寄存器允許用戶配置電源模式和時(shí)鐘源。
??????? DEVICE_RESET :用于控制復(fù)位的比特位。設(shè)置為1時(shí)復(fù)位 MPU6050,內(nèi)部寄存器恢復(fù)為默認(rèn)值,復(fù)位結(jié)束后MPU硬件自動(dòng)清零該位。
??????? SLEEP:用于控制 MPU6050 工作模式的比特位。MPU6050復(fù)位后該位置 1,即進(jìn)入了低功耗睡眠模式。因此,設(shè)備上電復(fù)位后,我們要將該比特位置0以進(jìn)入正常工作模式。
??????? TEMP_DIS:用于設(shè)置是否使能溫度傳感器的比特位。將該位置為0則使能溫度傳感器。
??????? CLKSEL[2:0]:用于設(shè)置系統(tǒng)時(shí)鐘源的比特位??蛇x擇使用內(nèi)部8MHz晶振、外部晶振或陀螺儀時(shí)鐘作為時(shí)鐘源。 設(shè)備上電默認(rèn)是使用內(nèi)部 8M的RC晶振,但因其精度不高,官方推薦使用陀螺鎖相環(huán)或者外部時(shí)間作為時(shí)鐘源,以提高穩(wěn)定性。一般設(shè)置 CLKSEL=001 即可。時(shí)鐘源可根據(jù)下表進(jìn)行選擇:
//示例代碼
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //復(fù)位MPU6050,設(shè)置電源管理寄存器 1(0X6B)的bit7 為 1
delay_ms(100);
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //喚醒MPU6050,設(shè)置電源管理寄存器 1(0X6B)為 0X00
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01); //設(shè)置CLKSEL,PLL X軸為參考, 設(shè)置電源管理寄存器 1(0X1B)bit2、bit1、bit0 為 001
??????? 2、陀螺儀配置寄存器( GYRO_CONFIG )
??????? 此寄存器用于觸發(fā)陀螺儀自檢,并配置陀螺儀的滿量程范圍。
??????? 我們重點(diǎn)關(guān)注FS_SEL[1:0]這兩個(gè)位,它用于設(shè)置陀螺儀的滿量程范圍,一般設(shè)置為 3,即±2000°/S,因?yàn)橥勇輧x的 ADC 為 16 位分辨率,所以得到靈敏度為:65536/4000=16.4LSB/(°/S)。
//示例代碼
MPU_Set_Gyro_Fsr(3); //陀螺儀傳感器,±2000dps, 設(shè)置陀螺儀配置寄存器(0X1B)bit4、bit3 為 3
??????? 3、加速度傳感器配置寄存器( ACCEL_CONFIG )
????????此寄存器用于觸發(fā)加速度計(jì)的自檢,并配置加速度計(jì)的滿量程范圍,還可配置了數(shù)字高通濾波器(DHPF)。
??????? 我們重點(diǎn)關(guān)注AFS_SEL[1:0]這兩個(gè)位,用于設(shè)置加速度傳感器的滿量程范圍,一般設(shè)置為 0,即±2g,因?yàn)榧铀俣葌鞲衅鞯腁DC 也是 16 位,所以得到靈敏度為:65536/4=16384LSB/g。
//示例代碼
MPU_Set_Accel_Fsr(0); //加速度傳感器,±2g , 設(shè)置加速度傳感器配置寄存器(0X1C)bit4、bit3 為 0
??????? 4、FIFO 使能寄存器( FIFO_EN )
??????? 此寄存器用于控制 FIFO 使能,確定將哪些傳感器測(cè)量值加載到FIFO緩沖區(qū)中。如果傳感器各自的FIFO_EN位在該寄存器中被設(shè)置為1,則存儲(chǔ)在傳感器數(shù)據(jù)寄存器(寄存器59至96)內(nèi)的數(shù)據(jù)將被加載到FIFO緩沖器中。這些傳感器按照寄存器25中定義的采樣速率進(jìn)行采樣。
??????? 實(shí)際應(yīng)用中,在簡(jiǎn)單讀取傳感器數(shù)據(jù)的時(shí)候,可以不用 FIFO,設(shè)置對(duì)應(yīng)位為 0 即可禁止 FIFO,設(shè)置為 1 則使能 FIFO。加速度傳感器的 3 個(gè)軸,全由 1個(gè)位(ACCEL_FIFO_EN)控制,只要該位置 1,則加速度傳感器的三個(gè)通道都開(kāi)啟 FIFO了。
??????? 5、陀螺儀采樣率分頻寄存器( SMPRT_DIV )????????該寄存器用于設(shè)置 MPU6050 的陀螺儀采樣頻率,計(jì)算公式為:
????????????????采樣頻率 = 陀螺儀輸出頻率 / (1+SMPLRT_DIV)
????? 陀螺儀的輸出頻率,是 1Khz 或者 8Khz,與數(shù)字低通濾波器(DLPF)的設(shè)置有關(guān):當(dāng) DLPF_CFG=0/7 的時(shí)候,頻率為 8Khz,其他情況是 1Khz。 一般情況下,DLPF 濾波帶寬設(shè)置為采樣率的 1/2 。
??????? 采樣率,我們假定設(shè)置為 50Hz,那么采樣分頻器值 SMPLRT_DIV = 1000/50-1 = 19。
??????? 注意:加速度計(jì)的輸出速率為1 kHz。這意味著,對(duì)于大于1 kHz的采樣率,相同的加速度計(jì)采樣數(shù)據(jù)可以不止一次地輸出到FIFO、DMP和傳感器寄存器。
??????? 6、配置寄存器( CONFIG )
??????? 對(duì)于這個(gè)寄存器,我們主要關(guān)注DLPF_CFG[2:0],即數(shù)字低通濾波器(DLPF)的設(shè)置位,加速度計(jì)和陀螺儀都是根據(jù)這三個(gè)比特位的配置進(jìn)行過(guò)濾的。DLPF_CFG[2:0] 不同配置對(duì)應(yīng)的過(guò)濾情況如下表所示:
????????加速度傳感器的輸出速率(Fs)固定是 1Khz,而陀螺儀傳感器的輸出速率(Fs)根據(jù) DLPF_CFG 的配置有所不同。一般我們?cè)O(shè)置陀螺儀傳感器的帶寬為其采樣率的一半,如前面所說(shuō)的,如果設(shè)置采樣率為 50Hz,那么帶寬就應(yīng)該設(shè)置為 25Hz,取近似值 20Hz,就應(yīng)該設(shè)置 DLPF_CFG = 4 (二進(jìn)制 100)。
??????? 7、電源管理寄存器2( PWR_MGMT_2 )
????????此寄存器允許用戶在僅加速計(jì)低功率模式下配置喚醒頻率。這個(gè)寄存器還允許用戶將加速度計(jì)和陀螺儀的各個(gè)軸進(jìn)入待機(jī)模式。一般情況下配置為 0 ??筛鶕?jù)實(shí)際情況設(shè)置,詳細(xì)內(nèi)容可參考寄存器手冊(cè)。
??????? 8、陀螺儀數(shù)據(jù)輸出寄存器(6個(gè)8位寄存器,0x43~0x48)??????? 陀螺儀傳感器數(shù)據(jù)輸出寄存器由6個(gè)8位寄存器組成,分別存儲(chǔ)X/Y/Z三個(gè)軸的陀螺儀傳感器數(shù)據(jù),高字節(jié)在前,低字節(jié)在后。
????????每個(gè)16位陀螺儀測(cè)量都有一個(gè)在FS_SEL(寄存器27)中定義的滿量程。對(duì)于每個(gè)全尺度設(shè)置,陀螺儀每LSB的靈敏度如下表所示。
??????? 9、加速度傳感器數(shù)據(jù)輸出寄存器(6個(gè),0x3B~0x40)
??????? 加速度傳感器數(shù)據(jù)輸出寄存器由6個(gè)8位寄存器組成,輸出X/Y/Z三個(gè)軸的加速度傳感器值,高字節(jié)在前,低字節(jié)在后。
????????每個(gè)16位加速度計(jì)測(cè)量都有一個(gè)在ACCEL_FS(寄存器28)中定義的完整尺度。對(duì)于每個(gè)完整的尺度設(shè)置,ACCEL_xOUT中每LSB加速度計(jì)的靈敏度如下表所示。
??????? 10、溫度傳感器數(shù)據(jù)輸出寄存器( TEMP_OUT_H and TEMP_OUT_L )
????????溫度換算公式為: ??Temperature = 36.53 + regval/340,??其中,Temperature為計(jì)算得到的溫度值,單位為℃,regval為從0X41和0X42讀到的溫度傳感器有符號(hào)值。
????????二、MPU6050初始化
??????? 1、初始化 IIC 接口。MPU6050 采用 I2C 與 STM32F1 通信,需要先初始化與 MPU6050 連接的 SDA和 SCL 數(shù)據(jù)線。
??????? 2、復(fù)位并喚醒 MPU6050。復(fù)位操作使 MPU6050 內(nèi)部所有寄存器恢復(fù)默認(rèn)值,通過(guò)對(duì)電源管理寄存器 1(0x6B)的DEVICE_RESET置 1 實(shí)現(xiàn)。 復(fù)位結(jié)束后,電源管理寄存器 1 恢復(fù)默認(rèn)值(0x40),然后必須設(shè)置該寄存器為0x00,以喚醒 MPU6050,進(jìn)入正常工作模式。
?????? 3、設(shè)置角速度傳感器(陀螺儀)和加速度傳感器的滿量程范圍。通過(guò)陀螺儀配置寄存器(0x1B)和加速度傳感器配置寄存器(0x1C)設(shè)置,一般設(shè)置陀螺儀的滿量程范圍為±2000dps,加速度傳感器的滿量程范圍為±2g。
??????? 4、設(shè)置其他參數(shù)。需要配置的參數(shù)還有:關(guān)閉中斷、關(guān)閉 AUX IIC 接口(沒(méi)有磁力計(jì))、禁止 FIFO、設(shè)置陀螺儀采樣率和設(shè)置數(shù)字低通濾波器(DLPF)等。如果不采用中斷方式讀取數(shù)據(jù),則關(guān)閉中斷;如果不使用 AUX IIC 接口外接其他傳感器,則關(guān)閉此接口??梢苑謩e通過(guò)中斷使能寄存器(0x38)和用戶控制寄存器(0x6A)控制。MPU6050 可以使用 FIFO 存儲(chǔ)傳感器數(shù)據(jù),如果不使用則可以關(guān)閉所有 FIFO 通道,可能通過(guò) FIFO 使能寄存器(0x23)控制,默認(rèn)都置 0(即禁止 FIFO),所以用默認(rèn)值就可以了。陀螺儀采樣率通過(guò)采樣率分頻寄存器(0x19)控制。數(shù)字低通濾波器(DLPF)則通過(guò)配置寄存器(0x1A)設(shè)置,一般設(shè)置 DLPF 帶寬為采樣率的 1/2 。
??????? 5、配置系統(tǒng)時(shí)鐘源并使能角速度(陀螺儀)傳感器和加速度傳感器。系統(tǒng)時(shí)鐘源同樣是通過(guò)電源管理寄存器 1(0x1B)來(lái)設(shè)置,該寄存器的最低三位用于設(shè)置系統(tǒng)時(shí)鐘源選擇,默認(rèn)值是 0(內(nèi)部 8M RC 震蕩),一般設(shè)置為 1,選擇 x 軸陀螺 PLL 作為時(shí)鐘源,以獲得更高精度的時(shí)鐘。同時(shí),使能角速度傳感器和加速度傳感器,這兩個(gè)操作通過(guò)電源管理寄存器 2(0x6C)來(lái)設(shè)置,設(shè)置對(duì)應(yīng)位為 0 即可開(kāi)啟。
????????至此,MPU6050 的初始化就基本完成了,可以正常工作了(其他未設(shè)置的寄存器全部采用默認(rèn)值即可)。
??????? 三、MPU6050初始化示例代碼
//部分宏定義數(shù)據(jù)
//MPU6050 AD0控制腳
#define MPU_AD0_CTRL PAout(15) //控制AD0電平,從而控制MPU地址//#define MPU_ACCEL_OFFS_REG 0X06 //accel_offs寄存器,可讀取版本號(hào),寄存器手冊(cè)未提到
//#define MPU_PROD_ID_REG 0X0C //prod id寄存器,在寄存器手冊(cè)未提到
#define MPU_SELF_TESTX_REG 0X0D //自檢寄存器X
#define MPU_SELF_TESTY_REG 0X0E //自檢寄存器Y
#define MPU_SELF_TESTZ_REG 0X0F //自檢寄存器Z
#define MPU_SELF_TESTA_REG 0X10 //自檢寄存器A
#define MPU_SAMPLE_RATE_REG 0X19 //采樣頻率分頻器
#define MPU_CFG_REG 0X1A //配置寄存器
#define MPU_GYRO_CFG_REG 0X1B //陀螺儀配置寄存器
#define MPU_ACCEL_CFG_REG 0X1C //加速度計(jì)配置寄存器
#define MPU_MOTION_DET_REG 0X1F //運(yùn)動(dòng)檢測(cè)閥值設(shè)置寄存器
#define MPU_FIFO_EN_REG 0X23 //FIFO使能寄存器
#define MPU_I2CMST_CTRL_REG 0X24 //IIC主機(jī)控制寄存器
#define MPU_I2CSLV0_ADDR_REG 0X25 //IIC從機(jī)0器件地址寄存器
#define MPU_I2CSLV0_REG 0X26 //IIC從機(jī)0數(shù)據(jù)地址寄存器
#define MPU_I2CSLV0_CTRL_REG 0X27 //IIC從機(jī)0控制寄存器
#define MPU_I2CSLV1_ADDR_REG 0X28 //IIC從機(jī)1器件地址寄存器
#define MPU_I2CSLV1_REG 0X29 //IIC從機(jī)1數(shù)據(jù)地址寄存器
#define MPU_I2CSLV1_CTRL_REG 0X2A //IIC從機(jī)1控制寄存器
#define MPU_I2CSLV2_ADDR_REG 0X2B //IIC從機(jī)2器件地址寄存器
#define MPU_I2CSLV2_REG 0X2C //IIC從機(jī)2數(shù)據(jù)地址寄存器
#define MPU_I2CSLV2_CTRL_REG 0X2D //IIC從機(jī)2控制寄存器
#define MPU_I2CSLV3_ADDR_REG 0X2E //IIC從機(jī)3器件地址寄存器
#define MPU_I2CSLV3_REG 0X2F //IIC從機(jī)3數(shù)據(jù)地址寄存器
#define MPU_I2CSLV3_CTRL_REG 0X30 //IIC從機(jī)3控制寄存器
#define MPU_I2CSLV4_ADDR_REG 0X31 //IIC從機(jī)4器件地址寄存器
#define MPU_I2CSLV4_REG 0X32 //IIC從機(jī)4數(shù)據(jù)地址寄存器
#define MPU_I2CSLV4_DO_REG 0X33 //IIC從機(jī)4寫數(shù)據(jù)寄存器
#define MPU_I2CSLV4_CTRL_REG 0X34 //IIC從機(jī)4控制寄存器
#define MPU_I2CSLV4_DI_REG 0X35 //IIC從機(jī)4讀數(shù)據(jù)寄存器#define MPU_I2CMST_STA_REG 0X36 //IIC主機(jī)狀態(tài)寄存器
#define MPU_INTBP_CFG_REG 0X37 //中斷/旁路設(shè)置寄存器
#define MPU_INT_EN_REG 0X38 //中斷使能寄存器
#define MPU_INT_STA_REG 0X3A //中斷狀態(tài)寄存器#define MPU_ACCEL_XOUTH_REG 0X3B //加速度值,X軸高8位寄存器
#define MPU_ACCEL_XOUTL_REG 0X3C //加速度值,X軸低8位寄存器
#define MPU_ACCEL_YOUTH_REG 0X3D //加速度值,Y軸高8位寄存器
#define MPU_ACCEL_YOUTL_REG 0X3E //加速度值,Y軸低8位寄存器
#define MPU_ACCEL_ZOUTH_REG 0X3F //加速度值,Z軸高8位寄存器
#define MPU_ACCEL_ZOUTL_REG 0X40 //加速度值,Z軸低8位寄存器#define MPU_TEMP_OUTH_REG 0X41 //溫度值高八位寄存器
#define MPU_TEMP_OUTL_REG 0X42 //溫度值低8位寄存器#define MPU_GYRO_XOUTH_REG 0X43 //陀螺儀值,X軸高8位寄存器
#define MPU_GYRO_XOUTL_REG 0X44 //陀螺儀值,X軸低8位寄存器
#define MPU_GYRO_YOUTH_REG 0X45 //陀螺儀值,Y軸高8位寄存器
#define MPU_GYRO_YOUTL_REG 0X46 //陀螺儀值,Y軸低8位寄存器
#define MPU_GYRO_ZOUTH_REG 0X47 //陀螺儀值,Z軸高8位寄存器
#define MPU_GYRO_ZOUTL_REG 0X48 //陀螺儀值,Z軸低8位寄存器#define MPU_I2CSLV0_DO_REG 0X63 //IIC從機(jī)0數(shù)據(jù)寄存器
#define MPU_I2CSLV1_DO_REG 0X64 //IIC從機(jī)1數(shù)據(jù)寄存器
#define MPU_I2CSLV2_DO_REG 0X65 //IIC從機(jī)2數(shù)據(jù)寄存器
#define MPU_I2CSLV3_DO_REG 0X66 //IIC從機(jī)3數(shù)據(jù)寄存器#define MPU_I2CMST_DELAY_REG 0X67 //IIC主機(jī)延時(shí)管理寄存器
#define MPU_SIGPATH_RST_REG 0X68 //信號(hào)通道復(fù)位寄存器
#define MPU_MDETECT_CTRL_REG 0X69 //運(yùn)動(dòng)檢測(cè)控制寄存器
#define MPU_USER_CTRL_REG 0X6A //用戶控制寄存器
#define MPU_PWR_MGMT1_REG 0X6B //電源管理寄存器1
#define MPU_PWR_MGMT2_REG 0X6C //電源管理寄存器2
#define MPU_FIFO_CNTH_REG 0X72 //FIFO計(jì)數(shù)寄存器高八位
#define MPU_FIFO_CNTL_REG 0X73 //FIFO計(jì)數(shù)寄存器低八位
#define MPU_FIFO_RW_REG 0X74 //FIFO讀寫寄存器
#define MPU_DEVICE_ID_REG 0X75 //器件ID寄存器//如果AD0腳(9腳)接地,IIC地址為0X68(不包含最低位).
//如果接V3.3,則IIC地址為0X69(不包含最低位).
#define MPU_ADDR 0X68//初始化MPU6050
//返回值:0,成功
// 其他,錯(cuò)誤代碼
u8 MPU_Init(void)
{ u8 res;MPU_AD0_CTRL=0; //控制MPU6050的AD0腳為低電平,從機(jī)地址為:0x68MPU_IIC_Init();//初始化IIC總線MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x80); //復(fù)位MPU6050 , 設(shè)置電源管理寄存器 1(0x6B)的bit7 為 1delay_ms(100);MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x00); //喚醒MPU6050, 設(shè)置電源管理寄存器 1(0x6B)為 0X00 MPU_Set_Gyro_Fsr(3); //陀螺儀傳感器,±2000dps, 設(shè)置陀螺儀配置寄存器(0x1B)bit4、bit3 為 3 MPU_Set_Accel_Fsr(0); //加速度傳感器,±2g, 設(shè)置加速度傳感器配置寄存器(0x1C)bit4、bit3 為 0MPU_Set_Rate(50); //設(shè)置采樣率50HzMPU_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, 設(shè)置FIFO 使能寄存器(0X23)為 0X00MPU_Write_Byte(MPU_INTBP_CFG_REG,0x80); //INT引腳低電平有效res=MPU_Read_Byte(MPU_DEVICE_ID_REG);if(res==MPU_ADDR)//器件ID正確{MPU_Write_Byte(MPU_PWR_MGMT1_REG,0x01); //設(shè)置CLKSEL,PLL X軸為參考, 設(shè)置電源管理寄存器 1(0X1B)bit2、bit1、bit0 為 001MPU_Write_Byte(MPU_PWR_MGMT2_REG,0x00); //加速度與陀螺儀都工作, 設(shè)置電源管理寄存器2(0X6C) 為 0X00MPU_Set_Rate(50); //設(shè)置采樣率為50Hz }else return 1;return 0;
}
// 以上為MPU6050初始化部分//初始化IIC
void MPU_IIC_Init(void)
{ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//先使能外設(shè)IO PORTB時(shí)鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; // 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHzGPIO_Init(GPIOB, &GPIO_InitStructure); //根據(jù)設(shè)定參數(shù)初始化GPIO GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11); //PB10,PB11 輸出高 }//IIC寫一個(gè)字節(jié)
//reg:寄存器地址
//data:數(shù)據(jù)
//返回值:0,正常
// 其他,錯(cuò)誤代碼
u8 MPU_Write_Byte(u8 reg,u8 data)
{ MPU_IIC_Start(); MPU_IIC_Send_Byte((MPU_ADDR<<1)|0);//發(fā)送器件地址+寫命令 if(MPU_IIC_Wait_Ack()) //等待應(yīng)答{MPU_IIC_Stop(); return 1; }MPU_IIC_Send_Byte(reg); //寫寄存器地址MPU_IIC_Wait_Ack(); //等待應(yīng)答 MPU_IIC_Send_Byte(data);//發(fā)送數(shù)據(jù)if(MPU_IIC_Wait_Ack()) //等待ACK{MPU_IIC_Stop(); return 1; } MPU_IIC_Stop(); return 0;
}//設(shè)置MPU6050陀螺儀傳感器滿量程范圍
//fsr:0,±250dps;1,±500dps;2,±1000dps;3,±2000dps
//返回值:0,設(shè)置成功
// 其他,設(shè)置失敗
u8 MPU_Set_Gyro_Fsr(u8 fsr)
{return MPU_Write_Byte(MPU_GYRO_CFG_REG,fsr<<3);//設(shè)置陀螺儀滿量程范圍
}//設(shè)置MPU6050加速度傳感器滿量程范圍
//fsr:0,±2g;1,±4g;2,±8g;3,±16g
//返回值:0,設(shè)置成功
// 其他,設(shè)置失敗
u8 MPU_Set_Accel_Fsr(u8 fsr)
{return MPU_Write_Byte(MPU_ACCEL_CFG_REG,fsr<<3);//設(shè)置加速度傳感器滿量程范圍
}//設(shè)置MPU6050的采樣率(假定陀螺儀輸出頻率Fs=1KHz)
//rate:4~1000(Hz)
//返回值:0,設(shè)置成功
// 其他,設(shè)置失敗
u8 MPU_Set_Rate(u16 rate)
{u8 data;if(rate>1000)rate=1000;if(rate<4)rate=4;data=1000/rate-1; //由采樣頻率 = 陀螺儀輸出頻率 / (1+SMPLRT_DIV)得 SMPLRT_DIV= 陀螺儀輸出頻率 / 采樣頻率 - 1data=MPU_Write_Byte(MPU_SAMPLE_RATE_REG,data); //設(shè)置數(shù)字低通濾波器return MPU_Set_LPF(rate/2); //自動(dòng)設(shè)置LPF為采樣率的一半
}//IIC讀一個(gè)字節(jié)
//reg:寄存器地址
//返回值:讀到的數(shù)據(jù)
u8 MPU_Read_Byte(u8 reg)
{u8 res;MPU_IIC_Start(); MPU_IIC_Send_Byte((MPU_ADDR<<1)|0);//發(fā)送器件地址+寫命令 MPU_IIC_Wait_Ack(); //等待應(yīng)答 MPU_IIC_Send_Byte(reg); //寫寄存器地址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;
}
??????? 四、結(jié)語(yǔ)。
????????本文內(nèi)容部分參考網(wǎng)絡(luò)大神提供的代碼,如有權(quán)利限制,請(qǐng)及時(shí)聯(lián)系。