开发板:K210 AIRV R3版 widora

开发环境:kendryte IDE 官方的

必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图

(一) 新建文件夹11my_code_mpu6050

礼物 + 地球

库和实例都没有 IIC 所以只能自己写, 我们这里用spi的例程来改

安装依赖

清理 + 构建

只保留这几个

查看原理图

SDA -> IO10

SCL -> IO9

先配置

(二) 开始写代码

I2C在第15章

加个i2c.h 头文件 然后安装依赖, 再清理 + 构建

按举例来改

移植代码 参考野火的MPU6050 F103开发板 不参考他的了 太多了

现在参考 买模块附带的51程序

复制宏定义过去

然后移植过去K210

继续移植

移植到K210

继续移植

然后一条龙看看(清理+构建+下载)

这边修正一下 报错了

串口没输出., 配置下

串口还是没输出 换个串口

打开其他串口助手能读了

但数据是全0,我去检查下

我TM的拿了GY801的模块当GY521mpu-6050资料

换了之后还是不行

查了手册 改了下 OK了

特别注意, 请务必焊好, 我这边是用杜板线挂着, 因为接触不稳,就出出现全0,只能按复位后才正常输出

MPU6050移植完毕, 下次不知道能不能在K210再见了

链接:https://pan.baidu.com/s/1Ah_SmWkZ2gs4XbbnodmcKA 
提取码:f0wf

main.c代码如下

#include <bsp.h>
#include <fpioa.h>
#include <gpiohs.h>
#include <stdint.h>
#include <stdio.h>
#include <sysctl.h>
#include <uart.h>#include "i2c.h"
#define UART_NUM UART_DEVICE_3void uart_print(const char const *str) {uart_send_data(UART_NUM, str, strlen(str));
}//****************************************
// 定义MPU6050内部地址
//****************************************
#define SMPLRT_DIV 0x19  //陀螺仪采样率,典型值:0x07(125Hz)
#define CONFIG 0x1A      //低通滤波频率,典型值:0x06(5Hz)
#define GYRO_CONFIG \0x1B  //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
#define ACCEL_CONFIG \0x1C  //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
#define ACCEL_XOUT_H 0x3B
#define ACCEL_XOUT_L 0x3C
#define ACCEL_YOUT_H 0x3D
#define ACCEL_YOUT_L 0x3E
#define ACCEL_ZOUT_H 0x3F
#define ACCEL_ZOUT_L 0x40
#define TEMP_OUT_H 0x41
#define TEMP_OUT_L 0x42
#define GYRO_XOUT_H 0x43
#define GYRO_XOUT_L 0x44
#define GYRO_YOUT_H 0x45
#define GYRO_YOUT_L 0x46
#define GYRO_ZOUT_H 0x47
#define GYRO_ZOUT_L 0x48
#define PWR_MGMT_1 0x6B    //电源管理,典型值:0x00(正常启用)
#define WHO_AM_I 0x75      // IIC地址寄存器(默认数值0x68,只读)
#define SlaveAddress 0xD0  // IIC写入时的地址字节数据,+1为读取void MPU6050_INIT(void);
int GETDATA_MPU6050(uint8_t addr);int main(void) {plic_init();sysctl_enable_irq();uart_init(UART_NUM);uart_configure(UART_NUM, 115200, 8, UART_STOP_1, UART_PARITY_NONE);i2c_init(I2C_DEVICE_0, 0x68, 7, 200000);MPU6050_INIT();while (1) {printf("ACCEL_XOUT_H:%d\r\n", GETDATA_MPU6050(ACCEL_XOUT_H));printf("ACCEL_YOUT_H:%d\r\n", GETDATA_MPU6050(ACCEL_YOUT_H));printf("ACCEL_ZOUT_H:%d\r\n", GETDATA_MPU6050(ACCEL_ZOUT_H));printf("GYRO_XOUT_H:%d\r\n", GETDATA_MPU6050(GYRO_XOUT_H));printf("GYRO_YOUT_H:%d\r\n", GETDATA_MPU6050(GYRO_YOUT_H));printf("GYRO_ZOUT_H:%d\r\n", GETDATA_MPU6050(GYRO_ZOUT_H));sleep(1);}
}void MPU6050_INIT(void) {uint8_t data_buf[2] = {PWR_MGMT_1, 0x00};// Single_WriteI2C(PWR_MGMT_1, 0x00);   //解除休眠状态i2c_send_data(I2C_DEVICE_0, data_buf, 2);data_buf[0] = SMPLRT_DIV;data_buf[1] = 0x07;// Single_WriteI2C(SMPLRT_DIV, 0x07);i2c_send_data(I2C_DEVICE_0, data_buf, 2);data_buf[0] = CONFIG;data_buf[1] = 0x06;// Single_WriteI2C(CONFIG, 0x06);i2c_send_data(I2C_DEVICE_0, data_buf, 2);data_buf[0] = GYRO_CONFIG;data_buf[1] = 0x18;// Single_WriteI2C(GYRO_CONFIG, 0x18);i2c_send_data(I2C_DEVICE_0, data_buf, 2);data_buf[0] = ACCEL_CONFIG;data_buf[1] = 0x01;// Single_WriteI2C(ACCEL_CONFIG, 0x01);i2c_send_data(I2C_DEVICE_0, data_buf, 2);
}int GETDATA_MPU6050(uint8_t addr) {uint8_t H, L;uint8_t reg = addr;i2c_recv_data(I2C_DEVICE_0, &reg, 1, &H, 1);reg = addr + 1;i2c_recv_data(I2C_DEVICE_0, &reg, 1, &L, 1);return ((H << 8) + L);  //合成数据/*H=Single_ReadI2C(REG_Address);L=Single_ReadI2C(REG_Address+1);return (H<<8)+L;   //合成数据*/
}

