stm32学习笔记:IIC通信(未完)

概述

第一块:介绍协议规则,然后用软件模拟的形式来实现协议。

第二块:介绍STM32的iic外设,然后用硬件来实现协议。

程序一现象:通过软件I2C通信,对MPU6050芯片内部的寄存器进行读写,写入到配置寄存器,就可以对外挂的这个模型进行配置,读出数据寄存器,就可以获取外挂模块的数据。I2通信的目的

串口通信没有时钟线的异步全双工的协议。

如果我们想要读写寄存器来控制硬件电路,我们至少需要定义两个字节的数据。一个字节是我们要读写哪个寄存器,也就是指定寄存器的地址,另一个字节就是这个地址下存储器的内容,写入内容就是控制电路,读出内容就是获取电路状态。

要求

1、全双工变为半双工;
2、应答机制(安全起见)
3、一根通讯线能够同时外接多个模块(单片机可以指定和任意一个模块进行通信,同时单片机在跟某个模块进行通信时,其他模块不能对正常的通信产生干扰。)
4、串口是异步时序,也就是发送方和接收方约定的传输速率是非常严格的,时钟不能有过大的偏差,也不能在传输过程中,单片机有事进入中断了,异步时序是不能暂停的,单片机一个字节发一半数据暂停了,接收方是不知道的,它仍然会按照原来的约定速率读取,最终导致传输出错。(异步时序的缺点是依赖硬件外设的支持,必须要有USART电路才能方便使用,如果没有USART硬件电路的支持,那么串口是很难用软件来模拟的),需要将该协议改为同步协议,另外加一条时钟线来指导对方读写。由于存在时钟线,对传输的时间要求就不高了,单片机可以随时暂停传输,去处理其他事情,因为暂停传输的同时,时钟线也暂停了,所以传输双方都能定格在暂停的时刻,可以过一段时间再继续,不会对传输造成影响。(同步时序的好处),使用同步时序可极大降低单片机对硬件电路的依赖。即使没有硬件电路的支持也可以很方便地用软件手动翻转电平来实现通信,而异步时序的好处是省一根时钟线,节省资源,缺点是对时间要求严格,对硬件电路的依赖比较严重。

单片机读写自己的寄存器,可以直接通过内部的数据总线来实现,直接用指针操作就行,不需要我们操心。但是,现在这个模块的寄存器在单片机的外面,那怎么实现单片机读写外部模块寄存器的操作呢

项目要求

通过通信线,实现单片机读写外挂模块寄存器的功能,其中至少要实现在指定的位置读寄存器和在指定的位置写寄存器两个功能。实现读写寄存器也就实现了对外挂模块的完全控制。

同步时序稳定性比异步时序更高,然后只有一根SDA数据线,变全双工为半双工,一根线兼具发送和接收,最大化利用资源。一主多从:单片机作为主机,主导I2C总线的运行,挂在在I2C总线的所有外部模块都是从机,从机只有被主机点名之后才能控制IIC总线,不能在未经允许的情况下去碰I2C总线,防止冲突。

 I2C的硬件规定

1.左边CPU就是单片机,作为总线主机,功能包括对SCL线的完全控制,任何时候都是主机完全掌控SCL线。在空闲状态下,主机可以主动发起对SDA的控制。只有在从机发送数据和从机应答的时候,主机才会转交SDA的控制权给从机。

2.被控IC就是挂载在iic总线上的从机,可以是姿态传感器,OLED,存储器,时钟模块等。

3.从机权利比较小,对SCL时钟线,在任何时刻都只能被动读取,从机不允许控制SCL线,对于SDA数据线,从机不允许主动发起对SDA的控制,只有在主机发送读取从机的命令后,或者从机应答的时候,从机才能短暂的获取SDA的控制权。

4.接线要求所有从机SCL,SDA线都在一条线上与主机相连。

5.主机SCL可以配置成推挽输出,从机的SCL可以配置成浮空输入或者上拉输入,数据流向是主机发送,所有从机接收。

