STM32利用软件I2C通讯读MPU6050的ID号

今天的读ID号是建立在上篇文章中有了底层的I2C通讯的6个基本时序来编写的。首先需要完成的就是MPU6050的初始化函数

   然后就是编写 指定地址写函数:
        一:开始
        二:发送 从机地址+读写位(1:读  0:写)
        三:接收应答位
        四:发送 指定寄存器地址(用于指定读写哪个寄存器)
        五:接收应答位
        六:发送(要写入指定寄存器下的数据)
        七:接收应答位
        八:终止

这个过程不是自己瞎编的,而是要根据MPU6050的时序图来确定的:

接下来要写的函数是指定地址读的函数:
        一:开始
        二:发送 从机地址+读写位
        三:接收应答位
        四:发送 指定寄存器地址(用于指定读哪个寄存器)
        五:接收应答位

        六:开始
        七:发送 从机地址+读写位1(1:读  0:写)
        八:接收应答位
        九:接收一个字节(此时,总线控制权交给从机)
        十:发送应答位(0:就是给从机应答(从机继续发数据)   1:就是不给从机应答(从机停止发数据))
      十一:终止

好了,到此读写MPU6050的基本操作就都完成了,剩下的事就是往不同的寄存器内写入不同的数据,实现不同的功能了,这个明天在学习吧,今天的代码贴出来看看吧:

#include "stm32f10x.h"                  // Device header
#include "MPU6050.h"
#include "MyI2C.h"#define   MPU6050_ADDRESS             0xD0 /*指定地址写函数:一:开始二:发送 从机地址+读写位(1:读  0:写)三:接收应答位四:发送 指定寄存器地址(用于指定读写哪个寄存器)五:接收应答位六:发送(要写入指定寄存器下的数据)七:接收应答位八:终止
*/
void MPU6050_WriteReg(uint8_t Address, uint8_t Data)
{MyI2C_Star();MyI2C_SendByte(MPU6050_ADDRESS);MyI2C_ReceiveAck();MyI2C_SendByte(Address);MyI2C_ReceiveAck();MyI2C_SendByte(Data);   //如果想实现指定地址写多个数据,可以在此处加循环,循环数据个数次MyI2C_ReceiveAck();     //每次循环都要加接收应答位MyI2C_Stop();
}/*指定地址读的函数:一:开始二:发送 从机地址+读写位三:接收应答位四:发送 指定寄存器地址(用于指定读哪个寄存器)五:接收应答位六:开始七:发送 从机地址+读写位1(1:读  0:写)八:接收应答位九:接收一个字节(此时,总线控制权交给从机)十:发送应答位(0:就是给从机应答(从机继续发数据)   1:就是不给从机应答(从机停止发数据))十一:终止*/
uint8_t MPU6050_ReadReg(uint8_t Address)
{uint8_t Data;MyI2C_Star();MyI2C_SendByte(MPU6050_ADDRESS);MyI2C_ReceiveAck();MyI2C_SendByte(Address);MyI2C_ReceiveAck();MyI2C_Star();MyI2C_SendByte(MPU6050_ADDRESS | 0x01);MyI2C_ReceiveAck();Data = MyI2C_ReceiveByte();MyI2C_SendAck(1);MyI2C_Stop();return Data;
}void MPU6050_Init(void)
{MyI2C_Init();
}

写了一个MPU6050.h文件,方便测试一下今天的功能:

#ifndef __MPU6050_H
#define __MPU6050_Hvoid MPU6050_Init(void);uint8_t MPU6050_ReadReg(uint8_t Address);void MPU6050_WriteReg(uint8_t Address, uint8_t Data);#endif

然后就是主函数调用一下,验证结果了:

#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "MPU6050.h"
#include "MPU6050_Reg.h"int main(void)
{OLED_Init();       //oled  屏幕初始化MPU6050_Init();uint8_t ID = MPU6050_ReadReg(MPU6050_WHO_AM_I);OLED_ShowHexNum(1,1, ID, 2);while(1){}
}

