当前课程知识点:ARM微控制器与嵌入式系统 >  第五章 ARM微控制器的各种外设 >  5.7.2 ARM微控制器外设:I2C的通讯协议 >  5.7.2 ARM微控制器外设:I2C的通讯协议

返回《ARM微控制器与嵌入式系统》慕课在线视频课程列表

5.7.2 ARM微控制器外设:I2C的通讯协议在线视频

5.7.2 ARM微控制器外设:I2C的通讯协议

下一节:5.7.3 ARM微控制器外设:I2C寄存器与编程

返回《ARM微控制器与嵌入式系统》慕课在线视频列表

5.7.2 ARM微控制器外设:I2C的通讯协议课程教案、知识点、字幕

各位同学大家好

我是清华大学工程物理系的曾鸣老师

我们来继续我们的

ARM微控制器与嵌入式系统MOOC之旅

那么在这个单元里呢

我们继续学习I2C

这样一类同步串行通讯

那么在上一个单元的学习里

我们知道了I2C的一些比较显著的特点

大家一定要深入理解和记住的

是I2C的那个引脚的

电气的一些特殊性

它是一个开漏或者是开集电极的

一个输出引脚

形象的比喻就是主设备 从设备

很多设备或者叫很多人

用手拉着一根共用的数据线

大家都不使劲的时候

它就是高电平

任何一个往下拽就可以把它拽成低电平

这样一种彼此之间逻辑上线与的关系

如果对这件事情理解

对于我们后面学习这些电平的关系

和通讯协议有非常大的帮助

那么我们在上个单元的最后呢

讲到了I2C的电平标准里头的几个关键点

一个呢它是时钟信号01跳变的时候

总是时钟信号的电平有效

其次呢

要求数据线上的数据总是在时钟信号

为高电平的时候保持不变

每当时钟信号为低电平的时候

可以发生改变

同时定义了两个特殊的信号

跟我们那个UART的数据帧的

开始和结尾很像

我们的信号仍然是一种不归0的码 对吧

数据信号平时是逻辑1

因为大家都没有往下拽

当时钟为高电平也就是正常情况下

不会发生变化的时候

这个数据线发生了一次由高向低的变化

我们称为Start bit起始位 记为S

那么当时钟信号为高电平的时候

发生了一次数据线

由低向高的跳变的时候

我们称为停止位 也就是P

那么我们接下来将会详细的学习

这个I2C的数据帧的结构

或者叫通讯协议的结构

那么为什么我有时候

会说它是通讯协议呢

大家先定性的看一看这样一种时序图

就会发现它里头成分单元比较多

跟我们在UART里头

学习的那个简单的起始位 停止位

中间是个数据加上奇偶校验位

那种简单的数据帧已经不是完全一样的了

这也是我们学习I2C当中一个新的难点

如果大家跟着我在这个单元里

一点一点的把这样一种数据帧

这样一种通讯协议理解清楚

其实就奠定了大家日后自己学习USB通讯

或者以太网通讯的一些基础

那么在这样一张时序图开始讲之前

我想我们一个一个概念的梳理

首先第一个概念就是上节课最后提到的

我们的I2C通讯是一个Bus

一个总线性的通讯

所以它会有一个主设备和多个从设备

所以在一个I2C通讯里

势必我们只有两根

一根数据线 一根时钟线

只有两根线的情况下

我们如何在通讯中

对设备或者对于每一笔通讯的

彼此双方加以区分呢

那就一定会有地址的概念

我们在做编程的时候

会用指针会访问内存

那个时候会有独立的地址线数据线

在这样一种串行通讯的协议里头

我们也会有地址的概念

我们待会讲地址怎么实现

先说地址的编址

那么在I2C的Bus这样一种总线通讯里头

主机的地址无所谓

但是从机会用七个比特来标识它们的地址

所以连在一个I2CBus里头

每一个从设备都应该有一个

在这个总线里

独一唯一的七比特的地址

所以这样一个七比特的地址

就标识了每一个设备的

我们认为是它的编号也好

是它的名称也好

所以帮助我们在后面的每笔通讯里

确认主机是在跟谁说话

这就像电话号码一样非常好理解