6. 主机SDA在发送的时候是输入,在接收的时候是输出,从机的SDA也在输入和输出之间切换。如果总线时序没协调好,就可能发生两个引脚同时处于输出状态。如果这时一个输出高电平,一个输出低电平,这个状态就是电源短路。需要避免。

7.为了避免这个问题,IIC禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻加开漏输出的电路结构。所以设备的SCL和SDA均要配置成开漏输出模式。并且添加上拉电阻。

 

I2C的软件规定

起始和终止条件

起始条件:SCL高电平期间,SDA从高电平切换到低电平

        即左下角,在IIC处于空闲状态时,SCL和SDA都处于高电平状态,也就是没有设备去碰SCL和SDA,SCL和SDA由外挂的上拉电阻拉高至高电平,总线处于平静的高电平状态,当主机需要进行数据收发时,需要产生起始条件,即SCL处于高电平,把SDA拉底,变成低电平,产生一个下降沿,当从机捕获到SCL高电平,SDA下降沿信号时,就会进行自身的复位,等待主机的召唤,在SDA下降沿之后,主机要把SCL拉底。原因是占用总线,且为了方便基本单元的拼接,即为了保证每个时序单元的SCL都是以低电平开始,低电平结束的,这样这些单元拼接起来,SCL才能续上。

终止条件:SCL高电平期间,SDA从低电平切换到高电平

         即SCL先拉高,SDA再拉高,产生一个上升沿,这个上升沿触发终止条件,同时终止条件之后,SCL和SDA都是高电平。回归到平静状态。类似串口的起始位和停止位。

         一个完整的数据帧总是以其实条件开始,终止条件结束,起始和终止都是由主机产生的。再总线空闲状态时,从机双手放开。不允许触碰总线。

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

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

相关文章

【Synchronized同步原理】

Synchronized同步原理 1. synchronized的使用?2. 如何保证线程安全的?3.可重入原理(加锁次数计数器)4. 原子性和可见性(顺序性) 1. synchronized的使用? 对象锁方法锁类锁 2. 如何保证线程安全的? publi…

关于数据提交上传服务端的数据类型以及项目打包上线的流程

1 请求头的类型: content-type; 01: application/json 数据以json格式请求:{"key":"value"} 02: application/x-www.form-urlencoded from表单的数据格式 name"zs"&age12 03 mutipart/form-data…

重学SpringBoot3-自动配置机制

重学SpringBoot3-自动配置机制 引言Spring Boot 自动配置原理示例:Spring Boot Web 自动配置深入理解总结相关阅读 引言 Spring Boot 的自动配置是其最强大的特性之一,它允许开发者通过最少的配置实现应用程序的快速开发和部署。这一切都得益于 Spring …

OmniPlan Pro mac版:简单、智能,项目管理新选择!

OmniPlan Pro是一款功能强大的项目管理软件,它以其直观的用户界面和丰富的功能,帮助用户轻松管理各种复杂的项目。无论是个人任务还是团队协作,OmniPlan Pro都能提供全面的解决方案,让项目管理变得更加简单高效。 OmniPlan Pro软…

从0开始回顾Mysql --- MySQL初体验

大白话从0开始回顾MySQL,去除了一些繁琐的操作的演示以及内容,如MySQL安装等,本篇文章适合复习MySQL语法,学习MySQL语句,对MySQL不太熟练的同学,希望对大家有一些帮助。 MySQL初体验 首先,我将…

如何在Window系统部署VisualSVN服务并结合cpolar实现无公网ip远程访问

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

数字孪生与智慧交通的融合发展:推动交通行业数字化转型,构建智慧城市新生态

随着信息技术的快速发展和城市化进程的深入推进,交通行业正面临着前所未有的机遇与挑战。传统的交通管理模式已难以满足日益增长的交通需求,而数字化转型则成为了推动交通行业创新发展的必由之路。数字孪生技术作为一种前沿的信息技术手段,为…

