1、#define ACCEL_ZOUT_H 0x3F#define ACCEL_ZOUT_L 0x40/#define TEMP_OUT_H 0x41/#define TEMP_OUT_L 0x42/#define GYRO_XOUT_H 0x43#define GYRO_XOUT_L 0x44 #define GYRO_YOUT_H 0x45#define GYRO_YOUT_L 0x46#define GYRO_ZOUT_H 0x47#define GYRO_ZOUT_L 0x48#define PWR_MGMT_1 0x6B /电源管理,典型值:0x00(正常启用)/#define WHO
2、_AM_I 0x75 /IIC地址寄存器(默认数值0x68,只读)/*#define MPU6050_Addr 0xD0 /定义器件在IIC总线中的从地址,根据ALT ADDRESS地址引脚不同修改unsigned char TX_DATA4; /显示据缓存区unsigned char BUF10; /接收数据缓存区char test=0; /IIC用到short T_X,T_Y,T_Z,T_T; /X,Y,Z轴,温度/模拟IIC端口输出输入定义#define SCL_H GPIOB-BSRR = GPIO_Pin_6#define SCL_L GPIOB-BRR = GPIO_Pin_6 #
3、define SDA_H GPIOB-BSRR = GPIO_Pin_7#define SDA_L GPIOB-BRR = GPIO_Pin_7#define SCL_read GPIOB-IDR & GPIO_Pin_6#define SDA_read GPIOB- GPIO_Pin_7/* 函数申明 -*/void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void USART1_Configuration(void);void WWDG_Configuration
4、(void);void Delay(u32 nTime);void Delayms(vu32 m);/* 变量定义 -*/ /*/void DATA_printf(uchar *s,short temp_data) if(temp_data0) 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
5、 : I2C_GPIO_Config* Description : Configration Simulation IIC GPIO* Input : None * Output : None* Return :* */void I2C_GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPI
6、O_Mode_Out_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; I2C_delay Simulation IIC Timing series delayvoid I2C_delay(void) u8 i=30; /这里可以优化速度 ,经测试最低到5还能写入 while(i) i-; void delay5ms(void) int i=5000; I2C_Start Master Start Simulation IIC Communication Wheather S
7、tartbool I2C_Start(void) SDA_H; SCL_H; I2C_delay(); if(!SDA_read)return FALSE; /SDA线为低电平则总线忙,退出 SDA_L; if(SDA_read) return FALSE; /SDA线为高电平则总线出错,退出 return TRUE; I2C_Stop Master Stop Simulation IIC Communicationvoid I2C_Stop(void) SCL_L; I2C_Ack Master Send Acknowledge Singlevoid I2C_Ack(void) I2C_No
8、Ack Master Send No Acknowledge Singlevoid I2C_NoAck(void) I2C_WaitAck Master Reserive Slave Acknowledge Single Wheather Reserive Slave Acknowledge Singlebool I2C_WaitAck(void) /返回为:=1有ACK,=0无ACK if(SDA_read) return FALSE; I2C_SendByte Master Send a Byte to Slave Will Send Datevoid I2C_SendByte(u8 Se
9、ndByte) /数据从高位到低位/ u8 i=8; while(i-) if(SendByte&0x80) else SendByte=1; SCL_H; I2C_RadeByte Master Reserive a Byte From Slave Date From Slave unsigned char I2C_RadeByte(void) /数据从高位到低位/ u8 ReceiveByte=0; ReceiveByte7) | SlaveAddress & 0xFFFE);/设置高起始地址+器件地址 I2C_WaitAck()I2C_Stop(); I2C_SendByte(REG_A
10、ddress ); /设置低起始地址 I2C_WaitAck(); I2C_SendByte(REG_data); I2C_Stop(); delay5ms();/单字节读取*unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address) unsigned char REG_data; /I2C_SendByte(REG_Address &7) | REG_Address &test=1; I2C_SendByte(u8) REG_Address); I2C_Start(); I2C_SendByt
11、e(SlaveAddress+1); REG_data= I2C_RadeByte(); I2C_NoAck(); /return TRUE; return REG_data; /* 函数名称 : RCC_Configuration(void)* 函数功能 : 时钟初始化* 输 入 : 无* 输 出 :* 返 回 :*/void RCC_Configuration(void) /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait ti
12、ll 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 */ FLASH_SetLatency(FLASH_L
13、atency_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_PLLRDY) = RESET) /* S
14、elect 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_GPIOA | RCC_APB2Pe
15、riph_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); GPIO_Configuration(void) 端口初始化void GPIO_Configuration(void) GP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1