


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、/*/ 陀螺儀 MPU6050 IIC 測試程序* #include "" #include <> /Keil library#define MPU6050_Addr 0xD0 修改unsigned char TX_DATA4;unsigned char BUF10; / char test=0;short T_X,T_Y,T_Z,T_T;/ 模擬 IIC 端口輸出輸入定義GPIO_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus;#defineuchar unsigned char#defi
2、neuint unsigned int/ 定義MPU6050內(nèi)部地址#defineSMPLRT_DlV0x19 /陀螺儀采樣率,典型值: 0x07(125Hz)#defineeONFlG0x1A/ 低通濾波頻率,典型值:0x06(5Hz)#defineGYRO_eONFlG0x1B /陀螺儀自檢及測量范圍,典型值:0x18( 不自檢, 2000deg/s)#define ACCEL_CONFIG0x1C/ / 加速計自檢、測量范圍及高通濾波頻率,典型值: 0x01( 不自檢, 2G,5Hz)#defineAeeEL_XOUT_H0x3B#defineAeeEL_XOUT_L0x3e#defin
3、eAeeEL_YOUT_H0x3D#defineAeeEL_YOUT_L0x3E#defineAeeEL_ZOUT_H0x3F#defineAeeEL_ZOUT_L0x40/#defineTEMP_OUT_H0x41/#defineTEMP_OUT_L0x42/#defineGYRO_XOUT_H0x43#defineGYRO_XOUT_L0x44#defineGYRO_YOUT_H0x45#defineGYRO_YOUT_L0x46#defineGYRO_ZOUT_H0x47#defineGYRO_ZOUT_L0x48#definePWR_MGMT_10x6B / 電源管理,典型值: 0x0
4、0( 正常啟用 )/#defineWHO_AM_l0x75 /IIC 地址寄存器(默認(rèn)數(shù)值0x68,只讀)/*/定義器件在lie總線中的從地址,根據(jù)ALT ADDRESS地址引腳不同/ 顯示據(jù)緩存區(qū)接收數(shù)據(jù)緩存區(qū)/lle 用到/X,Y,Z 軸,溫度#define SeL_HGPIOB->BSRR = GPIO_Pin_6#define SeL_LGPIOB->BRR = GPIO_Pin_6#define SDA_HGPIOB->BSRR = GPIO_Pin_7#define SDA_LGPIOB->BRR = GPIO_Pin_7#define SeL_readGP
5、IOB->IDR & GPIO_Pin_6#define SDA_readGPIOB->IDR & GPIO_Pin_7*/* 函數(shù)申明 void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void USART1_Configuration(void);void WWDG_Configuration(void);void Delay(u32 nTime);void Delayms(vu32 m);/* 變量定義 */*/ void DATA_
6、printf(uchar *s,short temp_data) if(temp_data<0) temp_data=-temp_data;*s='-'else *s=' '*+s =temp_data/100+0x30;temp_data=temp_data%100; /取余運算*+s =temp_data/10+0x30;temp_data=temp_data%10; /取余運算*+s =temp_data+0x30;/* Function Name : I2C_GPIO_Config* Description : Configration Simul
7、ation IIC GPIO* Input : None* Output: None* Return: None*/* void I2C_GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;= GPIO_Pin_6;= GPIO_Speed_50MHz;= GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);= GPIO_Pin_7;= GPIO_Speed_50MHz;= GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStr
8、ucture);/* * Function Name : I2C_delay* Description : Simulation IIC Timing series delay* Input : None* Output : None * Return : None*/* void I2C_delay(void)u8 i=30; / 這里可以優(yōu)化速度 ,經(jīng)測試最低到 5 還能寫入 while(i)i-;void delay5ms(void)int i=5000;while(i)i-;/* Function Name : I2C_Start* Description : Master Start
9、 Simulation IIC Communication* Input : None* Output: None* Return: WheatherStart* * / bool I2C_Start(void)SDA_H;SCL_H;退出, 退出I2C_delay();if(!SDA_read)return FALSE; /SDA 線為低電平則總線忙 SDA_L;I2C_delay();if(SDA_read) return FALSE;/SDA 線為高電平則總線出錯SDA_L;I2C_delay();return TRUE;/* Function Name : I2C_Stop* Desc
10、ription : Master Stop Simulation IIC Communication* Input : None* Output: None* Return: None *void I2C_Stop(void)SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SDA_H;I2C_delay();/* Function Name : I2C_Ack * Description : Master Send Acknowledge Single* Input : None* Output: None* Return: None
11、* * void I2C_Ack(void)SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();/* Function Name : I2C_NoAck * Description : Master Send No Acknowledge Single * Input : None* Output: None* Return: None*/* void I2C_NoAck(void) SCL_L; I2C_delay(); SDA_H; I2C_delay(); SCL_H; I2C_delay();S
12、CL_L; I2C_delay();/* Function Name : I2C_WaitAck* Description : Master Reserive Slave Acknowledge Single* Input : None* Output : None* Return : Wheather Reserive Slave Acknowledge Single * */ bool I2C_WaitAck(void)/ 返回為 :=1 有 ACK,=0 無 ACKSCL_L;I2C_delay();SDA_H;I2C_delay();SCL_H;I2C_delay();if(SDA_r
13、ead)SCL_L;I2C_delay();return FALSE;SCL_L;I2C_delay();return TRUE; /* Function Name : I2C_SendByte* Description : Master Send a Byte to Slave* Input: Will Send Date* Output: None* Return: None *void I2C_SendByte(u8 SendByte) / 數(shù)據(jù)從高位到低位 /u8 i=8;while(i-)SCL_L;I2C_delay();if(SendByte&0x80)SDA_H;els
14、eSDA_L;SendByte<<=1;I2C_delay();SCL_H;I2C_delay();SCL_L;/* * Function Name : I2C_RadeByte* Description : Master Reserive a Byte From Slave* Input: None* Output: None* Return: Date From Slave*unsigned char I2C_RadeByte(void) / 數(shù)據(jù)從高位到低位 / u8 i=8;u8 ReceiveByte=0;SDA_H;while(i-)ReceiveByte<<
15、;=1;SCL_L;I2C_delay();SCL_H;I2C_delay();if(SDA_read)ReceiveByte|=0x01;SCL_L;return ReceiveByte;/ZRX/ 單字節(jié)寫入*bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data) /void if(!I2C_Start()return FALSE;I2C_SendByte(SlaveAddress); / 發(fā)送設(shè)備地址 +寫信號 /I2C_SendByte(REG_Addr
16、ess & 0x0700) >>7) | SlaveAddress & 0xFFFE);/設(shè)置高起始地址 +器件地址if(!I2C_WaitAck()I2C_Stop(); return FALSE;I2C_SendByte(REG_Address ); / 設(shè)置低起始地址 I2C_WaitAck();I2C_SendByte(REG_data);I2C_WaitAck();I2C_Stop();delay5ms(); return TRUE;/ 單字節(jié)讀取* unsigned char Single_Read(unsigned char SlaveAddress,
17、unsigned char REG_Address) unsigned char REG_data;if(!I2C_Start()return FALSE;I2C_SendByte(SlaveAddress); /I2C_SendByte(REG_Address & 0x0700) >>7) | REG_Address & 0xFFFE);/ 設(shè)置高起始地址 +器件地址if(!I2C_WaitAck()I2C_Stop();test=1; return FALSE;I2C_SendByte(u8) REG_Address); / 設(shè)置低起始地址I2C_WaitAck
18、();I2C_Start();I2C_SendByte(SlaveAddress+1);I2C_WaitAck();REG_data= I2C_RadeByte();I2C_NoAck();I2C_Stop();/return TRUE; return REG_data;/* *函數(shù)名稱 :RCC_Configuration(void)*函數(shù)功能 :時鐘初始化*輸入:無*輸出:無*返回:無* */void RCC_Configuration(void)/* RCC system reset(for debug purpose) */ RCC_DeInit();/* Enable HSE */R
19、CC_HSEConfig(RCC_HSE_ON);/* Wait till HSE is ready */HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS)/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1);/* PCLK1 = HCLK/2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* Flash 2 wait state
20、*/FLASH_SetLatency(FLASH_Latency_2);/* Enable Prefetch Buffer */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* Enable PLL */RCC_PLLCmd(ENABLE);/* Wait till PLL is ready */while(RCC_GetFlagStatus(RCC_FLAG_PLL
21、RDY) = RESET)/* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08)/* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO
22、A | RCC_APB2Periph_GPIOB , ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF , ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO , ENABLE); /*函數(shù)名稱 :GPIO_Configuration(void)*函
23、數(shù)功能 :端口初始化*輸入:無*輸出:無*返回:無*/void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE );/* Configure USART1 Tx as alternate function push-pull */= GPIO_Pin_9;/選中管腳 9= GPIO_Mo
24、de_AF_PP;/復(fù)用推挽輸出= GPIO_Speed_50MHz;/最高輸出速率50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); / 選擇 A 端口/* Configure USART1 Rx as input floating */= GPIO_Pin_10; / 選中管腳 10= GPIO_Mode_IN_FLOATING; / 浮空輸入GPIO_Init(GPIOA, &GPIO_InitStructure); / 選擇 A 端口 /* 函數(shù)名稱 :USART1_Configuration(void)*函數(shù)功能 :串口 1 初始化
25、*輸入:無*輸出:無*返回:無*/void USART1_Configuration(void)USART_InitTypeDef USART_InitStructure;USART_ClockInitTypeDef USART_ClockInitStructure;= USART_Clock_Disable;/時鐘低電平活動= USART_CPOL_Low;/時鐘低電平= USART_CPHA_2Edge;/時鐘第二個邊沿進(jìn)行數(shù)據(jù)捕獲= USART_LastBit_Disable;/ 最后位數(shù)據(jù)的時鐘脈沖不從SCLK輸岀RCC_APB2PeriphClockCmd(RCC_APB2Perip
26、h_TIM1 |RCC_APB2Periph_USART1, ENABLE );/* Configure the USART1 synchronous paramters */USART_ClockInit(USART1, &USART_ClockInitStructure); 設(shè)置=9600; / 時鐘參數(shù)初始化= USART_WordLength_8b;= USART_StopBits_1;= USART_Parity_No ;= USART_HardwareFlowControl_None;= USART_Mode_Rx | USART_Mode_Tx;波特率為: 115200/
27、 8 位數(shù)據(jù)/ 在幀結(jié)尾傳輸 1 個停止位/ 奇偶失能/ 硬件流控制失能/ 發(fā)送使能 + 接收使能/* Configure USART1 basic and asynchronous paramters */USART_Init(USART1, &USART_InitStructure);/* Enable USART1 */USART_ClearFlag(USART1, USART_IT_RXNE); USART_ITConfig(USART1,USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE);/ 清中斷,以免一啟用中斷后立即產(chǎn)生中斷
28、/使能USART仲斷源/USART1 總開關(guān):開啟/*函數(shù)名稱 :NVIC_Configuration(void)*函數(shù)功能 :中斷初始化*輸入:無*輸岀:無*返回:無*/void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);= WWDG_IRQChannel;= 0;NVIC_Init(&NVIC_InitStructure);/*函數(shù)名稱 :WWDG_Configuration(void)*函數(shù)功能 :看門狗初始化
29、*輸入:無*輸出:無*返回:無* */ void WWDG_Configuration(void)RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8);/ WWDG clock counter =(PCLK1/4096)/8 = 244 Hz (4 ms)WWDG_SetWindowValue(0x41); / Set Window value to 0x41WWDG_Enable(0x50);= 4 ms * 64 = 262 msWWDG_ClearFlag();WWD
30、G_EnableIT();/*/ Enable WWDG and set counter value to 0x7F, WWDG timeout/ Clear EWI flag/ Enable EW interrupt*函數(shù)名稱 :Delay(vu32 nCount)*函數(shù)功能 :延時函數(shù)*輸入:無*輸出:無*返回:無* */void Delay(vu32 nCount)for(; nCount != 0; nCount-);/* 函數(shù)名稱 : void Delayms(vu32 m)* 函數(shù)功能 : 長延時函數(shù) m=1, 延時 1ms輸 入 : 無* 輸出 : 無* 返回 : 無* */vo
31、id Delayms(vu32 m)u32 i;for(; m != 0; m-)for (i=0; i<50000; i+);/*函數(shù)名稱 :WWDG_IRQHandler(void)*函數(shù)功能 :窗口提前喚醒中斷*輸入:無*輸出:無*返回:無* */void WWDG_IRQHandler(void)/* Update WWDG counter */ WWDG_SetCounter(0x50);/* Clear EWI flag */WWDG_ClearFlag();/* void USART1_SendData(uchar SendData)USART_SendData(USART
32、1, SendData);Delayms(1);II初始化 MPU6O50根據(jù)需要請參考 pdf進(jìn)行修改*void Init_MPU6050(void)Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);II 解除休眠狀態(tài)Single_Write(MPU6050_Addr,SMPLRT_DIV, 0x07); Single_Write(MPU6050_Addr,CONFIG, 0x06);Single_Write(MPU6050_Addr,GYRO_CONFIG, 0x18);Single_Write(MPU6050_Addr,ACCEL_CONFIG, 0
33、x01);II*讀取MPU6050數(shù)據(jù)*void READ_MPU6050(void)BUF0=Single_Read(MPU6050_Addr,GYRO_XOUT_L);BUF1=Single_Read(MPU6050_Addr,GYRO_XOUT_H);T_X= (BUF1<<8)|BUF0;T_X/=; / 讀取計算 X 軸數(shù)據(jù)BUF2=Single_Read(MPU6050_Addr,GYRO_YOUT_L);BUF3=Single_Read(MPU6050_Addr,GYRO_YOUT_H);T_Y= (BUF3<<8)|BUF2;T_Y/=; / 讀取計算 Y 軸數(shù)據(jù)BU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- TCSI 0045-2025 居家物理環(huán)境適老化改造規(guī)范
- 平?jīng)鏊原h(huán)氧地坪施工方案
- 初中記敘文的結(jié)尾寫法
- 建筑工程勞務(wù)施工合同范本
- 食用油罐外壁防腐施工方案
- 裝配式商超貨架施工方案
- 濱州期末數(shù)學(xué)試卷
- 沖擊鉆機施工方案
- 智研咨詢發(fā)布:中國干細(xì)胞治療行業(yè)發(fā)展現(xiàn)狀、產(chǎn)業(yè)全景概覽及投資方向分析報告
- 科技創(chuàng)新在高質(zhì)量共建一帶一路中的作用
- 20以內(nèi)進(jìn)位加法口算練習(xí)打印版
- 戴氏無線電遙控飛機教程
- 課件:企業(yè)經(jīng)濟統(tǒng)計學(xué)
- 巴黎盧浮宮介紹PPT模板課件
- PPT模板 上海外國語大學(xué)
- 蒂森克虜伯電梯曳引輪鋼絲繩安裝布置
- 共享充電寶項目服務(wù)合同
- 小學(xué)食堂滿意度問卷調(diào)查表
- 包裝SOP作業(yè)指導(dǎo)書
- 接待手冊(范本)
- 玻尿酸注射術(shù)前同意書
評論
0/150
提交評論