那么有了这个七比特的地址的概念

我们再来看看我们的协议上

如何实现从主机到每个从设备

能够彼此区分

彼此不干扰的通讯

那么构成了刚才看到的这张图

这样一张时序关系

那么在这张时序关系的

这个数据帧的结构图里头

大家先注意有两种不同的颜色

灰色都代表由主机向从机发送的数据

也就是在我们SDA的data数据线上

它的方向是由主机驱动从机读取输入

那么如果是白色的部分呢

就意味着在这根data线上同一根线

数据的方向变成了

由正在通讯的

那个从设备驱动而主机读取

也就是说在一根线上会切换谁来管它

那么结合我们前面讲到的

这个开漏或者开集电极的

这样一种电气特性 大家会理解

是一根上拉电阻

拉在那根线

在灰色的部分

由主机来拽它产生

松手就是1

拽下来就是0来产生数据

而到了白色的部分的时候

打个形象的比喻

就意味着主机一直是撒手的

而由对应被选中的这个从设备来拽它

拽下来是0

撒手是1产生数据

所以实际上这样一种灰白灰白切换的过程

是主机和从设备

在分别拥有主动权来拉动这根数据线

获得数据线上0或者1的改变

而接收的那一方去读取它的值

这个形象的概念

大家如果首先建立

对于后面的理解会简单很多

其次就是对于我们这样一个

数据帧结构图里头

这些助记符这些字母它们的含义

我们一个一个加以解释

最前面的S和最后面的P

就是我们刚才讲到的起始位和停止位

因为我们后面的所有的数据切换

都必须在时钟信号

为低电平的时候发生变化

而在时钟信号为高电平的时候保持不变

这是一个约定成俗

只有开始位和停止位刚才讲过

是时钟信号为高电平的时候

数据位发生一次由高往低的变化

或者由低往高的变化

分别代表数据帧的开始和结尾

那么在开始位和停止位

中间的这些数据段都有明确的定义

首先是这个SA

SA占七个比特就是我们的刚才讲到的

从设备的地址

所以每一次通讯的发起

都是在时钟信号

被主机驱动跳变的过程当中

主机在时钟信号为高电平的时候

发起一次数据引脚

由高向低的跳变拉一下

告诉所有的从设备一次通讯开始了

接着由主机注意这个部分是灰色

依次拉动或者松开这个数据线

随着时钟信号的同步

产生七个比特的地址位

那么这七个比特的地址位

就是由主机决定

我要跟哪个从设备进行通讯

这是由主机来决定的

那么这个SA这个段之后

有一个比特宽大家看这个时序图

上和下分别是由主机向从机

进行写操作的通讯帧格式

下面是由主机从从机

进行读取的数据帧格式

大家发现这两个数据帧

在第三个单元变得不一样

第三个单元分别是W或者R

那么W代表写入

也就是写方向标志位

它的标志

它的逻辑是0

是逻辑低电平

那么R呢是读取的标志位

代表读取的方向从

将要做的通讯由设备给主机发数据

也就是主机从设备读取

那么R的逻辑是逻辑1

所以一次通讯发起的时候

是主机发起始位

发要通讯对象的那个设备最后跟一个比特

如果这个比特是1

就是R

就表示接下来是我主机

要从你从机读取设备

所以任何一次通讯

大家注意这个主从协议

都是由主机发起的

主机决定跟谁说话

主机决定是给你数据

还是要你回给我数据 对不对

那么我们会发现七个比特的地址位

加上读或者写的这一个比特的

方向标志位

正好构成了一个字节 八个比特

也就是我们红框里的内容

那接下来从机该做什么呢

那么作为一个完整的通讯协议

不再像UART是单向的了

它是一个双向的

那么这个时候会有白色

大家注意是由从机回应主机 对不对

我们会有一个A

这个A表示应答位

那么如果这一位

由从机发起的通讯反馈了一个逻辑0

就代表从机说OK

正确收到 正确响应

我们称为ACK

如果这一位是逻辑1

就表示从机不回应这次发起的请求

我没有就绪

没有这个设备

或者说这个地址不对跟我不一样

那么大家想想为什么ACK是逻辑0

NACK是逻辑1