编译下载后的结果如图:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

005Node.js模块URL的使用

引入 URL 模块 要使用 URL 模块,首先需要在代码中引入它。可以使用以下代码将 URL 模块导入到你的脚本中: const url require(url);实例代码 const urlrequire(url); var apihttp://www.baidu.com?nameshixiaobin&age20; console.log(url.parse(…

单链表经典算法题分析

目录 一、链表的中间节点 1.1 题目 1.2 题解 1.3 收获 二、移除链表元素 2.1 题目 2.2 题解 2.3 收获 2.4递归详解 三、反转链表 3.1 题目 3.2 题解 3.3 解释 四、合并两个有序列表 4.1 题目 4.2 题解 4.3 递归详解 声明:本文所有题目均摘自leetco…

策略模式(知识点)——设计模式学习笔记

文章目录 0 概念1 使用场景2 优缺点2.1 优点2.2 缺点 3 实现方式4 和其他模式的区别5 具体例子实现5.1 实现代码 0 概念 定义:定义一个算法族,并分别封装起来。策略让算法的变化独立于它的客户(这样就可在不修改上下文代码或其他策略的情况下…

读所罗门的密码笔记19_治理模式

1. 解决方案 1.1. 全球人工智能的环境错综复杂,它严重依赖于价值观,且关系重大 1.2. 即使是与大家同仇敌忾的问题做斗争,也往往无法在国际社会中取得最佳效果 1.3. OPCW(禁止化学武器组织)已经帮助限制了化学武器的…

(UDP)其他信息: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

“System.Net.Sockets.SocketException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理其他信息: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。这个异常表示端口已经被占用了,需要释放端口或者使用其他端口来建立连接。您可以…

如何访问远程服务器?

在现代技术时代,随着信息化的快速发展,远程访问服务器已经成为了不可或缺的一种需求。无论是企业还是个人用户,都需要通过远程访问来管理、传输和获取数据。本文将介绍一种名为【天联】的工具,它能够通过私有通道进行远程服务器访…

python练习杂糅⑥——核心语法与基本库的应用

根据完整的路径从路径中分离文件路径、文件名及扩展名 代码呈现: import osdef separate_path(full_path):file_path, filename os.path.split(full_path)basename, extension os.path.splitext(filename)return file_path, basename, extensionfull_path "…

Linux 硬链接和软链接怎么区分使用?

一、什么是硬链接和软链接 硬链接 在Linux操作系统中,硬链接相当于存储在硬盘驱动器中的文件,它实际上引用或指向硬盘驱动器上的某个点。硬链接是原始文件的镜像副本。 硬链接与软链接的区别在于,删除原始文件不会影响硬链接,但…

基于SpringBoot实现的在线拍卖系统

系统开发环境 编程语言:Java数据库:MySQL容器:Tomcat工具:IDEA/Ecilpse、Navicat、Maven 系统实现 管理员功能模块 首页 修改密码 用户管理 商品类型管理 拍卖商品 竞拍公告 轮播图 历史竞拍管理 竞拍订单管理 留言板管理 用户…

主干网络篇 | YOLOv8更换主干网络之VanillaNet | 华为方舟实验室提出全新轻量级骨干架构

前言:Hello大家好,我是小哥谈。华为方舟实验室所提出的VanillaNet架构克服了固有复杂性的挑战,使其成为资源受限环境的理想选择。其易于理解和高度简化的架构为高效部署开辟了新的可能性。广泛的实验表明,VanillaNet提供的性能与著名的深度神经网络和vision transformers相…

【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化

CRM系统 CRM(Customer Relationship Management,客户关系管理)系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中,CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。 搭建…

【排序 贪心】3107. 使数组中位数等于 K 的最少操作数

算法可以发掘本质,如: 一,若干师傅和徒弟互有好感,有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二,有无限多1X2和2X1的骨牌,某个棋盘若干格子坏了,如何在没有坏…