K210入门-裸机开发(十)之IIC协议_MPU6050六轴陀螺仪
开发板: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, ®, 1, &H, 1);reg = addr + 1;i2c_recv_data(I2C_DEVICE_0, ®, 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六轴陀螺仪相关推荐
- K210入门-裸机开发(九)之IIS功放扬声器小喇叭(SD卡+fat文件系统)_只能wav格式(用的wav解码器)
开发板:K210 AIRV R3版 widora 开发环境:kendryte IDE 官方的 必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图 (一) 新建文 ...
- ARM开发之基于IIC协议的TM1650驱动实现(模拟IIC实现)
目录 一.内存映射 1.什么是内存映射?为什么要内存映射? 2.gec6818如何进行内存映射?(相关的函数) 3.内存映射代码 : 二.模拟IIC的底层代码实现 1.配置输入输出方向 2.拉高拉低引 ...
- 一起学mini2440裸机开发(十)--mini2440外部中断实验
我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表, ...
- linux开发板lcd按压,嵌入式Linux裸机开发(十五)——LCD
嵌入式Linux裸机开发(十五)--LCD 一.LCD简介LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TF ...
- lcd命令 linux,嵌入式Linux裸机开发(十五)——LCD
嵌入式Linux裸机开发(十五)--LCD 一.LCD简介 LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置T ...
- STM32驱动MPU6050基于IIC协议
一. 简介 MPU6050是一款六轴陀螺仪,可以通过IIC协议输出三个方向上的加速度和角速度,在平衡车和飞控中较为常见.一般情况下,模块有用的引脚只有四个(其它的不常用),即VCC,GND,SDA和S ...
- 基于模型设计(MBD)工程方法开发六轴机械臂系统实战
本课程采用基于模型设计(MBD)的工程开发方法,实现对六轴机械臂系统的开发,包括六轴机械臂的知识和控制器的软硬件实现,有助于设计串联.并联的机械臂.康复医疗机器人等其它机电设备的电控系统.目前,这种世 ...
- iic裸机与linux通信,基于IIC协议的Linux操作系统与裸机通信的方法
主权项: 1.一种基于IIC协议的Linux操作系统与裸机通信的方法,其特征在于,包括如下步骤:步骤S1,对采用Linux系统的多个硬件和裸机同时挂载在总线上,包括:配置一个主机设备和多个从机设备,每 ...
- S3C2416裸机开发系列十六_sd卡驱动实现
S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子 1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.数据传输快.可插拔.安全性好等优 ...
最新文章
- Entity Component System
- 删除SmartAuditor日记信息报错问题
- 打游戏提示计算机丢失,Windows7电脑运行某游戏提示“计算机丢失mxvcp120.dll”怎么办...
- php6 配置,thinkphp6如何配置环境变量
- 机器学习实战(一)——员工离职预测
- vmware设置静态ip地址
- C++ 使用Poco库操作 json 文件
- MATLAB积分函数integral()的使用方法
- android ormlite框架,Android ORMLite 框架的入门用法
- 马尔科夫链Markov以及空间Markov Matlab代码
- 【我的Android进阶之旅】SQLite出错时候的错误码整理
- IDEA配置tomcat静态资源目录
- 全面了解Mysql(五)表
- 【实践】python 机器码 实现一机一码
- Flowable 79 张表都是干嘛的?
- 监控平台bosun快速入门
- 唐宋文学诗人分布展示
- 数据可视化 d3操作汇总(二):圆弧、饼图、环图、玫瑰图绘制
- excel smart流程图增加_用 SmartArt 轻松制作流程图,搞定 Office 多图排版
- 完数什么意思_数学中合数是什么意思?