基于springboot+vue的公寓报修管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

每天的三哥牌小鸡腿没了

查看印度基金(164824)公告,从2024年2月28日起,暂停印度基金的申购,限额100块的一拖七套利告一段落。这意味着看好印度股市的国内投资者,以后只能通过在场内买入获得份额。 关于暂停申购的原因,官方说是为保护基金持有…

重磅!交通领域顶级会议TRB会议将进行重大改革

美国交通研究委员会年会(Transportation Research Board annual meeting,以下简称TRB会议)是由美国交通研究委员会举办的交通领域的国际顶级会议。该会议每年举办一次,在华盛顿特区召开。TRB会议是交通研究领域知名度最高的学术会议之一&…

安装 node 错误的配置环境变量之后使用 npm 报错

安装 node 错误的配置环境变量之后使用 npm 报错 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…

基于springboot实现企业员工绩效考评系统项目【项目源码+论文说明】

基于springboot实现企业员工绩效考评系统演示 摘要 时代的变化速度实在超出人类的所料,21世纪,计算机已经发展到各行各业,各个地区,它的载体媒介-计算机,大众称之为的电脑,是一种特高速的科学仪器&#xf…

AI-数学-高中-32-统计-样本空间与随机事件

原作者视频:【概率】【一数辞典】1样本空间与随机事件_哔哩哔哩_bilibili 1.随机试验: 2.样本点、样本空间、有限样本空间: 示例1 示例2 3.事件: 示例:

[DEBUG] spring boot-如何处理链接中的空格等特殊字符

问题&#xff1a; get或者post中提交的内容可能有空格、#等特殊字符&#xff0c;不做处理的话可能解析错误。 解决&#xff1a; html中&#xff1a; <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…

Qt CMake 国际化相关配置

文章目录 更新ts文件发布ts文件 本来用qmake使用pro文件很简单的一件事&#xff0c;结果用cmake折腾了半天。 何必呢~ 参考&#xff1a;QT6.3 CMake 多语言切换 这是我的 cmake_minimum_required(VERSION 3.16)project(testQml3_6 VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTO…

06.QT信号和槽-1

一、信号和槽概述 在Qt中&#xff0c;用户和控件的每次交互过程称为一个事件。比如"用户点击按钮"是一个事件&#xff0c;"用户关闭窗口"也是一个事件。每个事件都会发出一个信号&#xff0c;例如用户点击按钮会发出"按钮被点击"的信号&#xff…

Java练习(第5天)【总结】在字符串中寻找特定的字符(5种方法)

问题描述&#xff1a;在字符串中寻找特定字符 1、第1次出现位置 实现函数原型&#xff1a; int indexOf(char c) Java代码&#xff1a; import java.io.*; public class Way_1 {public static void main(String args[]){String str "Geeks for Geeks is a computer s…

疲劳驾驶监测报警摄像机

疲劳驾驶是导致交通事故的重要原因之一&#xff0c;为了提高驾驶安全性&#xff0c;科技日新月异&#xff0c;疲劳驾驶监测报警摄像机因其先进的技术而成为关注焦点。 疲劳驾驶监测报警摄像机采用先进的人脸识别技术和人工智能算法&#xff0c;能够实时监测驾驶员的状态。通过对…

文件操作和IO(2):Java中操作文件

目录 一、File的属性 二、File的构造方法 三、File的方法 四、代码示例 1、getName&#xff0c;getParent&#xff0c;getPath方法 2、getAbsolutePath&#xff0c;getCanonicalPath方法 3、exists&#xff0c;isDirectory&#xff0c;createNewFile方法 4、createNewF…

龙蜥 Anolis OS8.4 设置IP

1、配置文件路径 /etc/sysconfig/network-scripts/ [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]# ls ifcfg-ens32 进入配置文件路径后&#xff0c;展示。ifcfg-ens32这个不同的服务器不一样&#xff0c;本次虚拟机所对应的是ens3…