想一想其实这里头是有道理的

它的道理就是我们刚才讲电气标准当中

大家之间逻辑的那个线与关系 对不对

我们这样一根线大家想到的

不是一个点对点通讯

它是总线通讯

一个主机下面可能有若干个从设备

当然在我们的实验里

其实只接了一个设备

但是你必须从总线的角度

考虑它可能有多个

那么主机说话说我要给编号

比如说编号0005的设备通讯

我要做写操作

那么大家想想每个从设备

其实通过总线都收到了这么一个信息

那么如果一个设备

确认自己是0005号设备

并且可以被写入数据

它是不是要做出响应

那么它的响应ACK是逻辑0

逻辑0就意味着

它需要在这个时候控制总线

那么这个时候大家想一想

电平上的操作是什么

因为这个是难点

大家跟着我的思路走

那么如果大家想想在这个时候

主机发完了通讯开始

发完的地址 发完了写操作的比特

主机就应该撒手

不再控制数据线

但是主机其实仍然在驱动时钟线对吧

数据线主机撒手了

这个时候主机等着从机

来接管这个数据线给它回馈

这个时候在这个总线里正常情况下

我说了一个地址

这个地址对于每个从设备

每个从设备有且只有一个地址

所以最多只会有一个设备

发现自己的地址

与主机所呼叫的地址是相符的

说五号设备应该只有一个设备说我是5号

那么这个设备它的响应

是给出了ACK逻辑0

它把数据线向下拉一下

给出一个比特宽的逻辑0在总线上

表示我收到了

那么这个时候因为所有设备的数据线

都是接在一根线上的

只有一个设备往下拉

主机就表示知道这里头

肯定有一个设备就是5号

它存在 它收到了

那么这个背后的逻辑是别的设备

因为它不是5号

它仍然是高阻

它并没有拽动这根线

所以它没有干扰这次通讯这是第一

第二呢

如果在这根总线上

并不存在一个5号设备

也就是没有任何一个设备

把这个数据线往下拉一下产生0

那对于主机是不是就刚好收到了

一个逻辑1是NACK啊

所以我们的NACK

就是总线的默认状态逻辑1

然后有设备做出回应往下拉的时候

我们主机就知道这个设备存在

通讯可以接着往下走

是不是这么一个逻辑

所以灰色往白色切换的过程

是意味着主机并没有放弃

对于时钟线的控制

仍然一个节拍一个节拍的走

但是放开了对数据线的控制

交由数据线

一个比特的时钟周期

这个比特由设备产生响应

如果至少有一个设备产生了响应

就表示此次通讯有人响应

我接着往下走

那么后面的部分大家会发现

在这两个数据帧里灰白就是相反的

我们先从简单的看

主机向从机写入数据的时候

既然从机响应了

是不是接下来主机

就应该由D一个8比特或者一个字节的数据

就写给从设备了

那么一个字节写完了

同样主机对于数据线再撒手

时钟线主机仍然控制着

松开一个比特的时间

那么从机应该适时的拉动一下这个ACK

表示这个字节成功收到

那么周而复始

我们的主机可以一个字节一个字节的

给从机发入多个这个字节的数据

完成这样一个连续的

对一个单一设备的写操作

那么在这样一种通讯里头

它的反面我们主机也可以对从设备

给出一个从设备地址

然后开始一个字节一个字节的读

那么在读取当中的时候

通讯的数据部分的驱动能力

就交由设备了

也就是设备开始八个比特发数据

由主机拉一下表示ACK你发的数据我收到了

所以通讯的截止两种情况下都有可能

一种是主机主动发起了一个P信号

也就是stop

主机宣布这个通讯结束了

我不再向你写入了

或者我不再向你读了这是主机的权利

或者是在通讯的过程当中

数据的接收方某一次返回了一个NACK

也就是我无法响应这个数据了

也可能是因为这个设备不存在了

也可能这个设备数据的buffer满了

不管是什么样的机制

当接收端返回NACK

对于某一次通讯没有给出ACK信号的时候

也就是ACK那个比特

是逻辑1的响应的时候

这个通讯也应该停止

接着主机会给出一个stop信号

一笔通讯就完成了

所以这就是一个I2C的完整的数据帧

