stm32学习笔记:I2C通信外设原理(未完)

 软件实现和硬件实现

串口通信为异步时序,用软件实现很麻烦,基本上用硬件实现
而I2C协议通信为同步时序,软件实现简单且灵活,硬件实现比较麻烦,故软件比较常用
但I2C硬件实现功能比较大,执行效率高,节省软件资源,可以实现完整的多主机通信模型,时序波形归整,通信速率快
故I2C软件实现用于简单环境,若性能要求高,则硬件实现

 

I2C外设简介  

1.(软件只需要写入控制寄存器CR和数据寄存器DR,就可以实现协议,为了实现实时监控时序的状态,软件要读取状态寄存器SR

2.支持多主机模型(固定多主机和可变多主机(stm32,谁要做主机,主机就得跳出来)) 

3.本实验依旧是7位、一个主机(一主多从)

 4.STM32F103C8T6 硬件 I2C 资源: I2C1 、 I2C2(两个独立I2C,硬件只有俩路I2C总线,而软件I2C只要代码存的下,想开几路就开几路) 

I2C的功能图

(1)数据控制部分

1 数据收发的核心部分:数据寄存器和数据移位寄存器 
2 发送数据时,将数据放在数据寄存器,当没有移位时候,数据从数据寄存器转运到移位寄存器,同时,下一个数据送到数据寄存器,然后移位寄存器将数据给SDA,数据寄存器中的数据给移位寄存器,如此往复
3 当数据寄存器转到移位寄存器时,就会置状态寄存器的TXE位为1,表示发送寄存器为空

接收数据

  •  接收数据时,从SDA转到移位寄存器,再转到数据寄存器,同时置标志位RXNE,表示接受寄存器非空,这时候可以把数据从数据寄存器读出来
  • 比较器和地址寄存器时从机模式使用(即再stm32不进行通信的时候,这个stm32支持同时响应两个从机地址
SCL部分 

时钟控制:控制SCL线
时钟控制寄存器(CCR):写对应的位,电路就会执行对应的功能
控制逻辑电路:写入控制寄存器(CR1/CR2),就可以对整个电路进行控制
读取状态寄存器,可以得知电路的工作状态
中断:当内部有一些标志位置1后,可能事件比较紧急,就可以申请中断
如果开启中断,当事件发生后,程序可以跳转到中断函数处理事件

I2C基本结构 

发送数据(从数据控制器到SDA):因为I2C是高位先行,所以移位寄存器是向左移位,在发送和的时候,最高位先移出去,然后是次高位,一次SCL时钟移位一次,移动8次,就把一个字节由高位到低位,一次放到SDA线上
接收数据:数据从SDA经GPIO口,从右边一次移进来,最终移动8次,一个字节就接收完成
使用硬件I2C:两个GPIO口,都要配置成复用开漏输出模式
复用就是GPIO的状态由片上外设来控制
开漏输出:时I2C协议要求的端口配置(GPIO口依旧可以输入)

 主机发送

7位主发送的过程

TxE=1表示数据寄存器空,BTF字节发送结束标志位
SB=1,表示起始条件已经发送
(1)初始化之后:总线默认空闲状态,stm32默认是从模式
(2)stm32需要写入控制寄存器产生起始条件:
控制寄存器CR1中,有个START位,写1,可以产生起始条件,起始条件发生后,这一位由硬件清除,不需要手动侵清除
之后stm32从从模式转换成主模式
(3)检查标志位
EV5事件:SB(start bit)=1,表示起始条件已经发送
(4)发送从机地址:需要写到数据寄存器DR中,写入后,硬件自动把这个字节转到移位寄存器中,再把这个字节发送到IIC总线上
之后硬件会自动接收应答并判断,若没有应答,硬件会置应答失败的标志位,标志位可以申请中断来提醒我们
(5)寻址完成之后,会发生EV6事件,ADDR=1,代表在主模式下发送结束
(6)EV8_1事件:TxE=1,移位寄存器和数据寄存器为空,写入数据寄存器DR进行数据发送,一旦写入DR,因为
移位寄存器也是空的,所以DR会立刻转到移位寄存器进行发送
(7)EV8事件:TxE=1,移位寄存器非空,数据寄存器空,这移位寄存器正在发数据的状态,故数据1的时序产生
一旦检测到EV8事件,就可以写入下一个数据
(8)EV8_2事件:写完后,没有数据可以写了

 主机接收

这里是当前地址读的模式

(1)首先写入start位,产生起始条件,等EV5事件,EV5事件代表起始条件已经发送,

(2)之后是寻址,接收应答,结束后产生EV6事件,代表寻址已经完成

(3)数据1这块,代表数据正在通过移位寄存器进行输入,EV6-1事件,从上图可以看出,数据正在移位,还没收到,所以事件没有标志位,当这个时序单元完成时,硬件会自动根据我们的配置,把应答位发送出去(ACK应答使能,写1,在接收到一个字节后就返回一个应答,写0不给应答),当时序单元完成后,表示移位寄存器已经成功移入一个字节的数据1,这时,移入的一个字节就整体转移到数据寄存器中,同时置RxNE标志位,表示数据寄存器非空,也就是收到一个字节的数据,这个状态就是EV7事件、

(4)当把数据读走后,EV7事件就没有了

(5)EV7_1:结束

(6)由于设置了ACK=0,所以会给出非应答,最后由于设置STOP位,所以产生终止条件

 软件和硬件之间的比较

 (1)硬件IIC的波形比较规整,软件IIC由于添加了延时,时钟周期、占空比可能不规整

SCL低电平写,高电平读(默认下降沿写,上升沿读,硬件IIC数据写入,都是紧贴着下降沿,SCL下降沿,SDA立马切换数据)

(2)在硬件中,应答结束后,从机立刻释放SDA,同时主机立刻拉低SDA,故出现尖锋

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

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

相关文章

【数据分享】1984~2020年中国长时间序列逐年人造夜间灯光数据集

各位同学们好,今天和大伙儿分享的是1984~2020年中国长时间序列逐年人造夜间灯光数据集。如果大家有下载处理数据等方面的问题,您可以私信或评论。 张立贤, 任浙豪, 陈斌, 宫鹏, 付昊桓, 徐冰. (2021). 中国长时间序列逐年人造夜间灯光数据集(…

大数据开发-Hadoop分布式集群搭建

大数据开发-Hadoop分布式集群搭建 文章目录 大数据开发-Hadoop分布式集群搭建环境准备Hadoop配置启动Hadoop集群Hadoop客户端节点Hadoop客户端节点 环境准备 JDK1.8Hadoop3.X三台服务器 主节点需要启动namenode、secondary namenode、resource manager三个进程 从节点需要启动…

42岁前TVB女星近况曝光,曾因山头靠不住被雪藏兼生意失败

自从2021年前TVB高层余咏珊倒台离巢后,大批「余派」被雪藏,随即跟着走人,今年42岁的「元老级是非精」梁嘉琪就是其中之一。 梁嘉琪在离巢后就重新签约有线做回老本行主持节目,去年3月又与森美、小仪主持商台903节目《早霸王》&…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(二)

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(前导) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(三) 五、实验目的 本次实验使用电脑上的…

动态规划(算法竞赛、蓝桥杯)--背包DP求具体方案

1、B站视频链接&#xff1a;E20 背包DP 求具体方案_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N1010; int v[N],w[N]; int f[N][N],p[N][N];int main(){int n,m;cin>>n>>m;for(int i1;i<n;i)cin>>v[i]>>w[i…

mybatis的xml文件如何配置能被识别

为了让MyBatis能够识别和使用XML Mapper文件&#xff0c;你需要确保这些文件被正确放置和配置。下面是确保MyBatis XML Mapper文件被识别的步骤&#xff1a; 1. 正确放置XML Mapper文件 通常&#xff0c;XML Mapper文件应该放在src/main/resources目录下。为了更好的组织这些…

基于SSM的农业信息管理系统的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的农业信息管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…

字节跳动热门的前端开源项目

字节跳动开源官网 Arco Dsign Arco Design 是一套设计系统&#xff0c;主要服务于字节跳动旗下中后台产品的体验设计和技术实现。它的目标在于帮助设计师与开发者解放双手、提升工作效率&#xff0c;并高质量地打造符合业务规范的中后台应用。它拥有系统的设计规范和资源&…

运维知识点-hibernate引擎-HQL

HQL有两个主要含义&#xff0c;分别是&#xff1a; HQL&#xff08;Hibernate Query Language&#xff09;是Hibernate查询语言的缩写&#xff0c;它是一种面向对象的查询语言&#xff0c;类似于SQL&#xff0c;但不是去对表和列进行操作&#xff0c;而是面向对象和它们的属性…

ArmSoM Rockchip系列产品 通用教程 之 UART 使用

1. UART 简介​ Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串口标准&#xff0c;完整模块支持以下功能&#xff1a; 支持5、6、7、8 bits数据位。支持1、1.5、2 bits停止位。支持奇校验和偶校验&#xff0c;不支持mark校验和space校验。支持接…

Yolov8有效涨点,添加多种注意力机制,修改损失函数提高目标检测准确率

目录 简介 CBAM注意力机制原理及代码实现 原理 代码实现 GAM注意力机制 原理 代码实现 修改损失函数 YAML文件 完整代码 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; http://t.csdnimg.c…

Mol2文件处理-拆分、合并、提取名称、计数与格式转换

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、Mol2文件合并二、Mol2文件拆分为含有单个分子的文件三、Mol2文件分子名称修改与提取3.1 分子名称修改去除空格3.2 文件名称提取 四、Mol2文件包含分子计数4.1 Mol2文件中分子计数4.2 分子计数传…

Python——与Matlab对应的Python版本

参考资料&#xff1a; Python——与Matlab对应的Python版本

Rust 开发的高性能 Python 包管理工具,可替换 pip、pip-tools 和 virtualenv

最近&#xff0c;我在 Python 潮流周刊 中分享了一个超级火爆的项目&#xff0c;这还不到一个月&#xff0c;它在 Github 上已经拿下了 8K star 的亮眼成绩&#xff0c;可见其受欢迎程度极高&#xff01;国内还未见有更多消息&#xff0c;我趁着周末把一篇官方博客翻译出来了&a…

请说明Vue中的解耦能力

Vue中的解耦能力是指在Vue框架中&#xff0c;我们能够有效地将代码分离成独立的组件或模块&#xff0c;使得这些组件之间的依赖关系减少&#xff0c;实现高内聚、低耦合的设计目标。利用Vue中的组件化开发&#xff0c;可以让不同的模块之间更容易地通信和协作&#xff0c;提高代…

【小白学机器学习7】相关系数R,决定系数R2和SST=SSR+SSE, 离差,偏差,方差,标准差,编译系数,标志误。

目录 1 各种数据指标&#xff0c;分类整理 1.0 关于数据/值有3种 1.1 第1类&#xff1a;描述一堆数据特征的指标&#xff1a;集中度&#xff0c;离散度&#xff0c;形状特征 1.2 第2类&#xff1a;判断预测y值和观测值差距的指标 1.3 第3类&#xff1a;描述误差的各种指标…

无线地勘答题模板

(三)无线网络配置 CII集团公司拟投入13万元(网络设备采购部分),项目要求重点覆盖楼层、走廊和办公室。平面布局如图1所示。 图1 平面布局图 1.绘制AP点位图(包括:AP型号、编号、信道等信息,其中信道采用2.4G的1、6、11三个信道进行规划)。 2.使用无线地勘软件,输出…

html标签之表格标签,程序员必看

突破困境&#xff1a; 1. 提升学历 前端找工作&#xff0c;学历重要吗&#xff1f; 重要。谁要是告诉你不重要那一定是在骗你。现实情况是大专吃紧&#xff0c;本科够用&#xff0c;硕士占优&#xff0c;大专以下找到工作靠运气和 戳这里领取完整开源项目&#xff1a;【一线大…

【力扣经典面试题】14. 最长公共前缀

目录 一、题目描述 二、解题思路 三、解题步骤 四、代码实现&#xff08;C版详细注释&#xff09; 五、总结 欢迎点赞关注哦&#xff01;创作不易&#xff0c;你的支持是我的不竭动力&#xff0c;更多精彩等你哦。 一、题目描述 编写一个函数来查找字符串数组中的最长公共前缀。…

微软研究深度报告:Sora文转视频AI模型全景剖析及未来展望

论文由微软研究团队撰写&#xff0c;这篇论文深入探讨了Sora的发展背景、核心技术、新兴应用场景、现有的局限性以及未来的发展机会&#xff0c;基于公开资料和团队自行进行的逆向工程分析。文中详尽且逻辑清晰&#xff0c;建议细读全文以获得深入了解。 原文&#xff1a;Sora…