这里使用两个GPIO口模拟IIC协议
(一),图形化配置界面
1,IIC_Software:SCL(PA1),SDA(PA0)
初始化:高电平
IO类型:容忍5V
2,设置采集频率(默认:100Hz)
开启一个10ms的定时器,负责获取MPU6050数据,不能过快也不能过慢!!
(二),添加MPU6050库文件
可能需要更改软件IIC引脚
(三),主代码:
#include "ti_msp_dl_config.h"
#include "bsp_mpu6050.h"
#include "inv_mpu.h"
#include "oled.h"
#include "stdio.h"
#include "string.h"
#include "board.h"
volatile float pitch,roll,yaw; //欧拉角
int main(void)
{
SYSCFG_DL_init();
OLED_Init();
char buff[128];
MPU6050_Init();
while( mpu_dmp_init() )
{
delay_ms(200);
}
//清除定时器中断标志
NVIC_ClearPendingIRQ(TIMER_0_INST_INT_IRQN);
//使能定时器中断
NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
while(1)
{
snprintf(buff, 128, "P:%.2f ",pitch);
OLED_ShowString(0, 0, (uint8_t*)buff, 16, 1);
snprintf(buff, 128, "R:%.2f ",roll);
OLED_ShowString(0, 16, (uint8_t*)buff, 16, 1);
snprintf(buff, 128, "Y:%.2f ",yaw);
OLED_ShowString(0, 32, (uint8_t*)buff, 16, 1);
OLED_Refresh();
}
}
//定时器的中断服务函数 已配置为10ms的周期
void TIMER_0_INST_IRQHandler(void)
{
//如果产生了定时器中断
switch( DL_TimerG_getPendingInterrupt(TIMER_0_INST) )
{
case DL_TIMER_IIDX_ZERO://如果是0溢出中断
//获取欧拉角
mpu_dmp_get_data(&pitch,&roll,&yaw);
break;
default://其他的定时器中断
break;
}
}