1 / 16
文档名称:

mpu6050详细C语言程序.pdf

格式:pdf   大小:315KB   页数:16页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

mpu6050详细C语言程序.pdf

上传人:我是开始 2023/3/18 文件大小:315 KB

下载得到文件列表

mpu6050详细C语言程序.pdf

文档介绍

文档介绍:该【mpu6050详细C语言程序 】是由【我是开始】上传分享,文档一共【16】页,该文档可以免费在线阅读,需要了解更多关于【mpu6050详细C语言程序 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
实用文档
/******************************************************************************
*
//陀螺仪MPU6050IIC测试程序
*******************************************************************************
/
#include""
#include<>//Keillibrary
GPIO_InitTypeDefGPIO_InitStructure;
ErrorStatusHSEStartUpStatus;
#defineucharunsignedchar
#defineuintunsignedint
//定义MPU6050内部地址
#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
#definePWR_MGMT_10x6B//电源管理,典型值:0x00(正常启用)
//#defineWHO_AM_I0x75//IIC地址寄存器(默认数值0x68,只读)
文案大全:.
实用文档
//****************************
#defineMPU6050_Addr0xD0//定义器件在IIC总线中的从地址,根据ALT
ADDRESS地址引脚不同修改
unsignedcharTX_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_6
#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_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;
}
/******************************************************************************
*
*FunctionName:I2C_GPIO_Config
*Description:ConfigrationSimulationIICGPIO
*Input:None
*Output:None
*Return:None
******************************************************************************
*/
voidI2C_GPIO_Config(void)
{
GPIO_InitTypeDefGPIO_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_InitStructure);
}
/******************************************************************************
*
*FunctionName:I2C_delay
*Description:SimulationIICTimingseriesdelay
*Input:None
*Output:None
*Return:None
******************************************************************************
*/
voidI2C_delay(void)
{
u8i=30;//这里可以优化速度,经测试最低到5还能写入
while(i)
{
i--;
}
文案大全:.
实用文档
}
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;
I2C_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:None
*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;
else
SDA_L;
SendByte<<=1;
I2C_delay();
SCL_H;
I2C_delay();
}
SCL_L;
}
/******************************************************************************
*
*FunctionName:I2C_RadeByte
*Description:MasterReseriveaByteFromSlave
*Input:None
*Output:None
*Return:DateFromSlave
******************************************************************************
*/
unsignedcharI2C_RadeByte(void)//数据从高位到低位//
{
u8i=8;
u8ReceiveByte=0;
SDA_H;
while(i--)
{
ReceiveByte<<=1;
SCL_L;
I2C_delay();
SCL_H;
I2C_delay();
if(SDA_read)
{
ReceiveByte|=0x01;
}
}
SCL_L;
returnReceiveByte;
文案大全:.
实用文档
}
//ZRX
//单字节写入*******************************************
boolSingle_Write(unsignedcharSlaveAddress,unsignedcharREG_Address,unsignedchar
REG_data)//void
{
if(!I2C_Start())returnFALSE;
I2C_SendByte(SlaveAddress);//发送设备地址+写信号//I2C_SendByte(((REG_Address
&0x0700)>>7)|SlaveAddress&0xFFFE);//设置高起始地址+器件地址
if(!I2C_WaitAck()){I2C_Stop();returnFALSE;}
I2C_SendByte(REG_Address);//设置低起始地址
I2C_WaitAck();
I2C_SendByte(REG_data);
I2C_WaitAck();
I2C_Stop();
delay5ms();
returnTRUE;
}
//单字节读取*****************************************
unsignedcharSingle_Read(unsignedcharSlaveAddress,unsignedcharREG_Address)
{unsignedcharREG_data;
if(!I2C_Start())returnFALSE;
I2C_SendByte(SlaveAddress);//I2C_SendByte(((REG_Address&0x0700)>>7)|
REG_Address&0xFFFE);//设置高起始地址+器件地址
if(!I2C_WaitAck()){I2C_Stop();test=1;returnFALSE;}
I2C_SendByte((u8)REG_Address);//设置低起始地址
I2C_WaitAck();
I2C_Start();
I2C_SendByte(SlaveAddress+1);
I2C_WaitAck();
REG_data=I2C_RadeByte();
I2C_NoAck();
I2C_Stop();
//returnTRUE;
returnREG_data;
}
/*
*******************************************************************************
*
文案大全:.
实用文档
**函数名称:RCC_Configuration(void)
**函数功能:时钟初始化
**输入:无
**输出:无
**返回:无
*******************************************************************************
*
*/
voidRCC_Configuration(void)
{
/*RCCsystemreset(fordebugpurpose)*/
RCC_DeInit();
/*EnableHSE*/
RCC_HSEConfig(RCC_HSE_ON);
/*WaittillHSEisready*/
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);
/*Flash2waitstate*/
FLASH_SetLatency(FLASH_Latency_2);
/*EnablePrefetchBuffer*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/*PLLCLK=8MHz*9=72MHz*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
/*EnablePLL*/
RCC_PLLCmd(ENABLE);
/*WaittillPLLisready*/
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
{
文案大全:.
实用文档
}
/*SelectPLLassystemclocksource*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/*WaittillPLLisusedassystemclocksource*/
while(RCC_GetSYSCLKSource()!=0x08)
{
}
}
/*EnableGPIOA,GPIOB,GPIOC,GPIOD,GPIOE,GPIOF,GPIOGandAFIOclocks*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|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);
}
/*
*******************************************************************************
*
**函数名称:GPIO_Configuration(void)
**函数功能:端口初始化
**输入:无
**输出:无
**返回:无
*******************************************************************************
*
*/
voidGPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);
/*ConfigureUSART1Tx()asalternatefunctionpush-pull*/
=GPIO_Pin_9;//选中管脚9
=GPIO_Mode_AF_PP;//复用推挽输出
=GPIO_Speed_50MHz;//最高输出速率50MHz
GPIO_Init(GPIOA,&GPIO_InitStructure);//选择A端口
/*ConfigureUSART1Rx()asinputfloating*/
文案大全:.
实用文档
=GPIO_Pin_10;//选中管脚10
=GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);//选择A端口
}
/*
*******************************************************************************
*
**函数名称:USART1_Configuration(void)
**函数功能:串口1初始化
**输入:无
**输出:无
**返回:无
*******************************************************************************
*
*/
voidUSART1_Configuration(void)
{
USART_InitTypeDefUSART_InitStructure;
USART_ClockInitTypeDefUSART_ClockInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|RCC_APB2Periph_USART1,
ENABLE);
=USART_Clock_Disable;//时钟低电
平活动
=USART_CPOL_Low;//时钟低电

=USART_CPHA_2Edge;//时钟
第二个边沿进行数据捕获
=USART_LastBit_Disable;//最后一位数据
的时钟脉冲不从SCLK输出
/*ConfiguretheUSART1synchronousparamters*/
USART_ClockInit(USART1,&USART_ClockInitStructure);//时钟参数
初始化设置
=9600;//波特率为:115200
=USART_WordLength_8b;//8位数据
=USART_StopBits_1;//在帧结尾传
输1个停止位
=USART_Parity_No;//奇偶失能
=USART_HardwareFlowControl_None;
文案大全:.
实用文档
//硬件流控制失能
=USART_Mode_Rx|USART_Mode_Tx;//发
送使能+接收使能
/*ConfigureUSART1basicandasynchrono