文档库 最新最全的文档下载
当前位置:文档库 › MPU9150

MPU9150

MPU9150
MPU9150

Mpu9150

STM32F103C8

SCL

SDA MPU6050 HMC5883L

Mpu6050传感器读取数据(ax,ay,az)(gx,gy,gz)

HMC5883L传感器读取数据(mx,my,mz)

数据结构

使用I2C进行数据传输

/*************************************************

名称:iic_init(void)

功能:iic外设1初始化(管脚配置总线速度数据位宽)

输入参数:无

输出参数:无

返回值:无

**************************************************/

void iic_init(void)

{

I2C_InitTypeDef I2C_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

/* PA6,7 SCL and SDA */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;

GPIO_Init(GPIOA, &GPIO_InitStructure);

I2C_DeInit(I2C2);

I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;

I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;

I2C_InitStructure.I2C_OwnAddress1 = 0x30;

I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;

I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

I2C_InitStructure.I2C_ClockSpeed = 300000; //200K

I2C_Cmd(I2C2, ENABLE);

I2C_Init(I2C2, &I2C_InitStructure);

/*允许1字节1应答模式*/

I2C_AcknowledgeConfig(I2C2, ENABLE);

}

/*************************************************

名称:iic_rw(u8 *data_buff, u8 byte_quantity, u8 reg_address, u8 slave_address, u8 control_byte) 功能:iic数据的读写

输入参数:

u8 *data_buff 数据输入输出指针

u8 byte_quantity 数据个数

u8 reg_address iic寄存器地址

u8 slave_address iic器件地址

u8 control_byte 读写控制字read=1 write=0

输出参数:u8 *data_buff iic读取的数据内容

返回值:无

**************************************************/

void iic_rw(u8 *DataBuff, u8 ByteQuantity, u8 RegAddress, u8 SlaveAddress, u8 ControlByte) {

u8 errorflag = 1, j, i = 1;

while(i--)

{

/* 起始位*/

I2C_GenerateSTART(I2C2, ENABLE);

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));

/* 发送器件地址(写)*/

I2C_Send7bitAddress(I2C2, SlaveAddress, I2C_Direction_Transmitter);

while(!I2C_CheckEvent(I2C2,

I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

/*发送地址*/

I2C_SendData(I2C2, RegAddress);

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

if(ControlByte == 0)

{

j=ByteQuantity;

errorflag = 0;

while(j--)

{

I2C_SendData(I2C2, *DataBuff++);

while(!(I2C_CheckEvent(I2C2,

I2C_EVENT_MASTER_BYTE_TRANSMITTED)||I2C_SR1_AF));

}

I2C_GenerateSTOP(I2C2, ENABLE);

}

else

{

I2C_GenerateSTART(I2C2, ENABLE);

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));

/* 发送器件地址(写)*/

I2C_Send7bitAddress(I2C2, SlaveAddress, I2C_Direction_Receiver);

while(!I2C_CheckEvent(I2C2,

I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); /* EV7 */

while (ByteQuantity)

{

if(ByteQuantity == 1)

{

I2C_AcknowledgeConfig(I2C2, DISABLE); //最后一位后要关闭应答的

I2C_GenerateSTOP(I2C2, ENABLE); //发送停止位

}

while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED)); /* EV7 */

*DataBuff = I2C_ReceiveData(I2C2);

DataBuff++;

/* Decrement the read bytes counter */

ByteQuantity--;

}

I2C_AcknowledgeConfig(I2C2, ENABLE); //再次允许应答模式

}

}

}

数据中断处理

/*************************************************

名称:timer_init(void)

功能:timer3外设初始化(中断定时时间)

输入参数:无

输出参数:无

返回值:无

**************************************************/

void timer_init(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

NVIC_InitTypeDef NVIC_InitStructure;

/* Enable the TIM3 gloabal Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

/* Time base configuration */

TIM_TimeBaseStructure.TIM_Period = 7200 - 1; // 0.1ms

TIM_TimeBaseStructure.TIM_Prescaler = 25 - 1; // (Period + 1) * (Prescaler + 1) / 72M = 2.5ms

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

/* TIM3 enable counter */

TIM_Cmd(TIM3, ENABLE);

/* TIM IT enable */

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);

}

相关文档