【江科大】STM32:I2C通信外设(硬件)

在将2C通信外设之前,我们先捋一捋,串口的相关特点来和I2C进行一个对北比。
首先:
1,大部分单片机,设计的PCB板均带有串口通信的引脚(也就是通信基本都借助硬件收发器来实现)
2.对于串口的异步时序,软件实现起来就异常麻烦。硬件实现非常简单。所以串口的实现基本就全倒向了硬件。
右边的图片中的串口时序就可以看出来软件模拟的复杂性
其次:II2C是同步时序,软件实现简单灵活,(在前面讲过的I2C时序,明显就简单的多)
硬件实现,相比之下,去并不能让人完全省心。
所以I2c的实现,软件模拟的情况是非常多的.
但是考虑到硬件I2C也有很多独有的优势,比如执行效率比较高,可以节省软件资源。
功能比较强大,可以实现完整的多主机通信模型,时序波形规整,通信速率快等等。
所以硬件I2C也有相应的应用场景。
现在我们就来学习一下关于I2C通信外设。也就是硬件实现I2C通信。

硬件资源:STM32内部的I2C外设

在这里插入图片描述
4.支持不同的通讯速度,标准速度(高达100kHz),快速(高达400kHz)
5.支持DMA(多字节传输,可以提高传输效率)
6.兼容SMBust协议(了解即可)
7.STM32F103C8T6硬件2C资源:I2C1、I2C2(硬件资源有限,软件就无限了)
硬件2C的引脚都是固定在对应的引脚上。(参考引脚定义表)
这里提一句,STM32参考手册中2C描述的多主机模型,如果对12C没学过基本是看不懂的。
只有先简单的学习过一主多从模型,再去看手册才比较容易理解。
STM32的硬件12C采用的就是多主机模型中的可变多主机,所以就必须按照该模型进行操作

当需要通信的时候,

1.第一步要将该从机先跳出来,变成主机。
2第二步指定要通信的从机
数据收发的核心部分:如下图红框中

发送的流程:

  1. 可以把一个字节写到数据寄存器DR
  2. 当移位寄存器没有数据移位时,会将数据寄存器中的数据移到移位寄存器中
  3. 在移位的过程中,我们就会把下一个数据写到数据寄存器中。
  4. 连续循环。
  5. 当数据寄存器的值移到移位寄存器中时,状态寄存器的TXE位为1,表示发送寄存器为空

接收的流程:

  1. 输入的数据一位一位的动引脚移位到移位寄存器里
  2. 当一个字节的数据收齐以后,数据就整体从移位寄存器转到数据寄存器·
  3. 同时置标志位RXNE,表示接收寄存器非空。
  4. 这个时候我们就可以把数据从数据寄存器读出来了

至于什么时候收,什么时候发?

我们就必须借助控制寄存器。起始,应答,停止,均是由控制电路完成。

I2C内部外设结构图

在这里插入图片描述

I2C基本结构

在这里插入图片描述

主机发送

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

主机接收

在这里插入图片描述

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

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

相关文章

后端系统缓存技术分析

缓存有很多种,如CPU 缓存、磁盘缓存、浏览器缓存等;本文主要针对后端系统的缓存,也就是将程序或系统经常要使用的对象存在内存中,以便在使用时可以快速调用,避免加载数据或者创建重复的实例,以达到减少系统…

韩国访问学者申请注意事项

随着国际交流的增加,韩国成为许多学者追求学术深造的热门目的地之一。如果你计划成为一名韩国访问学者,以下是知识人网小编整理的一些需要注意的事项,以确保你的申请顺利进行。 1.详细了解目标学府:在开始申请之前,仔细…

Python进阶——文件及IO操作

一、文件的基本操作 创建文件对象和打开文件对象:open() def my_write():#(1)打开(创建)文件fileopen(Myqq.txt,w,encodingutf-8) #如果文件不存在,则在当前目录下创建一个文件名字为Myqq.txt#(2)操作文件f…

redis整合

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 1、Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可以…

matlab绘图杂谈-stem函数和plot函数

出发点 今天在论文中看到一副这样的图,它既有曲线,又有点,并且对两者都添加了图例。三条曲线应该是用plot函数绘制的,而target哪个绿色的圆圈,我的理解是用stem函数绘制的。它只是1个点,并且没有竖线&…

Linux文件管理技术实践

shell shell的种类(了解) shell是用于和Linux内核进行交互的一个程序,他的功能和window系统下的cmd是一样的。而且shell的种类也有很多常见的有c shell、bash shell、Korn shell等等。而本文就是使用Linux最常见的bash shell对Linux常见指令展开探讨。 内置shell…

ElasticSearch搜索引擎入门到精通

ES 是基于 Lucene 的全文检索引擎,它会对数据进行分词后保存索引,擅长管理大量的数据,相对于 MySQL 来说不擅长经常更新数据及关联查询。这篇文章就是为了进一步了解一下它,到底是如何做到这么高效的查询的。 在学习其他数据库的时候我们知道索引是一个数据库系统极其重要…

