我是靠谱客的博主 甜甜帆布鞋,最近开发中收集的这篇文章主要介绍MPU6050配置中断读取数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MPU6050相关寄存器写满数据后产生数据中断,主机检测外部中断用于读取数据,如此节省CPU资源

void MPU6050_Init(void)
{
int i = 0, j = 0;
//加入中断初始化
EXIT_B5_Init();
//在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可能会出错
//没试过
for(i=0;i<1000;i++)
for(j=0;j<1000;j++);
I2C_ByteWrite(0x00, MPU_PWR_MGMT1_REG);
//解除休眠状态
I2C_ByteWrite(20 , MPU_SAMPLE_RATE_REG);
//陀螺仪采样率
I2C_ByteWrite(0x06 , MPU_CFG_REG);
I2C_ByteWrite(3<<3 , MPU_ACCEL_CFG_REG);
//配置加速度传感器工作在16G模式
I2C_ByteWrite(0x18, MPU_GYRO_CFG_REG);
//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
//1001 1100
选择中断电平,逻辑电平为0
50us高
查询立即自动清除
I2C_ByteWrite(0x9c, MPU_INTBP_CFG_REG);
I2C_ByteWrite(0x01, MPU_INT_EN_REG);
//选择为数据中断
}
void EXIT_B5_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//GPIO设置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PORTB时钟
GPIO_InitStructure.GPIO_Pin
= GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB5
//外部中断设置
//GPIOB5 中断线以及中断初始化配置
上升沿触发
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_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//优先级设置
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
//使能按键key1所在的外部中断通道 EXTI9_5_IRQHandler
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
//抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
//子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
//外部中断B5服务程序
void EXTI9_5_IRQHandler(void)
{
u8 sta;
if(EXTI_GetITStatus(EXTI_Line5)!= RESET)
//B5
{
//I2C_BufferRead(u8* pBuffer, u8 ReadAddr, u16 NumByteToRead)
I2C_BufferRead(&sta, MPU_INT_STA_REG,1);
if (sta & 0x01)
{
MPU6050ReadAcc(Acel);
printf("加速度:%8d%8d%8d", Acel[0], Acel[1], Acel[2]);
MPU6050ReadGyro(Gyro);
printf("
陀螺仪%8d%8d%8d", Gyro[0], Gyro[1], Gyro[2]);
MPU6050ReadTemp(&Temp);
printf("
温度%drn", Temp);
}
EXTI_ClearITPendingBit(EXTI_Line5); //清除LINE1上的中断标志位
}
}

 

最后

以上就是甜甜帆布鞋为你收集整理的MPU6050配置中断读取数据的全部内容,希望文章能够帮你解决MPU6050配置中断读取数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部