在每个数据帧里

只能完成一个主机与一个设备之间的

一个单向的数据通讯

每一个数据帧都以开始位开始

以停止位停止

而在开始位后面紧跟的

是应该由主机送出的

七比特的设备地址

加上主机送出的一个读写的方向信号

后面跟随若干个字节的连续的

读或者写的数据

而每一个字节的通讯完成的时候

都应该由接收方无论是主还是从

来交换一下这个数据的控制权给出一个ACK

当主机要求停止的时候

或者是接收方给出NACK的时候

我们的通讯就截止了

那么最后要多说一句是I2C

是一个完整规范的协议

所以我们刚才讲了它不像SPI那么灵活

而是非常的完整和严谨

就严谨到了我们的数据的

LSB和MSB也有严格的规范

在I2C的通讯里永远是MSB在前

LSB在后

用更中文的语言说

就是我们一个二进制数它的高位先发送

低位后发送

所以这样一系列的因素构成了一个

完整规范的I2C的通讯的数据帧格式

所以如果两个设备符合I2C

它们的电平标准大家商量好

都是3.3伏或者5伏

接在一起我们只需要很简单的配置

完成刚才这样一种数据帧的结构

就可以正确的通讯起来

而不用在电气层上很担心

那么麻烦在哪呢

就是麻烦在刚才我们所说的这个数据帧

大家发现这里头出现了逻辑的关系

就是主机给地址给方向

然后还要判断设备是否给了ACK

如果给了怎么样

如果没有给怎么样 对不对

它就会发现它不再是一种

数据写入寄存器就不管

然后过会儿就接收

这么一种简单的通讯方式

这样一种互相有交互的

对于数据帧有所管控的通讯

我们就进入了

有通讯协议的这样一种阶段

那么这也就是我所说的

日后大家学习USB或者学习以太网

接收到它那个数据帧

它那个通讯协议的时候

慢慢会越来越复杂的理解的第一步

或者叫起点

那么如果我们把这样一个完整的流程

拉开说一个I2C的完整的数据通讯

按时序图拉开看就是这两张长图

有兴趣的同学大家自己可以看一看

就是在时钟线为高电平的时候

数据线比较反常的

发生一次由高向低的跳变

意味着一个数据帧的开始

接着时钟就开始周期的跳变

产生时钟信号

然后数据帧就比较规范的

总是在低电平的时候发生数据的变化

然后在高电平的时候保持不变

依次变化七个比特

产生地址

再变化一个比特产生方向

接着接收一个来自从设备的ACK

然后接着再由主机进行下一步的通讯

从机给ACK这是写操作

下面这张图是读操作

大家注意呢

我们是数据线把主机

和它所通讯的那个从机的视角的

数据线的信号画成了两个流程图

但是实际上它们接的是一根线对吧

所以实际上我们真正在数据SDA

那根引脚那根线上看到的信号

是我们从主机视角看到的逻辑

和从机视角产生的逻辑之间的

与以后的结果

我不知道大家这个概念清不清楚

换言之

这个主机和从机的数据时序只是零有效

代表了主机和从机拽不拽这根线

而这根线上的电压是两者一起拽的结果

大家都不拽的时候才是逻辑1

如果大家这个概念清楚了

那么I2C我相信大家都理解的比较清楚了

如果不清楚大家可以倒回去

从一开始电平那个开漏

开集电极的那个逻辑

那个电气部分

再来认真的回忆一下

那么我们还有一个高阶的事情

一个是叫重复起始

重复起始就是说如果我们有两笔通讯

逻辑上来讲两个数据帧

写写写写写 读读读读读 写写写写写

理论上中间出现方向变化的时候

应该是开始比特

数据通讯的地址 方向

然后加上数据通讯内容 停止

然后再来一个开始比特

再到数据方向再停止

那么是在I2C里头

允许略掉那个停止比特

就中间那个停止比特是中间空闲的位置

只需要在开始比特读写这个地址之后

一个方向的数据传输到某个时候

重新发一次开始位

也就是在高电平的时候

再产生一次数据线由高向低的跳变

就可以进行下一笔通讯

那么在下一笔通讯开始时候

