【基于逐飞RT1064开源库3.5.0的MPU6050,DMP的移植与使用】 您所在的位置:网站首页 mpu6050使用手册 【基于逐飞RT1064开源库3.5.0的MPU6050,DMP的移植与使用】

【基于逐飞RT1064开源库3.5.0的MPU6050,DMP的移植与使用】

2023-06-28 17:49| 来源: 网络整理| 查看: 265

首先下载相关文件eMPL.zip,解压缩得到eMPL文件夹,将整个eMPL文件夹复制到要移植的工程下的project/code/目录下,包括以下文件:在这里插入图片描述 打开keil mdk项目,点击魔法棒配置目录,添加…\code\eMPL与…\code\eMPL\include这两个环境目录,点OK。在这里插入图片描述 添加项目文件夹及文件在这里插入图片描述 选中这6个文件点击add,再点close,然后ok 在这里插入图片描述 可以看到6个文件已经被添加到项目里了 在这里插入图片描述 打开zf_driver_soft_iic.c,在最后添加以下内容:

//------------------------------------------------------------------------------------------------------------------- // @brief GPIO方向设置 // @param pin 选择的引脚 (可选择范围由 common.h 内PIN_enum枚举值确定) // @param dir 引脚的方向 输出:GPO 输入:GPI // @return void // Sample usage: gpio_dir(D0,GPO);//设置D0为输出模式 //------------------------------------------------------------------------------------------------------------------- void gpio_dir(gpio_pin_enum pin, gpio_dir_enum dir) { if (GPI == dir) PORTPTR[pin>>5]->GDIR &= ~(1U 5]->GDIR |= (1U SDA1(); SCL1(); simiic_delay(); SDA0(); simiic_delay(); SCL0(); } //字节发送程序 //发送c(可以是数据也可是地址),送完后接收从应答 //不考虑从应答位 //内部使用,用户无需调用 static int sccb_waitack(void) { SCL0(); DIR_IN(); simiic_delay(); SCL1(); simiic_delay(); if(SDA) //应答为高电平,异常,通信失败 { DIR_OUT(); SCL0(); return 0; } DIR_OUT(); SCL0(); simiic_delay(); return 1; } void send_ch(uint8 c) { uint8 i = 8; while(i--) { if(c & 0x80) SDA1();//SDA 输出数据 else SDA0(); c uint8 i; uint8 c; c=0; SCL0(); simiic_delay(); SDA1(); DIR_IN(); //置数据线为输入方式 for(i=0;i c+=1; //读数据位,将接收的数据存c } } DIR_OUT(); SCL0(); simiic_delay(); simiic_sendack(ack_x); return c; } //内部使用,用户无需调用 void simiic_stop(void) { SDA0(); SCL0(); simiic_delay(); SCL1(); simiic_delay(); SDA1(); simiic_delay(); } //IIC连续写 //addr:器件地址 //reg:寄存器地址 //len:写入长度 //buf:数据区 //返回值:0,正常 // 其他,错误代码 uint8_t MPU_Write_Len(uint8_t addr,uint8_t reg,uint8_t len,uint8_t *buf) { uint8_t i; simiic_start(); send_ch((addr simiic_start(); send_ch((addr clock_init(SYSTEM_CLOCK_600M); // 不可删除 debug_init(); // 调试端口初始化 // 此处编写用户代码 例如外设初始化代码等 float pitch=0,roll=0,yaw=0; //欧拉角 mpu6050_init(); ips114_init(); while(mpu_dmp_init()!=0) { ips114_show_string(0,0,"dmp-error"); } ips114_show_string(0,0,"dmp-init-ok"); while (1) { //此处编写需要循环执行的代码 mpu_dmp_get_data(&pitch,&roll,&yaw); ips114_show_float(0,20,pitch,3,2); ips114_show_float(0,40,roll,3,2); ips114_show_float(0,60,yaw,3,2); system_delay_ms(5); } }

最后编译烧录即可。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有