QMI8658芯片I2C驱动开发指南

这个芯片纯国产挺好用的,电路很好设计,我这垃圾焊功,纯手焊,,居然能用。
在这里插入图片描述

第一部分 硬件连接


画的很简陋,看看就可以了,这里I2C总线需要接10K上拉没有画出来,这个需要注意一下。
在这里插入图片描述

第二部分 软件驱动


I2C的具体时序实现需要自己搞定!!

2.1 I2C读写寄存器功能

u8 QMI8658_ReadReg(u8 dAddr, u8 Reg)
{
    u8 Value = 0;
    //1.启动IIC
    IIC_Start();
    //2.写设备地址
    IIC_Send_Byte((dAddr << 1)|0);
    //3.wait
    if(IIC_Wait_Ack())
    {
        IIC_Stop();
        return 1;
    }
    //4.寄存器地址
    IIC_Send_Byte(Reg);
    //5.wait
    if(IIC_Wait_Ack())
    {
        IIC_Stop();
        return 1;
    }
    //6.启动IIC
    IIC_Start();
    //7.设备地址
    IIC_Send_Byte((dAddr << 1)|1);
    //8.wait read ack
    if(IIC_Wait_Ack())
    {
        IIC_Stop();
        return 1;
    }
    
    Value = IIC_Read_Byte(1);
    //9.stop
    IIC_Stop();
    return Value;
}

void QMI8658_WriteReg(u8 dAddr, u8 Reg, u8 Value)
{
    //1.启动IIC
    IIC_Start();
    //2.写设备地址
    IIC_Send_Byte((dAddr << 1)|0);
    //3.wait
    while(IIC_Wait_Ack());
    //4.写寄存器地址
    IIC_Send_Byte(Reg);
    //5.wait
    IIC_Wait_Ack();
    //6.写value
    IIC_Send_Byte(Value);
    //7.wait
    IIC_Wait_Ack();
    //8.stop
    IIC_Stop();
}

2.2 qmi8658驱动部分

void QMI8658_Init()
{
    u8 uChipID = 0;
    u16 AX=0,AY=0,AZ=0,GX=0,GY=0,GZ=0;
    // 1.Device Reset & check Device
    QMI8658_WriteReg(QMI8658_DEV,CTRL9,0xA2); //PowerReset
    delay_ms(2000);                           // wait stable
    uChipID = QMI8658_ReadReg(QMI8658_DEV,0x00); // Read ID
    while(uChipID != 0x5) delay_ms(2000);        // device check
    printf("QMC5883 check Pass!:deviceID = 0x%x \r\n",uChipID);
    
    //2.Device Settings
    QMI8658_WriteReg(QMI8658_DEV,CTRL1,0x40); //地址自增,小端
    QMI8658_WriteReg(QMI8658_DEV,CTRL2,0x33); //配置加速度计 量程+-16g,采样率ODR==1kHZ
    QMI8658_WriteReg(QMI8658_DEV,CTRL3,0x73); //配置陀螺仪  量程±2048 dps ,采样率是940HZ
    QMI8658_WriteReg(QMI8658_DEV,CTRL5,0x0); //不使用低通滤波器
    QMI8658_WriteReg(QMI8658_DEV,CTRL6,0x0); //不使用Motion on Demand
    QMI8658_WriteReg(QMI8658_DEV,CTRL7,0x03); // 使能加速度计和陀螺仪  
    
    delay_ms(2000);   
    
    for(;;){
        AX = (u16)QMI8658_ReadReg(QMI8658_DEV,AX_H);
        AX = AX<<8;
        AX = AX | (u16)QMI8658_ReadReg(QMI8658_DEV,AX_L);
        
        AY = (u16)QMI8658_ReadReg(QMI8658_DEV,AY_H);
        AY = AY<<8;
        AY = AY | (u16)QMI8658_ReadReg(QMI8658_DEV,AY_L);
        
        AZ = (u16)QMI8658_ReadReg(QMI8658_DEV,AZ_H);
        AZ = AZ<<8;
        AZ = AZ | (u16)QMI8658_ReadReg(QMI8658_DEV,AZ_L);
        
        GX = (u16)QMI8658_ReadReg(QMI8658_DEV,GX_H);
        GX = GX<<8;
        GX = GX | (u16)QMI8658_ReadReg(QMI8658_DEV,GX_L);
        
        GY = (u16)QMI8658_ReadReg(QMI8658_DEV,GY_H);
        GY = GY<<8;
        GY = GY | (u16)QMI8658_ReadReg(QMI8658_DEV,GY_L);
        
        GZ = (u16)QMI8658_ReadReg(QMI8658_DEV,GZ_H);
        GZ = GZ<<8;
        GZ = GZ | (u16)QMI8658_ReadReg(QMI8658_DEV,GZ_L);
        
        printf("QMC5883 GX=%d\r\n", GX);
        printf("QMC5883 GY=%d\r\n", GY);
        printf("QMC5883 GZ=%d\r\n", GZ);
        delay_ms(60000);  
	}
}