就是一个完整的新的数据帧

仍然是给出地址

给出数据

而且方向可以跟上次不一样

这个时候中间的这个开始位

我们称为restart

也就是在电平上跟起始信号完全一样

在位置上可以顶在

前一个数据帧的停止位的位置

使两个数据帧之间连起来节约时序

这是第一个高阶的概念

称为Restart

那么第二个高阶的概念呢

就是子地址的概念

那么我们往往在刚才那个通讯模式里头

描述了一种极简单的状态

我不知道大家能不能理解

我来给大家讲这样一种应用

那么很多时候我们会说访问一个从设备

从设备自己有一个地址

那么从设备的这个地址

就有点打个比方的话

像我们大家住的学生宿舍的门牌号码

比如504房间对吧

然后我们说504房间进去四个人

然后接着发4个字节

咚咚咚四个字节就进去了

然后我们说504房间出来四个人

我们做一次读操作

那么主机先发起

先写这个地址504

然后说方向是读取

接着咚咚咚出来四个人

四个字节出来

这是我们想象的一类设备

但是很多时候我们的设备

是有比较复杂和完善的功能

它内部可能有不止一个存储单元

而且这些存储单元

可能有各自的定义和含义

最典型的就是我们有可能用I2C

外扩接了一个有复杂功能的

外设模块或者芯片

比如GPS 比如温度传感器

或者我们做实验用的加速度传感器

那么这个时候它的片内

可能有多个存储单元或者有多个寄存器

这个时候在这个设备的内部

可能还会有子地址

那么这个时候我们就要通过编程

实现对于I2C设备内子地址的访问

那么这件事情说起来有点绕

我还是绕回刚才那个比喻

说我们有一个房间是504

但这个房间里有四个铺位

住着四个同学ABCD

然后我们说我们访问504房间

请一号铺位上的A同学出来

那这个时候我们要做的操作呢

是先给这个504房间发504的地址

接着再给这个504房间发一号铺位的地址

然后最后做一个读操作

这个一号同学这个字节出来 对吧

那么如果我们说指定要写入一个字节

比如504这个房间三号铺位的C同学

我要把它送进去

这个时候我们要在通讯的角度

先写一个字节504的地址

再做一次对设备的写操作

写这个3号铺位的这个地址

接着再把真正要放进去C同学这个字节

写给设备

于是是三次写操作

或者叫地址后面跟着两次写操作

一次写的是子地址

一次写的是C同学这个具体的字节

我不知道这个比喻大家有没有明白

也就是说我们访问的从设备的内部

如果还有地址的话

地址是我们传输的数据当中的一部分

是我们要传输的第一个数据

所以在有子地址的访问的时候

我们的读写就变得比原来要复杂了

写操作相对简单

那么由起始位开始

主机说一个七比特地址选中一个从设备

选中一个芯片

接着再发一个字节的通讯

也就是数据部分的第一个字节

实际上是一个地址编号

比如三号铺位

或者两号铺位

那么选中里头一个子地址

然后紧接着发的数据的第二个字节

就是再下一笔通讯是针对这个子地址

我们要写入的数据

当然我们可能写入不止一个数据

我们还可以连着往后写

这是对于带有子地址的设备的写操作

读操作就比它麻烦

为什么呢

大家看它涉及到方向的切换

我们要先写入主机发起一个通讯

然后发起这个通讯的时候

七比特的设备地址写出去

但是这个时候我们虽然是要读里头内容

但我们第一笔通讯仍然是一个比特是写

做一个写操作

为什么呢

因为我们紧跟着要写一个字节的子地址

也就是这个房间里的铺位号我得先写给它

所以是设备地址选中做写操作

写入一个字节的这个子地址

铺位号 三号铺位 一号铺位

写完了以后这笔通讯结束

Restart一下

因为不Restart一笔通讯里只能是一个方向

Restart一下

主机再发起一笔新的通讯

仍然是这个房间号

仍然是这个设备的子地址

七个比特

这个时候跟的读写方向

跟成读这个方向的读字节

读比特

那么也就是发生写操作

写入子地址

Restart一下

再发生一个新的通讯

给入设备地址

此次是读地址

那么这个时候设备

