-
- 视频加载中。。。
- 课程目录
- 课程笔记
大家好,
我是 John Valvano。
在本视频中,我们将讨论
串行通信。
换句话说,我们将获取
微控制器中的数据,然后通过 UART 电缆
将其传送到 PC。
在本视频中,我们将了解相应的基本原理。
换言之,通信是一个
包含三个步骤的过程。
我们必须获取信息,然后将其编码成
一种可以进行传输的形式。
我们将会传输该数据,使其穿过障碍,
跨越一定的距离。
然后,我们需要将该数据解码成信息。
正如我在这里的这个实验 18 中所说的,
您将会通过 USB 电缆与 PC 通信。
稍后,在下一章中,我们将再次使用 UART
来与另一个微控制器进行通信,
那便是蓝牙微控制器 CC2650。
我们将要使用的协议叫做
通用异步接收/发送(UART)。
我们将会使用中断。
在整个过程中,我们将学习很多
基本参数,比如波特率、带宽
和响应时间。
转入正题吧。
首先,让我们来讨论一下数据是如何进行编码的。
我们将会取一个八位的数据片段,
八位的信息,将其编码成
一帧。
帧是一个不可分割的通信块,
编码过程将在开始位置放置一个
起始位,
该位一定是 0,在最后放置
一个停止位,
该位一定是 1。
所以帧的组成将会是起始位、八个数据位、停止位。
一次 10 位,这便是它的工作方式。
如果我们是在两个微控制器之间
进行通信,那么实际电压
将会是零或高电平。
其他协议可能会使用其他电压。
但是,这一协议的计时方式是一次一位。
所以,我们可以讨论一位的时间长度,
也就是所谓的位时间。
或者说,每传输一位所耗费的时间。
所有的位都具有相同的时间。
将位时间取倒数便可得到波特率。
也就是每秒的总位数。
我们将以每秒 115200 位的速率运行。
这将会是我们的波特率。
您会注意到这里没有时钟。
只有数据位。
所以我们需要一种可实现同步的方法。
协议的一部分便是同步的方法。
因为停止位是高位,
起始位是低位,所以一定--
如果我们认为这是前一帧的
停止位,
这里一定会有一个 1 到 0 的转换,
这意味着帧的开始。
我们便是要同步到这个转换。
输入上的停止--起始转换被用于
进行同步。
波特率是每秒传输的
总位数。
但是如果我们对传输的信息总量
感兴趣,那便是带宽。
在本例中,由于有八个
数据位,十个帧位,
因此系统的带宽将是
波特率的 80%。
让我们来看看具体的细节,MSP432 有四个 UART。
它有四个 UART。
我们将在实验 18 的这个部分使用的是 UART 0。
然后在实验 19 中,我们将使用
其中的另一个,即 UART 2。
当我们想要配置 UART 时,
我们需要告诉微控制器,引脚不是
GPIO 引脚,而是 UART 功能引脚。
这意味着需要将 PxSEL1 寄存器中对应的位
置为 0,将 PxSEL0 寄存器中对应位
置为 1,这样,便会选择这个引脚作为 UART。
现在,P1.3 是输出,P1.2 是输入。
UART 如何工作?
我们知道它会一次处理一位。
那么,它是如何一次输出一位的呢?
我们将会使用移位寄存器。
发送器和接收器都有
一个移位寄存器。
当我想要进行传输时,
软件会将数据写入该寄存器。
这里会有一个与该寄存器相关的中断标志位。
如果缓冲器为空,TXIFG 标志为 1。
所以通常 TXIFG 有两种用法,
一种是忙等待(Busy-wait), 直到该标志位为 1,
另一种是当该标志为 1 进入中断。
一旦该标志为 1,软件便会
将数据写入那里的寄存器。
UART 中的硬件将会自动
添加起始位,
并会添加停止位。
最终可得到一帧的总共 10 位。
然后,它会在 P1.3 上以波特率时钟移出,
就像我所说的,
一次发送一位。
发送 10 位后,便全部完成,可以处理另外一帧。
接收器的处理方式与之相同。
但要稍微复杂一些,
因为必须要进行同步。
同样,我们会看到,接收器上的 1 到 0 输入边沿
将会使接收器与发送器同步。
现在,它们必须采用相同的波特率。
这个边沿可使两个时钟实现同步。
然后,我将在发现该边沿后,在接收器中
以 10 位为一个单位进行移动。
然后,停止位被剥离,
起始位被剥离,八个数据位
被加载到另一个寄存器中。
这便是接收数据寄存器。
该寄存器有一个关联的标志。
如果该标志为 1,便表示这里面有数据。
基本上,软件要么进行忙等待(Busy-wait),
要么当该标志位为 1 时进入中断。
当该标志出现时,软件
可以从接收缓冲寄存器中读取数据。
这就是它的基本工作方式。
让我来举例说明一下。
在这个特定示例中,我将要传输 ASCII 码
小写字母 a,它的十六进制值为 61,二进制值为
01100001。
我将会把这个八位数据从这个 MSP432
发送到那个 MSP432。
这是我的目标。
开始时,这个缓冲器是空的,那个也是空的。
这个标志位(TXIFG)为 1,表示这个缓冲器是空的。
这个标志位(RXIFG)为 0,表示那个缓冲器是空的。
这就是空闲状态。
发送器注意到了这一情况,
它将会把这个 61 写入这个寄存器。
让我们来看看发生了什么。
61 出现在这个寄存器中。
该标志变成 0,这便是在说,我获得了数据。
然后,让我们将其发送出去。
下一步是,当 61 被放置在这里后,
会被加载到
移位寄存器中。
起始位会在开始位置,
停止位则会在结尾处。
中间这里是我的数据位。
0, 1, 2, 3, 4, 5, 6, 7。
注意,现在发送缓冲器又变成了空的。
所以,如果想要的话,我们实际上可以写入另外一帧。
但是目前还没有全部完成。
还需要传到另一边。
还需要传到另一边。
让我们通过将其向外移出而使其到达另一边。
我们将会一次移动一位。
我们发送一位。
也就是这里。
我们再发送一位。
也就是这里。
再发送一位。
再发送一位。
因此,数据便这样一位一位地移出
发送器,并移入接收器。
这里会有 10 次移位,因为这里有 10 个数据片段,
或者说 10 位。
起始位、八个数据位,然后是停止位。
在接收到全部 10 位后,接收器便会说,
我获得了一整帧。
现在,它可以检查并确保起始位为低位。
它可以检查并确保停止位为 1,
从而检查是否有错误。
假设没有错误,它将会获取
中间的八位并将其加载到
接收寄存器中。
这就是接下来要发生的事情。
61 被加载到接收缓冲器中。
这个标志位将变成 1,因为要传送的
数据现在已经被传递过来了。
这个标志位便出现了。
同样,它可以导致中断或忙等待循环。
然后软件将会读取 61,清空该寄存器,
并清除该标志位。
就是这样。
我们将 61 从一边发送到了另一边。
这里列出了许多细节信息。
为了确保其正常工作,
您必须要阅读
数据手册。
这些是您想要了解的寄存器。
显然,我们必须启用
接收器和发送器。
这是波特率。
我们要在这里设置波特率。
这是我们刚才讨论的两个寄存器。
我们将会写入这个寄存器,然后从这个寄存器读取。
这是出现的两个标志位。
当接收缓冲器中存在数据时,接收标志位会被置为 1,
当发送缓冲器为空时,发送标志位会被置为 1。
而且会有相应的使能位
与这些标志位向关联。
同样,请查阅数据手册。
这不是很复杂。
您可以自己看明白。
那么,我将会如何使用该标志位呢?
为了触发中断,我将设置
发送标志位和接收标志位来触发中断。
在 UART 中断中,可以是两个标志位,
也可以是其中的任一个。
如果是一个接收标志位,我将读取数据
并将其放入 FIFO 中。
同样,这里有两个软件 FIFO,
一个从接收器收集数据,
另一个从发送器发送数据。
如果发送器处于空闲状态,这也是
中断发生的原因,那么我将会
从 FIFO 中退出。
如果 FIFO 恰巧为空,我将会解除发送。
否则,我将会把数据发送出去。
基本上,我都会以这样的方式
在 UART 中使用中断以及
在中断服务例程内使用 FIFO。
我将会在接收数据上执行放置操作,
并将执行获取操作。
这是两种不同的 FIFO。
一个是发送通道,一个是接收通道。
综上所述,串行通信
是一种非常常见的协议。
也是比较简单的方法之一。
我们采用的是 10 位的帧。
数据一次发送一位。
这里没有时钟,所以它使用边沿来进行同步。
在实验中,您将使用中断驱动型连接,
因为它允许我们把很多东西连接在
一起。
本课程到这里马上就要结束了。
我们的机器人已经变得非常复杂,
我们需要能够执行各种任务,
我们的软件需要能够只在需要时执行相应任务,
这便是我们使用中断的原因。
波特率是每秒传输的总位数,
换句话说,这是位时间,
波特率等于 1 除以位时间。
带宽是信息传输速率,
在本例中,由于我们拥有八个数据位,
10 个信号位,因此带宽是
波特率的 80%。
这是最大带宽。
希望您喜欢本次实验。
它非常简单,但能让您的微控制器
与另一个微控制器通信。
祝您实验愉快。
课程介绍
共计4课时,28分43秒
猜你喜欢
换一换
推荐帖子
- Debug时能看出当前运行了几步吗?
- 之前使用Keil电脑模拟时可以看到现在走了几步、花了多少时间 想请问CCS上也有类似的功能吗? 还是说一定得用定时器? ...
-
huybn5776
微控制器 MCU
- 【我与TI的结缘】+聊聊我与TI的结缘
- 本帖最后由 loleno 于 2015-1-23 16:53 编辑 说起大名鼎鼎的德州仪器(TI)公司,学电子的人不会不知道。自己接触TI已经3年了,从当初刚刚入学的电子小白,到今天学到了一些东西,这其中要感谢TI提供的支持!!正好有论坛的活动,就借此机会聊聊我与TI的结缘。 第一次接触TI是大一下学期,学校进行全国大学生电子设计大赛的宣讲,当时自己对这还一窍不通。想想作为电子信息工程专业的...
-
loleno
TI技术论坛
- 我与TI的结缘——蜕变
- 本帖最后由 ltbytyn 于 2015-1-11 11:49 编辑 时光如梭,想想毕业到现在也快10年了。一直想写一篇纪念过去。二类院校的我们进校的时候刚赶上大学扩招第一批毕业,此后几年就业年难就显现了出来。到我们毕业的时候也是最难就业的几年。5月份毕业,直到9月才上班,事实上我们找工作的时间还可以往前拉一年。这中间的经历我们痛苦并快乐着...
-
ltbytyn
TI技术论坛
- 这个哪里错啦?MSP430数码管的程序
- 本帖最后由 qweqwr 于 2015-7-28 11:39 编辑 #include char Seg[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; main() { unsigned int i,j; P3DIR=0xff; P4DIR=BIT0+BIT1+BIT2...
-
qweqwr
微控制器 MCU