最后!!!注意,这里跑出来的数值是没有经过二阶低通滤波的,芯片是带这个功能的。可以配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/460201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【XR806开发板试用】基于WEBSOCKET实现人机交互(控制开关灯)以及开发问题记录

一、开发板编译、功能介绍 根据官方文档编译烧录成功后&#xff0c;我们修改下官方例子&#xff0c;进行开发来实现websocket。 整体流程&#xff1a;开发板先自动寻找指定的wifi并且连接&#xff0c;连接成功后&#xff0c;通过websocket来与服务端连接&#xff0c;连接成功后…

idea项目mapper.xml中的SQL语句黄色下划线去除

问题描述 当我们使用idea开发java项目时&#xff0c;经常会与数据库打交道&#xff0c;一般在使用mybatis的时候需要写一大堆的mapper.xml以及SQL语句&#xff0c;每当写完SQL语句的时候总是有黄色下划线&#xff0c;看着很不舒服。 解决方案&#xff1a; 修改idea的配置 Edi…

实验01 ASP.NET网站的建立及运行

【实验目的】 &#xff08;1&#xff09;能熟悉ASP.NET的开发环境Visual Studio Community 2019&#xff08;VSC 2019&#xff09;。 &#xff08;2&#xff09;能通过解决方案管理网站&#xff0c;会在解决方案中创建网站。 &#xff08;3&#xff09;会设置IIS 10中的网站…

Node.js(1)

跨平台的node.js运行环境&#xff0c;使开发者可以搭建服务器端的js应用程序 它可以编写服务器端程序&#xff1b; 编写数据接口&#xff1b;提供网页资源浏览功能 前端工程化&#xff1a;开发集成的所有工具和技术 与浏览器环境的区别 node.js环境中没有DOM和BOM fs模块-读…

Linux下安装多个nodejs并映射Jenkins

背景 需要Jenkins中切换多个Node&#xff0c;比如nodejs16和nodesjs18,所以在宿主机按照好这两个版本&#xff0c;然后再映射到Jenkins容器中 步骤 1.下载地址 https://nodejs.org/dist/ 放到 cd /opt/soft/2.解压 tar -xzvf node-v16.20.0-linux-x64.tar.gz tar -xzvf n…

SSM SpringBoot vue智能手机参数分析平台

SSM SpringBoot vue智能手机参数分析平台 系统功能 首页 图片轮播 新闻资讯 手机信息 手机百科 登录注册 个人中心 后台管理 登录注册 个人中心 手机百科管理 用户管理 手机对比管理 配置管理 新闻资讯管理 手机信息管理 对比信息管理 我的收藏管理 开发环境和技术 开发语言…

Kafka配置SASL_PLAINTEXT权限。常用操作命令,创建用户,topic授权

查看已经创建的topic ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list 创建topic 创建分区和副本数为1的topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic acltest --partitions 1 --replication-factor 1 创建kafka用户 …

迷宫寻路[天梯赛 -- 栈]

文章目录 题目描述思路AC代码 题目描述 输入样例 8 8 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 1 0 1 0 0 0 0 0 0 0 4 4 0 0 1 0 0 0 0 0 0 0 1 1 0 1 0 0 -1 -1输出样例 1,1 2,1 3,1 4,1 5,1 5,2 5…