把刚才你给的那个子地址的内容

送回来给主机

那么这个地方比较麻烦比较绕的

就是因为I2C的数据帧

在单次由主机发起的通讯里

只能完成一个方向

所以涉及到子地址的写的时候

我是写房间号

写子地址 写铺位号

写我要写的数据送进去了

做读操作的时候

做写操作

写房间号 写铺位号

重启切换方向

写房间号

读 把我刚才告诉你的铺位号的

那个数据那个人送出来给我

所以就是这样一种对于子地址的操作

希望大家能够通过我这个

不太巧妙的比喻加以理解

那么这就是I2C通讯里头的

一些高阶内容

既讲了对于I2C从电气层

到通讯这个数据帧数据协议的概念

也给大家讲了它如何访问内部

有子地址的复杂结构的通讯

那么在下个单元

我们对于加速度传感器的编程里

我会带着大家直接把它用上

这个单元就到这里

ARM微控制器与嵌入式系统课程列表:

第一章 概览

-1.1 课程概览

--1.1 课程概览

-1.2 如何学好嵌入式系统

--1.2 如何学好嵌入式系统

第二章 绪论

-2.1 计算机的基本概念、发展历史

--2.1 计算机的基本概念、发展历史

-2.2 从晶体管到CPU

--2.2 从晶体管到CPU

-2.3 概念CPU、微控制器MCU和嵌入式系统

--2.3 概念CPU、微控制器MCU和嵌入式系统

-2.4 八卦计算机史

--2.4 八卦计算机史与创新

-2.5 不同领域、不同系列的嵌入式系统

--2.5 不同领域、不同系列的嵌入式系统

-2.6 ARM历史与MKL25Z128 MCU

--2.6 ARM历史与MKL25Z128 MCU

--2.6 ARM历史与MKL25Z128 MCU【习题】

--2.6 ARM历史与MKL25Z128 MCU【讨论】

第三章 MCU基础

-3.1 CPU的基本结构和运行机制

--3.1 CPU的基本结构和运行机制

-3.2.1 堆栈的概念

--3.2.1 堆栈的概念

--3.2.1 堆栈的概念【习题】

-3.2.2 堆栈的概念-头脑体操

--3.2.2 头脑体操

-3.3.1 ARM的体系结构

--3.3.1 ARM的体系结构

--3.3.1 ARM的体系结构【习题】

-3.3.2 ARM的体系结构-头脑体操

--3.3.2 ARM的体系结构-头脑体操

-3.4.1 中断的概念和机制

--3.4.1 中断的概念和机制

-3.4.2 中断子程的概念和编程

--3.4.2 中断子程的概念和编程

-3.5 复位、时钟、存储器和总线

--3.5 复位、时钟、存储器和总线

--3.5 复位、时钟、存储器和总线【习题】

-3.6 小结:MCU的总体结构和程序运行机制

--3.6 小结:MCU的总体结构和程序运行机制

--3.6 小结:MCU的总体结构和程序运行机制【习题】

第四章 ARM微控制器的开发

-4.1 第一种外设:IO

--4.1 第一种外设:IO

-4.2 IO外设的编程实操-点亮LED

--4.2 IO外设的编程实操-点亮LED

-4.3 IO外设的进阶知识

--4.3 IO外设的进阶知识

-4.4 嵌入式开发的基本概念与工具链

--4.4 嵌入式开发的基本概念与工具链

-4.5 嵌入式开发的进阶知识

--4.5 嵌入式开发的进阶知识

-4.6 嵌入式开发中的C语言(上)

--4.6 嵌入式开发中的C语言(上)

--4.6 嵌入式开发中的C语言(上)【习题】

-4.7 嵌入式开发中的C语言(下)

--4.7 嵌入式开发中的C语言(下)

--4.7 嵌入式开发中的C语言(下)【习题】

-E0.1 实验零 开发板的初步认识与工具链的安装

--E0.1 实验零 开发板的初步认识与工具链的安装

-E0.2 实验零 体验一个例程的编译与下载

--E0.2 实验零 体验一个例程的编译与下载

-E0.3 实验零 编写第一个程序:点亮核心板LED

--E0.3 实验零 编写第一个程序:点亮核心板LED