【基础配置】Python2/Python3并存安装配置教程

Nx01 产品简介 Python是一种高级的、解释型的、面向对象的通用编程语言,具有简单易学、代码可读性强、功能强大、可移植性好等特点。它可以应用于多种领域,如Web开发、数据科学、人工智能、机器学习、科学计算、自动化测试等。Python由Guido van Rossum于…

如何使用phpStudy软件测试本地PHP及环境搭建

各位同学朋友们大家好!我是咕噜铁蛋!我们经常需要在本地进行PHP代码的开发和测试。而phpStudy作为一个集成了Apache、MySQL和PHP的软件套装,提供了方便快捷的环境搭建和测试工具。今天铁蛋为大家详细介绍如何使用phpStudy来测试本地PHP及环境…

gradle源

腾讯源 distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-xxx-bin.zip阿里云 https://developer.aliyun.com/mvn/guide maven { url http://maven.aliyun.com/nexus/content/groups/public/ }maven { url https://maven.aliyun.com/repository/google }mave…

【cuda】RuntimeError: Unexpected error from cudaGetDeviceCount()

解决 会发现 nvidia-smi 不管用了。不要立即重启,会黑屏的。赶紧记录使用的驱动版本号,最好找到安装包位置。 直接重装原版驱动,环境还能用。 参考我的安装博客。 已经黑屏就进入安全模式,network模式。卸载可视化桌面和显卡驱动…

雨云服务器部署幻兽帕鲁PalWorld联机服务器详细教程

幻兽帕鲁是Pocketpair开发的一款开放世界生存制作游戏,游戏中,玩家可以在广阔的世界中收集神奇的生物“帕鲁”,派他们进行战斗、建造、做农活,工业生产等。 最近,这款游戏挺火,为了获得更好的游戏体验&…

SpringBoot中Redis解决LocalDateTime序列化与反序列化不一致问题

前言 在SpringBoot应用中,数据的序列化和反序列化是关键环节。然而,对于LocalDateTime类型的数据,有时会遇到序列化与反序列化不一致的问题。这主要是由于不同的时区或格式差异所导致。为了解决这一问题,我们可以借助Redis的强大功…

手搓 国内首个非Attention大模型,训练效率7倍于Transformer

手搓 国内首个非Attention大模型,训练效率7倍于Transformer 非Attention大模型代码解析非Attention大模型代码 import torchclass FeedForward(torch.nn.Module):def __init__(self, hidden_dim):super

爬虫工作量由小到大的思维转变---<第四十章 Scrapy Redis 实现IP代理池管理的最佳实践>

前言: 本篇是要结合上篇一起看的姊妹篇:爬虫工作量由小到大的思维转变---<第三十九章 Scrapy-redis 常用的那个RetryMiddleware>-CSDN博客 IP代理池的管理对于确保爬虫的稳定性和数据抓取的匿名性至关重要。围绕Scrapy-Redis框架和一个具体的IP代理池中…

Vue构建项目断点调试过程问题总结

Vue构建项目断点调试过程问题总结 问题背景 前端开发过程中,碰到问题时需要debug,快速分析和解决问题。一般除了console.log的方式打印日志外,更方便直观的方式就是打断点debug。本文对vue项目debug过程可能碰到的问题进行总结,…

“数据同步大揭秘:Canal工具如何让实时处理变得轻而易举?“

介绍:Canal是一个基于MySQL数据库增量日志解析的开源数据同步工具。 Canal的主要功能是提供增量数据订阅和消费,它通过解析MySQL数据库的增量日志来捕获数据变更事件,并将这些事件转换成数据变更流,供用户订阅和消费。这样&#x…

魔法少女LJJ 题解

推荐在 cnblogs 上阅读 魔法少女LJJ 题解 这题纯属就是迷惑题。。 为什么这么说? 注意数据范围: 对 100% 的数据 0 ≤ m ≤ 400000 0\leq m\leq400000 0≤m≤400000, c ≤ 7 c\leq 7 c≤7。 c ≤ 7 c\leq 7 c≤7!&#xff01…

Deepin基本环境查看(四)【硬盘/分区、文件系统、硬连接/软连接】

Linux操作系统(Deepin、Ubuntu)操作系统中,硬盘分区的管理与Windows操作系统不同; 在Linux系统中维护着一个统一的文件目录体系,而硬盘和分区是以资源的形式由操作系统挂接和调度;此外Linux系统中连接(硬连…

R语言【taxlist】——get_children(),get_parents():检索分类概念的子类群或父类群

Package taxlist version 0.2.4 Description 检索所查询分类单元概念的所有子概念或父概念。 Usage get_children(taxlist, ...)## S3 method for class taxlist get_children(taxlist, ConceptID, ...)get_parents(taxlist, ...)## S3 method for class taxlist get_parents…