修复ElementUI中el-select与el-option无法通过v-model实现数据双向绑定的问题

1. 问题描述 需求&#xff1a;在使用ElementUI时&#xff0c;通过el-select和el-option标签实现下拉列表功能&#xff0c;当el-option中的选项被选中时&#xff0c;被选中的选项可以正确回显到已选择的列表中。 对于上面的下拉列表&#xff0c;当我们选中“超级管理员”的选项…

Tomcat的使用

1. Tomcat 1.1 Tomcat 是什么 Tomcat 就是基于 Java 实现的一个开源免费, 也是被广泛使用的 HTTP 服务器 1.2 下载安装 Tomcat官网选择其中的 zip 压缩包, 下载后解压缩即可&#xff0c;解压缩的目录最好不要带 “中文” 或者 特殊符号 进入 webapps 目录,每个文件夹都对应…

vue3项目随笔1

1,Eslint Prettier 报错情况&#xff1a; 解决办法&#xff1a; &#xff08;1&#xff09;下载Prettier - code formatter &#xff08;2&#xff09;配置setting.json文件 文件 -> 首选项 -> 设置 -> 用户 -> Eslint "editor.defaultFormatter":…

【Hadoop】Hadoop概述与核心组件

目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop&#xff08;常用&#xff09;2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高&#xff08;高可靠、高扩展、高效、高容错&#xff09; Hadoop组成1.HDFS管理者&#xff1a;NameNode&#xff08;n…

【计算机网络_传输层】UDP和TCP协议

文章目录 1. 重新理解端口号端口号划分netstat指令pidof 2. UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的注意事项2.4 基于UDP的应用层协议 3. TCP协议&#xff08;传输控制协议&#xff09;3.1 TCP协议的格式和报头字段3.2 如何解包和分用3.3 理解TCP协议报头3.4 TCP协议的…

解决electron打包vue-element-admin项目页面无法跳转的问题

解决electron打包vue-element-admin项目页面无法跳转的问题 说明之前通过这个教程已经打包成功&#xff0c;但是发现进行账号密码登录后页面无法跳转的问题。现在已经解决&#xff0c;所以记录一下。 1、检查路由模式是否为hash模式&#xff0c;如果不是改成hash模式。 new Ro…

【DL经典回顾】激活函数大汇总(十五)(LogSoftmax附代码和详细公式)

激活函数大汇总&#xff08;十五&#xff09;&#xff08;LogSoftmax附代码和详细公式&#xff09; 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里&#xff0c;激活函数扮演着不可或缺的…

【矩阵】54. 螺旋矩阵【中等】

螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 解题思路 1、模拟顺时针螺旋顺序遍历矩阵…

R语言语法基础(说人话版)

在Rstudio中使用ctrl回车来执行某一行的代码 在R语言中&#xff0c;通常不需要像C语言一样在每条语句的结尾添加分号来表示语句结束。R语言是一种脚本语言&#xff0c;它使用换行符来分隔语句&#xff0c;因此分号通常是可选的&#xff0c;除非你想在同一行上写多个语句。在R中…

Selenium 自动化 —— 使用WebDriverManager自动下载驱动

上一篇文章 入门和 Hello World 实例 中&#xff0c;我们提供了一个最简单的 Selenium 上手的例子。 但是某一天&#xff0c;突然发现相同的代码居然运行报错了。这是怎么回事呢&#xff1f; 日志排查 日志中其实提示的很明显了&#xff1a;Chrome浏览器和Chrome WebDriver的…

【PTA】L1-039 古风排版(C++)

题目链接&#xff1a;L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结…

B. Array Fix

思路&#xff1a;我们倒着看&#xff0c;首先判断以下当前元素有没有被操作过&#xff0c;被操作过的话&#xff0c;那么需要改为操作后的数&#xff0c;然后跟当前数的前一个数进行比较&#xff0c;如果a[i] < a[i - 1]的话&#xff0c;那么需要将a[i - 1]拆分&#xff0c;…