-E1 实验一 点灯秘籍

--E1 实验一 点灯秘籍

第五章 ARM微控制器的各种外设

-5.1 ARM微控制器外设学习概述

--5.1 ARM微控制器外设学习概述

-5.2.1 ARM微控制器外设:通讯

--5.2.1 ARM微控制器外设:通讯

-5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)

--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)

--5.2.2 ARM微控制器外设:异步串行通讯UART的原理(上)【习题】

-5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)

--5.2.3 ARM微控制器的外设:异步串行通讯UART的原理(下)

--5.2.3 ARM微控制器外设:异步串行通讯UART的原理(下)【习题】

-5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口

--5.2.4 ARM微控制器外设:RS-232串口与USB虚拟串口

-5.2.5 ARM微控制器外设:UART的寄存器编程(上)

--5.2.5 ARM微控制器外设:UART的寄存器编程(上)

-5.2.6 ARM微控制器外设:UART的寄存器编程(下)

--5.2.6 ARM微控制器外设:UART的寄存器编程(下)

--5.2.6 ARM微控制器外设:UART的寄存器编程(下)【习题】

-E2 实验二 UART编程实操

--E2 实验二 UART编程实操

-5.3.1 ARM微控制器外设:IO的中断编程(上)

--5.3.1 ARM微控制器外设:IO的中断编程(上)

-5.3.2 ARM微控制器外设:IO的中断编程(下)

--5.3.2 ARM微控制器外设:IO的中断编程(下)

-5.4.1 ARM微控制器外设:定时器的原理

--5.4.1 ARM微控制器外设:定时器的原理

-5.4.2 ARM微控制器外设:定时器的编程

--5.4.2 ARM微控制器外设:定时器的编程

--5.4.2 ARM微控制器外设:定时器的编程【习题】

-E3 实验三 定时器中断编程实操

--E3 实验三 定时器中断编程实操

-5.5.1 ARM微控制器外设:PWM的原理

--5.5.1 ARM微控制器外设:PWM的原理

-5.5.2 ARM微控制器外设:PWM寄存器与编程

--5.5.2 ARM微控制器外设:PWM寄存器与编程

-5.5.3 ARM微控制器外设:PWM编程实例—电子音乐

--5.5.3 ARM微控制器外设:PWM编程实例—电子音乐

-E4 实验四 数码管显示编程实操

--E4 实验四 数码管显示编程实操

-5.6.1 ARM微控制器外设:SPI通讯简介

-- 5.6.1 ARM微控制器外设:SPI通讯简介

--5.6.1 ARM微控制器外设:SPI通讯简介【习题】

-5.6.2 ARM微控制器外设:SPI寄存器与编程

-- 5.6.2 ARM微控制器外设:SPI寄存器与编程

-5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动

--5.6.3 ARM微控制器外设:SPI编程实例—OLED显示屏驱动

-5.7.1 ARM微控制器外设:I2C通讯简介

--5.7.1 ARM微控制器外设:I2C通讯简介

-5.7.2 ARM微控制器外设:I2C的通讯协议

--5.7.2 ARM微控制器外设:I2C的通讯协议

-5.7.3 ARM微控制器外设:I2C寄存器与编程

--5.7.3 ARM微控制器外设:I2C寄存器与编程

--5.7.3 ARM微控制器外设:I2C寄存器与编程【习题】

-5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器

--5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器

-5.8.1 ARM微控制器外设:ADC简介

--5.8.1 ARM微控制器外设:ADC简介

-5.8.2 ARM微控制器外设:ADC基础

--5.8.2 ARM微控制器外设:ADC基础

-5.8.3 ARM微控制器外设:ADC寄存器与编程

--5.8.3 ARM微控制器外设:ADC寄存器与编程

-E5 实验五 ADC编程实操

--E5 实验五 ADC编程实操

-E6 挑战实验

--E6 挑战实验

第六章 嵌入式系统设计

-6.1 嵌入式系统的接口与设计

--6.1 嵌入式系统的接口与设计

-6.2 嵌入式系统的实例

--6.2 嵌入式系统的实例

5.7.2 ARM微控制器外设:I2C的通讯协议笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。