当前课程知识点:ARM微控制器与嵌入式系统 > 第五章 ARM微控制器的各种外设 > 5.8.1 ARM微控制器外设:ADC简介 > 5.8.1 ARM微控制器外设:ADC简介
各位同学大家好
我是清华大学工程物理系的曾鸣老师
欢迎大家继续回到我们
ARM微控制器与嵌入式系统MOOC课堂
那么我们继续进行
ARM微控制器的外设的学习
在这个单元里呢
我们要开始学习
应该是微控制器里头最最最重要的一类外设
应该我没有用别的词汇形容过
我们之前所学习的包括通讯 时钟
其他的那些外设
为什么呢
因为在这个单元里
我们要学习的是数据转换器
包括模拟到数字的ADC和数字到模拟的
DAC这样一些基本概念
那么我们做一个微控制器
我们可以通过转换的接口跟外围通讯
我们可以是通讯协议
可以是串行的 并行的
可以是IO
但是我们实际上作为一个微控制器
总要跟我们所生活的物理世界发生关联
我们有时候可能想知道温度
有时候可能想知道光强
然后有时候我们想反过来控制一个加热器
有时候可能想要控制一个音量
控制一个旋钮
那么等等
所有这些对于物理世界之间的关联
都涉及到了这个单元所要学习的
数据转换器的概念
那么我们回忆一下计算机系统
怎么来跟物理世界发生关联
或者数据转换器究竟干的什么事呢
我们从最基本我们人做的操作想起
比如说我们呆在一个屋子里
这个屋子里就会有温度
那么绝大多数的物理量包括温度
它都是一个模拟量
或者说是一个连续变化的量
这个屋子里的温度不会骤冷骤热
它一定是从一个温度值
到另外一个温度值
在数学上 是一个连续平滑的曲线
发生变化的
所以如果我们把真实的温度值
连续的画在一张图表上
它就可能像这样以时间为横轴
以温度为纵轴
是一条看上去很平滑的曲线
无论它的波动幅度有多么大
那么如果我们是一个人的角度想了解
房间的温度的变化和温度的当前的值
过去的值 乃至趋势怎么办呢
我们要对它进行测量
把这些值记录下来
如果我们想知道这些趋势
和变化的规律的时候
我们可能要定时的测量
于是我们会得到间隔一定时间间隔点的
很多个测量值
于是这些值会在图表上就会构成若干个隔点
如果我们人通过脑补的方法
把这些点用平滑的曲线连起来
我们就再现了这个温度的变化趋势
那么就是这么一个过程
那么大家想想我们做了一个微控制器
做了一个嵌入式系统
它很重要的事情是替代人
去做很多自动控制的智能的事情
如何让一个计算机系统
做完我刚才说的人做的这件事
对于身边的物理量加以了解
从而进行控制呢
这就涉及到了我们这个单元要学习的
Data Converter也就数据转换器的概念
那么其实Data Converter
一般来讲会有两个主要的相反的方向的概念
一个是从我们的连续变换的模拟量
变成01组成的数字量的ADC
就是模数变换器
也有从我们运算得到的数字量01的序列
变成连续变化的模拟量的DAC
也就是数模变化器
那么我们建立的一个基本概念
是要有某种电路的设计
某种电路的时限使我们的计算机系统
能够拿到像人测量以后的量测结果那样的
在时间上间隔离散化
在幅度上根据resolution 根据分辨率
量化以后的一个一个点的值
而不再是一个波动的这个电信号
或者是物理量
这样计算机才能更加有效率地
进行存储 传输
特别是运算
我们可以使用各种各样的数字信号的方法
来对这些物理量加以运算
获得比以前更好的性能或者更高的效能
那么回忆一下我们刚才
所讲过的这样一个概念
我们生活的物理世界里头的物理量
都是连续的模拟的
我们称为analog signal
不管是温度 压力 湿度
一个管道里的流量
一些这个射线 光线的剂量 能量
还有我们要测量的一些
包括速度这样的间接物理量
它都是连续的
我们的微控制器是一个离散的数字系统
它能够处理一个一个由0和1组成的数字
这两者如何关联起来呢
其实是两个步骤
从测量的角度
我们总会有各种各样的传感器
帮助我们把不同的物理量模拟信号
变成模拟的电信号
比如我们有一个麦克风
它会把此时此刻老师说话的声音的
声波的震动的机械能变成电能
于是大家可以看到一个表现为
波动电压的电信号
这个信号是对我的声音信号的一个模拟
它用它同样的频率
和可以量化对应的幅度
来记录了我的声音信号
而对这些信号原始的加以放大
乃至我们模拟电路后面学的进行运算
复杂的运算
乃至积分 乃至对数
这些模拟的手段
都在模拟电路的这一类里头进行学习
而在微控制器这样一个数字系统领域
我们第二个要素就是通过模数转换器ADC
把一定的时间间隔 一定的速度
把这样的电压的波动信号上面
一个一个点的值测出来
存成一个数据的序列
给我们的微控制器
给我们的嵌入式系统
来进行处理
那么很多时候
我们看到的嵌入式系统高度抽象以后
都会跟这张图上的系统有点类似
我有个sensor
这个sensor有点像个温度计的作用
把温度变成电信号
而这个电信号我们通过ADC采样
以一定的时间间隔
把上面一个一个点的电压值存成数值
存成0和1的序列
而微控制器作为一个微小的计算机系统
对这些数据进行运算和处理做出决策
反过来可能要通过一个DAC数模变化系统
再还原成对物理量的控制
比如说我们控制一个暖厅一个加热器
然后我们来实现对我们所处的
这样一个环境比如冬天的保温
这个简单的功能可能很多人都体验过
比如说空调 比如加热器
我设定一个温度
那么于是我的控制器
就要在不停测量温度的基础上
温度高了降一降
温度低了升一升
把屋子调在一个适宜的温度上
这就是一个典型的自动控制系统
那么在这个控制系统当中
我们就会体会到
ADC、DAC这样的数据转化器
它是我们的嵌入式系统与物理世界
发生关联的两个桥梁
好 那么我们回顾一下
数据转化器是发挥这样的作用
它如何实现呢
如果我们抛开计算机嵌入式系统
这样一个大背景
冷静下来想一想
其实数据转化器的本质是Data Converter
就是数据转化
把我们不知道是多少的量
把我们想要的不知道如何称量的量
以一种数据的方法表达出来
这样一种方式
其实在我们生活当中非常的常见
大家都很熟
就是测量 对吧
我们看到一个盒子
用大小 比较大来形容是形容不清楚的
我们要拿一把尺子去量它
而在我们的世界当中
有大量大量的系统
在我们知觉不知觉的时候
完成量测的技术
比如说Data Converter
实际上是讲ADC、DAC
那么美国的AD公司就有一本非常厚的书
像这个封面这样
我们今天这个课件里有很多图
是从这本书里头找出来的都非常经典
那么这本书里当时举了一个最早的例子
就是古代的伊斯坦布尔的取水器
比如大家购买水或者要取水
那么这个水我要称量不同的量给要水的人
那么我始终使用同样的管道来放不同的量
这个效率就很低下
那么他们聪明的古代人的解决方法是什么呢
是用8倍、4倍、2倍、1倍不同粗细的管子
在一个同样深度的池子上凿开了很多眼
然后当要取水的时候
把要的水量转换成这个数据
然后堵上一些管子 留下一些管子
放指定长的时间
就得到了一定份数的水
那么这就是一个最最简单的数模转换器
要多少水
把数字变成模拟量
这个水量
于是大家可以想象
给水的精度其实就是最细的那个管子
放单位时间的水量
比这更小的量就不在考虑范围内了
也就是说在给水的时候
小于这个的量就忽略当作误差了
那么这样的生活中无处不在的数字转换器
包括尺子 包括取水
到了电子学的时代
比我们电子计算机出现更早的时候
人们已经开始想能够用电子学的方法
帮助我们测量很多量吗
其实是可以的
比如这里还有一个例子
那么我们都知道在计算机出现之前
我们会有显示屏
会有电子束
那么电子打成束以后
在一个电场当中它会发生偏转
那么如果我们把我们要测量的物理量
转换成电信号
叠加在一个电子束方向的平行板上
那么这个板上
就会加上不同幅度的电压值
使这个电子束
发生不同程度不同角度的偏转
而如果像这张图所示
这样一个窄窄扁平的电子束
因为平行板上加的电压值不一样
使它最终打到屏幕上的位置不一样
而我们对这个屏幕进行了这样的编码孔
于是打到最上面的时候
四个孔都有 得到了1111
打到最下面的时候
四个孔都挡住 我们得到了0000
实际上它是一个借助电子偏转的
最简单的ADC
模拟到数字的转换器
于是一个电压值是大是小
我们没有办法量化
加到电场上
看看被它偏转以后电子打到哪
我们就可以在四个比特
也就是十六分之一的精度上
对于这个电压的大小进行量测
那么这就是早期的用电学方法
进行度量或者来做这把尺子的方法
那么到了我们的微控制器里头
到了我们现在用电子学里头
大家想想我们怎么实现一个ADC
能让我们的微控制器用起来呢
那么我们想一个特别极端的例子
说这个
我们就有一个一比特的ADC
也就是说我们进来一个电压值
我只需要一比特的区分信号
或者说就是定个量定个性
说这个电压是高还是低
那我们实际上
一比特ADC的最简单实验方法
我不知道大家学过模拟电路没有
其实就是比较器
比较器是这样一种电子器件
它可以在同向和反向两个输入端
给出不同的电压
那么当你高我低
或者我低你高的时候
它的输出端可以给出一个逻辑的1
或者逻辑的0信号
也就是我们电平标准
比如3.3伏的逻辑1或者0伏的逻辑0
所以它对输入的两个电压进行比较
输出1比特的0或者1
那么我们把它当电压比较器的时候
它是电压进行比较
但是我们把它当ADC的时候大家想一想
它是不是实际上就是一个比特的ADC
我给你一个参考电压
我给你个待测量的电压
于是用参考电压
对这个待测量的电压进行了量化
比它高就是1
比它低就是0
那比如说我的动态范围是3.3伏
我给了个参考电压是1.65伏
那么一个未知电压进来跟参考电压一比
在上半节那得到逻辑1
在下半节得到逻辑0
是不是我们就拥有了一个比特的ADC
那么如果有了这个思路
我再来问如果我们
就接着用比较器这个思路
来做ADC
让我们的单片机让我们的微控制器
能够对于输入电压知道它的值是多少
我要做两比特的ADC该怎么做呢
这个时候你会发现两比特的ADC
需要对于一个未知电压信号
当然这个电压信号
可能代表是温度是湿度
来自于传感器 对吧
进行分类
两比特意味着00到11
我们要把它分成四个档
所以我们至少需要三个比较器
来对这个电压的值进行判断
那么我们把输入的电压值
同时给到三个比较器的比较端
而这三个比较器
分别用三个不同的参考电压来当做阈值
于是我们就可以判断这个输入电压
究竟是在这三个不同阈值的
最下面的那个下面
还是最上面的那个上面
还是它们之间
于是得到了四个区间
那么这四个区间我们相应的
把它识别为00到11的两比特信号
于是我们就得到了两比特的ADC
那么多问一个问题
如果一个输入电压值要在这个rank2
第二个区间这个位置
那么我们三个比较器的实际输出是什么呢
大家想一想
那么我们会发现这三个比较器的输出值
从上往下是011
也就是我们的输入电压
比下面两个比较器的参考电压高
仅小于最上面那个比较器的参考电压
于是比较器的输出是011
而我们实际上拿到的两比特信息
是对于这四个电压区间是00到11的编码
所以一个完整的两比特ADC
应该是由三个比较器
加上一个编码电路来组成的
也就是把001100这样三个比较器的输出值
编码成对应的00到11的二比特的二进制信号
那么这个编码电路怎么设计
可以大家回忆一下我们这门课
第二个章节给大家讲的数字电路基础
我们知道用逻辑门电路
用74逻辑门电路用与门或门
是一定可以实现的
所以一个简单的两比特的ADC
就如这张图所示
我们把一个动态范围的参考电压
用电阻分压成了四个等份
其中三个值用来给比较器当参考电压
这样对于任意未知的输入电压
我们都可以跟它比一比
最后得到的
两比特 四个区间的区分度的量化
于是计算机系统拿到这两个比特的00到11
就对这个输入电压值的幅值是多少
有了一个初步的估计
这样就完成了一个简单的模数变化
我们的计算机就可以拿着
这个电压值的伏值的大小的信息
来进行进一步的处理了
那么问题来了
如果我们按照这个结构
要做一个分辨率更高
对于电压的测量精度
测量能力更强的ADC
我们应该怎么做呢
那么这样一类方法特别简单的ADC
我们称为flashADC
那么或者叫flash Converter ADC
也就是快闪结构的这种ADC
那么它都是用比较器
来对电压直接进行比较
得到我们要的结果
那么聪明同学马上会想一想说
两个比特意味着2的2次方有四个区间
所以至少需要三个比较器
那么需要N比特的这个分辨能力的ADC
就意味着我们这个电路
需要2的N次方减1个比较器
多吗
有同学说不多
仔细想一想
如果我们要十比特精度
就是千分之一的精度去测量一个物理量
那我们就需要2的10次方也就是1024减1
1023个电压比较器放在一起来工作
就算每个比较器需要占用的面积很小
那么这样一个芯片的功耗
以及它所要的面积
可能比我们的微控制器本身还大
所以我们flash ADC
是最快的一类ADC
但是它的缺点就是会非常的复杂
有同学说老师
你一会儿说简单 一会儿说复杂
到底为什么呢
你们想一想我们的flashADC的
结构和原理非常的简单
但是当有几千上万个比较器
要堆在一起的时候它的电路连接
电路关系非常的复杂
所以在工程科学我们会经常发现
想法简单的东西会在实现上很复杂
实现起来简单东西可能意味着
你在想法上要多费些脑筋
那么给大家举这个例子
我要告诉大家的是
人类发展到今天
如何把一个不知道的电压值
想办法变成0和1的序列
拿个尺子对它量一量这样的ADC
有很多很多种方法
那么除了结构原理方法最简单的flashADC
实际上ADC还有很多很多种实现方法
比如说我们再来看一看计数型的ADC
这样一种思路
这样一种ADC提出在1940年代
甚至比我们计算机出现还要早
它是电子学技术蓬勃发展时代的人们
用各种脑洞来想我们怎么测量物理量
提出的一类方法
那么这个图的左上角
有个大家熟悉的单元
我们叫做PWM模块
那么简单地讲讲它的方法
就是把我们要测量的模拟电压值的幅度
换成跟它成比例的一定脉宽的信号
然后我们用一个600K赫兹的时钟
就在这个与门下面一个更高频率的时钟
与这个脉宽信号与
于是这个时钟信号
仅当这个脉宽为逻辑1的区间内
时钟信号可以产生在与门的输出端
于是后面有个计数器
数一数在这个时间宽度内这个时钟信号
一共震动了多少次
也就数到了多少个窄脉冲
那这个计数值是不是就是量化了
这个脉冲信号的宽度
而脉冲信号的宽度
又与输入电压的幅度是成比例的
所以我们发现
我们用这样一种巧妙的时序电路
时序的数字电路
实现了对一个输入模拟电压值的数据量化
那么这个600K赫兹的时钟
分成了一个1%的频率
6K的赫兹去控制PWM模块采样
于是在一个PWM模块能够采样的范围内
600K赫兹的时钟最多能数出100这个数来
所以这个计数器最多能从00一直计到100
换成二进制就是不超过5个比特
所以这样一个电路
实现了一个对于输入电压值
不超过5个比特1%精度的量化
也就说把电压幅度变成脉冲宽度
再用一个很高的时钟频率
去数这个脉冲有多宽
数了多少个
然后再把这个数出来的计数值
变成一个0和1的序列
那么当我们的微控制器计算机
要处理这个序列的时候
只有拿到这些0和1
是不是就可以进行C语言的计算
进行寄存器的设置了
这也是一类ADC
那么很显然它比刚才的FlashADC
要慢一些
要花掉一些时间来完成这个时序的数数
所以比这张图为例设计于1940年代
只能实现6K的采样率
5个比特的精度
那么我们今天使用的微控制器
特别我们用的这个
ARM的微控制器里头的ADC
它是用什么样的方法呢
大家会发现ADC很好玩对不对
我们要把未知的模拟量
变成已知的0和1的序列
其实这个电路
就跟我们编程一样非常的灵活
会有很多很多聪明的先贤
想各种巧妙的方法来设计电路
能够实现这个功能
那么我们在微控制器里头
刚才说用的那一类ADC
我们称为逐次渐进型的ADC
或者称为SAR型的ADC
它的思路非常的简单
就像这张图所示
那么这张图大家看的时候
还觉得不太明白这是结构图啊
曾老师虽然说我们要看懂啊
看不懂 没关系
大家都做过我们的某一次的实验
有一个猜数字的游戏对不对
微控制器自己有个数
你不知道
你来猜
是不是跟我们有一个模拟电压输进来
对于计算机系统 电子学系统现在不知道
我要知道它是多少怎么办
我们说这个数在0到10之间
你猜一猜 我先猜个8
然后到时候大了
我再猜个6 你说小了
然后我说7 对了
那么逐次渐进型的ADC
就是用了类似于这样一个思路
我先猜一个数
这个数我用一个DAC还原成一个模拟电压
与数电压比一比
比较器告诉我是大了还是小了
根据大了还是小了
我再猜一个数
然后我再产生一个电压
跟输入电压比一比是大了还是小了
我猜的次数越多
我就越逼近这个真实值
所以这样一种过程在
我们刚才提到这本书的图里
就画成了称天平的一个比喻
说有个东西不知道多重
但是重量在0到64之间
那我们最有效率的比法是什么呢
先跟32比一比
比32大还是比32小
比32大或者比32小
我在它比出来的结果上再加个16
16比完了再加个8
8比完了再加个4
实际上我们这样子以2的N次幂往下比
每次就能确定二进制数里的一位
然后比多少次
就能获得几个比特的精度 对不对
所以画成一个电路
就是这样一个结构框图
但它在本质上
比我们刚才上一页看到的
一个反馈回来DAC变成模拟电压再来比较
思路上是一样的
所以我们如果放在一张图里来看
就会发现
我们使用逐次渐进型的ADC
对于一个模拟电压值进行测量
进行量测 进行估算
它的值是逐渐逼近真实值的
就像这张图所示
第一次猜
猜出个大概范围
第二次猜加上个小量更接近
实际上我们每猜一次
我们对于这个数据结果的二进制数
就多确定了一个比特
猜四次我就得到了四比特的二进制数的精度
那么有了这样一种思想
逐次渐进型的ADC设计起来
就比刚才的Flash ADC要麻烦
我们要有一个电路
想办法把数字量先DAC变成模拟电压
还要有个比较器
让它跟数据电压能够比
还要有一个控制逻辑
让这些周而复始地进行工作
最终得到一个结果
那么在这里不展开讲
大家在相关的资料上可以看得到
比如说我们要得到一个电压值
要把一堆0或者1的数字量变成模拟量
我们往往会用电阻网络
这是一个很有意思的高中的物理题
大家可能解过
说2倍的R
跟2倍的R跟1倍的R串联
这个电阻网络大家会发现
从下往上的每一个节点
对于输出电压的权重
刚好是二分之一 四分之一 八分之一
所以我们将一个数
二进制数
转换成它对应的电压3.3伏代表逻辑1
加在这四个输入端
我们就会得到
根据这个二进制数量化以后的模拟电压
而在芯片设计或者在DAC设计领域呢
更多的是使用权重的电流网络
流过一份电流
流过两份电流还是流过四份电流
然后通过这些开关的控制
来把01序列的每一位的数字
转换成跟它的位数对应的
8倍、4倍、2倍、1倍的电流流过
而这个流过的电流值
跨到了一个运放的反馈电阻上
我们就得到了一个与数字量成比例的
模拟电压值
那么这样一个电路
构成了一个逐次渐进型ADC的核心部件
形成了一个反馈网络
于是我们在一个时序逻辑的工作下
可以不断地产生这个电路猜出来的数字值
与输入电压值进行比较
周而复始
通过N个时序的比较
得到N个比特精度的ADC结果
所以最早大家看到的一些ADC的器件
不是大家想象中一个芯片
或者微控制器一个模块
而是这样一个巴掌大的板卡
就像这张图所示
左下角小小的是一个权重的电流网络
帮助我们进行DAC把数字变回成模拟
而上面有一个比较器
而那些看到的黑色芯片
全部是数字门电路
来帮助我们完成这个
周而复始比较猜数字的过程
所以这样一种逐次渐进型的ADC
在早期是个板卡
随着技术的不断发展
ADC、DAC慢慢变成一个硅片上的
若干个小芯片
变成一个单独的硅晶
变成一个陶瓷封装芯片
再到我们今天买到的单芯片的DAC、ADC
人类的电子学技术在不断集成化的过程当中
它从板卡变成了一个芯片
变成了一个微控制器里头的一个外设模块
那我们看看逐次渐进型的ADC
大家会发现我们对它的优缺点加以形容的话
它是quite fast比较快 对吧
然后相对来讲有点复杂
那么它的好处就是在我们的微控制器里头
绝大多数微控制器内置的ADC
都是这样一种思路
那么它们的精度
一般到8个比特到12比特之间
那么像这样的一类ADC
用SAR这样一种
逐次渐进的方法比较的ADC
用一个形象的方式来说
跟那个flashADC比
它是用时间换精度
或者用时间换空间
它通过逐次的比较来逼近一个精度
而不需要堆积那么多的电压比较器
所以时间持续的长
它的精度就可以相对得高
但是牺牲的就是它的速度
所以它只是quite fast
那么有了这样一些概念
我们就知道在我们的微控制器里
所工作的ADC它是怎样一种工作原理
那么这样我们就讲完了SA
这样一类ADC的基本原理
那么在我们的微控制器
待会要学习的那些模块里
基本上都是这一类的ADC
那么有的同学可能会说一句题外话
说老师
这个ADC看起来要这个不停的来回比较
但是在比较的过程当中输入的电压值
自己变了怎么办呢
这是一个非常好的问题
所以我们的ADC它的采样速度
应该快于我们的物理信号的变化速度
而如果物理信号本身
会发生较快速变化的时候
我们无法对它进行连续的测量
那么我们就需要一个比如说像电容
比如说像开关电容一样的结构
来进行采样和保持
使我们这样转化器在一个转化过程当中
输入端的电压值被hold住
方便我们稳定的完成后续的转化
那么讲完了前面这一个单元
在后面我们会学具体的编程
但我更想给大家讲的是ADC
是一个博大精深的领域
它可以写成一本书
可以讲成一门课
而我们作为微控制器的课程
建立一个基本的概念是
ADC就像是电子学系统
计算机系统的一把尺子
帮助我们去测量
转换成电学量以后的各种物理量
从温度到湿度
从速度到压力
而它的实现方法在过去的几十年
乃至上百年的时间里
无数先贤想出了各种各样巧妙的电路
把这些电压值一次性地比较
把这些电压值变成脉宽来数数
把这些电压值通过参数的方法循环地比较
甚至加上数字信号的系统方法
压缩噪声再加以测量
所以我们会发现
如果我们看微控制器片内是SA型的ADC
但如果我们看广泛的电子学世界
从Σ-Δ型的ADC到PIPELINE的ADC
不同速度 不同工艺方法的ADC
在今天的电子学的领域有广泛的使用
就如右边的这两张图所示
不同类型的ADC排列在这张图上
它们各自有各自的优点
有的精度特别高
有的速度特别快
但是基本上这样一个斜线的趋势
采样速度越快的ADC
它能够实现的精度
或者我们叫分辨率相对的就低
于是我们会根据我们所要测量的物理量
来加以适宜的选择
好 我们了解了ADC的世界
可能如何针对
你要测量的物理量和物理系统
去选择合适的精度 合适的速度
是一门博大精深的学问
在这门课里还无法充分给大家展开
但是我们建立了ADC丰富多彩这样一种概念
我认为对于这个单元就足够了
那么在下个单元
我会来带着大家认知
ADC这样一种数据转换器里头的
一些重要的基本概念
和如何把它编程给用起来
-1.1 课程概览
--1.1 课程概览
-1.2 如何学好嵌入式系统
-2.1 计算机的基本概念、发展历史
-2.2 从晶体管到CPU
-2.3 概念CPU、微控制器MCU和嵌入式系统
-2.4 八卦计算机史
-2.5 不同领域、不同系列的嵌入式系统
-2.6 ARM历史与MKL25Z128 MCU
--2.6 ARM历史与MKL25Z128 MCU【习题】
-3.1 CPU的基本结构和运行机制
-3.2.1 堆栈的概念
--3.2.1 堆栈的概念【习题】
-3.2.2 堆栈的概念-头脑体操
-3.3.1 ARM的体系结构
--3.3.1 ARM的体系结构【习题】
-3.3.2 ARM的体系结构-头脑体操
-3.4.1 中断的概念和机制
-3.4.2 中断子程的概念和编程
-3.5 复位、时钟、存储器和总线
--3.5 复位、时钟、存储器和总线【习题】
-3.6 小结:MCU的总体结构和程序运行机制
--3.6 小结:MCU的总体结构和程序运行机制【习题】
-4.1 第一种外设:IO
-4.2 IO外设的编程实操-点亮LED
-4.3 IO外设的进阶知识
-4.4 嵌入式开发的基本概念与工具链
-4.5 嵌入式开发的进阶知识
-4.6 嵌入式开发中的C语言(上)
--4.6 嵌入式开发中的C语言(上)【习题】
-4.7 嵌入式开发中的C语言(下)
--4.7 嵌入式开发中的C语言(下)【习题】
-E0.1 实验零 开发板的初步认识与工具链的安装
-E0.2 实验零 体验一个例程的编译与下载
-E0.3 实验零 编写第一个程序:点亮核心板LED
-E1 实验一 点灯秘籍
-5.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编程实操
-5.3.1 ARM微控制器外设:IO的中断编程(上)
-5.3.2 ARM微控制器外设:IO的中断编程(下)
-5.4.1 ARM微控制器外设:定时器的原理
-5.4.2 ARM微控制器外设:定时器的编程
--5.4.2 ARM微控制器外设:定时器的编程【习题】
-E3 实验三 定时器中断编程实操
-5.5.1 ARM微控制器外设:PWM的原理
-5.5.2 ARM微控制器外设:PWM寄存器与编程
-5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
--5.5.3 ARM微控制器外设:PWM编程实例—电子音乐
-E4 实验四 数码管显示编程实操
-5.6.1 ARM微控制器外设:SPI通讯简介
--5.6.1 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.2 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.2 ARM微控制器外设:ADC基础
-5.8.3 ARM微控制器外设:ADC寄存器与编程
-E5 实验五 ADC编程实操
-E6 挑战实验
--E6 挑战实验
-6.1 嵌入式系统的接口与设计
-6.2 嵌入式系统的实例