mpu9250STM32源程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1/13//GY-9250GY-9150IIC测试程序#includestm32f10x_lib.h#includemath.h//KeillibraryGPIO_InitTypeDefGPIO_InitStructure;ErrorStatusHSEStartUpStatus;#defineucharunsignedchar#defineuintunsignedint//定义MPU9250内部地址#defineSMPLRT_DIV0x19//陀螺仪采样率,典型值:0x07(125Hz)#defineCONFIG0x1A//低通滤波频率,典型值:0x06(5Hz)#defineGYRO_CONFIG0x1B//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)#defineACCEL_CONFIG0x1C//加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)#defineACCEL_XOUT_H0x3B#defineACCEL_XOUT_L0x3C#defineACCEL_YOUT_H0x3D#defineACCEL_YOUT_L0x3E#defineACCEL_ZOUT_H0x3F#defineACCEL_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#defineMAG_XOUT_L0x03#defineMAG_XOUT_H0x04#defineMAG_YOUT_L0x05#defineMAG_YOUT_H0x06#defineMAG_ZOUT_L0x07#defineMAG_ZOUT_H0x08#definePWR_MGMT_10x6B//电源管理,典型值:0x00(正常启用)#defineWHO_AM_I0x75//IIC地址寄存器(默认数值0x68,只读)#defineGYRO_ADDRESS0xD0//陀螺地址#defineMAG_ADDRESS0x18//磁场地址#defineACCEL_ADDRESS0xD0unsignedcharTX_DATA[4];//显示据缓存区unsignedcharBUF[10];//接收数据缓存区chartest=0;//IIC用到shortT_X,T_Y,T_Z,T_T;//X,Y,Z轴,温度/*模拟IIC端口输出输入定义*/#defineSCL_HGPIOB-BSRR=GPIO_Pin_6#defineSCL_LGPIOB-BRR=GPIO_Pin_62/13#defineSDA_HGPIOB-BSRR=GPIO_Pin_7#defineSDA_LGPIOB-BRR=GPIO_Pin_7#defineSCL_readGPIOB-IDR&GPIO_Pin_6#defineSDA_readGPIOB-IDR&GPIO_Pin_7/*函数申明-----------------------------------------------*/voidRCC_Configuration(void);voidGPIO_Configuration(void);voidNVIC_Configuration(void);voidUSART1_Configuration(void);voidWWDG_Configuration(void);voidDelay(u32nTime);voidDelayms(vu32m);/*变量定义----------------------------------------------*/voidDATA_printf(uchar*s,shorttemp_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;}voidI2C_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;GPIO_Init(GPIOB,&GPIO_InitStructure);}voidI2C_delay(void){u8i=30;//这里可以优化速度,经测试最低到5还能写入while(i){i--;3/13}}voiddelay5ms(void){inti=5000;while(i){i--;}}/********************************************************************************FunctionName:I2C_Start*Description:MasterStartSimulationIICCommunication*Input:None*Output:None*Return:WheatherStart*******************************************************************************/boolI2C_Start(void){SDA_H;SCL_H;I2C_delay();if(!SDA_read)returnFALSE;//SDA线为低电平则总线忙,退出SDA_L;I2C_delay();if(SDA_read)returnFALSE;//SDA线为高电平则总线出错,退出SDA_L;I2C_delay();returnTRUE;}/********************************************************************************FunctionName:I2C_Stop*Description:MasterStopSimulationIICCommunication*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_Stop(void){SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;4/13I2C_delay();SDA_H;I2C_delay();}/********************************************************************************FunctionName:I2C_Ack*Description:MasterSendAcknowledgeSingle*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_Ack(void){SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();}/********************************************************************************FunctionName:I2C_NoAck*Description:MasterSendNoAcknowledgeSingle*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_NoAck(void){SCL_L;I2C_delay();SDA_H;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();}/********************************************************************************FunctionName:I2C_WaitAck*Description:MasterReseriveSlaveAcknowledgeSingle*Input:None5/13*Output:None*Return:WheatherReseriveSlaveAcknowledgeSingle*******************************************************************************/boolI2C_WaitAck(void)//返回为:=1有ACK,=0无ACK{SCL_L;I2C_delay();SDA_H;I2C_delay();SCL_H;I2C_delay();if(SDA_read){SCL_L;I2C_delay();returnFALSE;}SCL_L;I2C_delay();returnTRUE;}/********************************************************************************FunctionName:I2C_SendByte*Description:MasterSendaBytetoSlave*Input:WillSendDate*Output:None*Return:None*******************************************************************************/voidI2C_SendByte(u8SendByte)//数据从高位到低位//{u8i=8;while(i--){SCL_L;I2C_delay();if(SendByte&0x80)SDA_H;elseSDA_L;SendByte=1;I2C_delay();SCL_H;I2C_delay();}6/13SCL_L;}/********************************************************************************FunctionName:I2C_RadeByte*Description:MasterReseriveaByteFromSlave*Input:None*Output:None*Return:DateFromSlave**************

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功