MPU6050中断读取数据及采样时长配置

目录

  • 前言
  • 一、MPU6050 FIFO中断配置
  • 二、配置DMP采样时长
  • 结语


前言

MPU6050具备中断寄存器,有助于精准获取数据。本文将使用STM32配置FIFO中断,并控制中断时间。
如果对于MPU6050还存在其他问题可参考另一篇文章。
MPU6050常见问题的分析与处理


提示:以下是本篇文章的正文内容

一、MPU6050 FIFO中断配置

首先在MPU6050初始化函数中配置好

#define MPU_INT_EN_REG			0X38	//中断使能寄存器
#define MPU_INTBP_CFG_REG		0X37	//中断/旁路设置寄存器

MPU_Write_Byte(MPU_INT_EN_REG, 0X01); //开启FIFO中断
MPU_Write_Byte(MPU_INTBP_CFG_REG, 0X80);	//INT引脚0X80低电平触发
//MPU_Write_Byte(MPU_INTBP_CFG_REG,0X9c);	//INT引脚0X9c高电平触发

MPU6050触发的是STM32的外部中断,此处使用的是PB5的外部中断,因为是低电平触发,所以GPIO模式设置为上拉输入。

void MPU6050_EXTI_Init(void)
{
       
	GPIO_InitTypeDef GPIO_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //外部中断,需要使能AFIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource5);
	
	EXTI_InitStructure.EXTI_Line = EXTI_Line5;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	
	NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2, 
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure); 
}

以下是中断服务函数

void EXTI9_5_IRQHandler(void)
{
     
	if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_5) == 0) //低电平触发
	{
     
		EXTI->PR=1<<5; //清楚中断标志位
		
		mpu_dmp_get_data(&pitch, &roll, &yaw); //获取欧拉角
		
		/*这里写相关应用*/
	}
}

二、配置DMP采样时长

上面代码可以在FIFO溢出时产生中断及时读取数据,这个中断时间是可以控制的。经过定时器定时发现还挺准的。

在MPU6050初始化函数中配置

MPU_Set_Rate(200); //设置采样率为200Hz

在DMP初始化函数中配置

res = mpu_set_sample_rate(200); //设置采样率
if(res)
	return 3;

res = dmp_set_fifo_rate(200); //设置DMP输出速率(最大不超过200Hz)
if(res)
	return 7;   

此处将采样率设置为200HZ,那么采样时间就是1/200=5ms
根据公式T = 1 / f
实际上采样频率是根据DMP频率,如果两个频率不同最终也以DMP的为主,当然前提是使用DMP。


结语

那么以上就是本篇文章的所有内容了。
本文如果有什么不对的或者需要改进的地方欢迎指出。

你可能感兴趣的:(MPU6050,stm32,嵌入式,传感器,单片机)