K210入门-裸机开发(十)之IIC协议_MPU6050六轴陀螺仪相关推荐

  1. K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)

    开发板:K210 AIRV R3版 widora 开发环境:kendryte IDE 官方的 必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图 (一) 新建文 ...

  2. ARM开发之基于IIC协议的TM1650驱动实现(模拟IIC实现)

    目录 一.内存映射 1.什么是内存映射?为什么要内存映射? 2.gec6818如何进行内存映射?(相关的函数) 3.内存映射代码 : 二.模拟IIC的底层代码实现 1.配置输入输出方向 2.拉高拉低引 ...

  3. 一起学mini2440裸机开发(十)--mini2440外部中断实验

    我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表, ...

  4. linux开发板lcd按压,嵌入式Linux裸机开发(十五)——LCD

    嵌入式Linux裸机开发(十五)--LCD 一.LCD简介LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TF ...

  5. lcd命令 linux,嵌入式Linux裸机开发(十五)——LCD

    嵌入式Linux裸机开发(十五)--LCD 一.LCD简介 LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置T ...

  6. STM32驱动MPU6050基于IIC协议

    一. 简介 MPU6050是一款六轴陀螺仪,可以通过IIC协议输出三个方向上的加速度和角速度,在平衡车和飞控中较为常见.一般情况下,模块有用的引脚只有四个(其它的不常用),即VCC,GND,SDA和S ...

  7. 基于模型设计(MBD)工程方法开发六轴机械臂系统实战

    本课程采用基于模型设计(MBD)的工程开发方法,实现对六轴机械臂系统的开发,包括六轴机械臂的知识和控制器的软硬件实现,有助于设计串联.并联的机械臂.康复医疗机器人等其它机电设备的电控系统.目前,这种世 ...

  8. iic裸机与linux通信,基于IIC协议的Linux操作系统与裸机通信的方法

    主权项: 1.一种基于IIC协议的Linux操作系统与裸机通信的方法,其特征在于,包括如下步骤:步骤S1,对采用Linux系统的多个硬件和裸机同时挂载在总线上,包括:配置一个主机设备和多个从机设备,每 ...

  9. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...

最新文章

  1. Entity Component System
  2. 删除SmartAuditor日记信息报错问题
  3. 打游戏提示计算机丢失,Windows7电脑运行某游戏提示“计算机丢失mxvcp120.dll”怎么办...
  4. php6 配置,thinkphp6如何配置环境变量
  5. 机器学习实战(一)——员工离职预测
  6. vmware设置静态ip地址
  7. C++ 使用Poco库操作 json 文件
  8. MATLAB积分函数integral()的使用方法
  9. android ormlite框架,Android ORMLite 框架的入门用法
  10. 马尔科夫链Markov以及空间Markov Matlab代码
  11. 【我的Android进阶之旅】SQLite出错时候的错误码整理
  12. IDEA配置tomcat静态资源目录
  13. 全面了解Mysql(五)表
  14. 【实践】python 机器码 实现一机一码
  15. Flowable 79 张表都是干嘛的?
  16. 监控平台bosun快速入门
  17. 唐宋文学诗人分布展示
  18. 数据可视化 d3操作汇总(二):圆弧、饼图、环图、玫瑰图绘制
  19. excel smart流程图增加_用 SmartArt 轻松制作流程图,搞定 Office 多图排版
  20. 完数什么意思_数学中合数是什么意思?

热门文章

  1. 如何给DPDK开源社区提交补丁
  2. 项目文件模板-项目实施变更申请表
  3. 程序人生丨想学编程,大学什么样的专业能成为一名真正的程序员?
  4. 怎么让网页变成黑白色
  5. Xception深度可分离卷积-论文笔记
  6. 迅雷register脚本
  7. M3DGIS三维数字沙盘电子沙盘地理信息系统开发教程第10课
  8. Pycharm Professional(专业版),永久注册码,无需每次输入激活码
  9. 以 “铝型材的特点” 为中心,写一段话
  10. 乐高小颗粒零件清单 大全