大家好, 我是 在本视频中,我们将讨论 串行通信。 换句话说,我们将获取 微控制器中的数据,然后通过 将其传送到 在本视频中,我们将了解相应的基本原理。 换言之,通信是一个 包含三个步骤的过程。 我们必须获取信息,然后将其编码成 一种可以进行传输的形式。 我们将会传输该数据,使其穿过障碍, 跨越一定的距离。 然后,我们需要将该数据解码成信息。 正如我在这里的这个实验 您将会通过 稍后,在下一章中,我们将再次使用 来与另一个微控制器进行通信, 那便是蓝牙微控制器 我们将要使用的协议叫做 通用异步接收/发送(UART)。 我们将会使用中断。 在整个过程中,我们将学习很多 基本参数,比如波特率、带宽 和响应时间。 转入正题吧。 首先,让我们来讨论一下数据是如何进行编码的。 我们将会取一个八位的数据片段, 八位的信息,将其编码成 一帧。 帧是一个不可分割的通信块, 编码过程将在开始位置放置一个 起始位, 该位一定是 一个停止位, 该位一定是 所以帧的组成将会是起始位、八个数据位、停止位。 一次 如果我们是在两个微控制器之间 进行通信,那么实际电压 将会是零或高电平。 其他协议可能会使用其他电压。 但是,这一协议的计时方式是一次一位。 所以,我们可以讨论一位的时间长度, 也就是所谓的位时间。 或者说,每传输一位所耗费的时间。 所有的位都具有相同的时间。 将位时间取倒数便可得到波特率。 也就是每秒的总位数。 我们将以每秒 这将会是我们的波特率。 您会注意到这里没有时钟。 只有数据位。 所以我们需要一种可实现同步的方法。 协议的一部分便是同步的方法。 因为停止位是高位, 起始位是低位,所以一定-- 如果我们认为这是前一帧的 停止位, 这里一定会有一个 这意味着帧的开始。 我们便是要同步到这个转换。 输入上的停止--起始转换被用于 进行同步。 波特率是每秒传输的 总位数。 但是如果我们对传输的信息总量 感兴趣,那便是带宽。 在本例中,由于有八个 数据位,十个帧位, 因此系统的带宽将是 波特率的 让我们来看看具体的细节,MSP432 它有四个 我们将在实验 然后在实验 其中的另一个,即 当我们想要配置 我们需要告诉微控制器,引脚不是 GPIO 这意味着需要将 置为 置为 现在,P1.3 UART 我们知道它会一次处理一位。 那么,它是如何一次输出一位的呢? 我们将会使用移位寄存器。 发送器和接收器都有 一个移位寄存器。 当我想要进行传输时, 软件会将数据写入该寄存器。 这里会有一个与该寄存器相关的中断标志位。 如果缓冲器为空,TXIFG 所以通常 一种是忙等待(Busy-wait), 另一种是当该标志为 一旦该标志为 将数据写入那里的寄存器。 UART 添加起始位, 并会添加停止位。 最终可得到一帧的总共 然后,它会在 就像我所说的, 一次发送一位。 发送 接收器的处理方式与之相同。 但要稍微复杂一些, 因为必须要进行同步。 同样,我们会看到,接收器上的 将会使接收器与发送器同步。 现在,它们必须采用相同的波特率。 这个边沿可使两个时钟实现同步。 然后,我将在发现该边沿后,在接收器中 以 然后,停止位被剥离, 起始位被剥离,八个数据位 被加载到另一个寄存器中。 这便是接收数据寄存器。 该寄存器有一个关联的标志。 如果该标志为 基本上,软件要么进行忙等待(Busy-wait), 要么当该标志位为 当该标志出现时,软件 可以从接收缓冲寄存器中读取数据。 这就是它的基本工作方式。 让我来举例说明一下。 在这个特定示例中,我将要传输 小写字母 01100001。 我将会把这个八位数据从这个 发送到那个 这是我的目标。 开始时,这个缓冲器是空的,那个也是空的。 这个标志位(TXIFG)为 这个标志位(RXIFG)为 这就是空闲状态。 发送器注意到了这一情况, 它将会把这个 让我们来看看发生了什么。 61 该标志变成 然后,让我们将其发送出去。 下一步是,当 会被加载到 移位寄存器中。 起始位会在开始位置, 停止位则会在结尾处。 中间这里是我的数据位。 0, 注意,现在发送缓冲器又变成了空的。 所以,如果想要的话,我们实际上可以写入另外一帧。 但是目前还没有全部完成。 还需要传到另一边。 还需要传到另一边。 让我们通过将其向外移出而使其到达另一边。 我们将会一次移动一位。 我们发送一位。 也就是这里。 我们再发送一位。 也就是这里。 再发送一位。 再发送一位。 因此,数据便这样一位一位地移出 发送器,并移入接收器。 这里会有 或者说 起始位、八个数据位,然后是停止位。 在接收到全部 我获得了一整帧。 现在,它可以检查并确保起始位为低位。 它可以检查并确保停止位为 从而检查是否有错误。 假设没有错误,它将会获取 中间的八位并将其加载到 接收寄存器中。 这就是接下来要发生的事情。 61 这个标志位将变成 数据现在已经被传递过来了。 这个标志位便出现了。 同样,它可以导致中断或忙等待循环。 然后软件将会读取 并清除该标志位。 就是这样。 我们将 这里列出了许多细节信息。 为了确保其正常工作, 您必须要阅读 数据手册。 这些是您想要了解的寄存器。 显然,我们必须启用 接收器和发送器。 这是波特率。 我们要在这里设置波特率。 这是我们刚才讨论的两个寄存器。 我们将会写入这个寄存器,然后从这个寄存器读取。 这是出现的两个标志位。 当接收缓冲器中存在数据时,接收标志位会被置为 当发送缓冲器为空时,发送标志位会被置为 而且会有相应的使能位 与这些标志位向关联。 同样,请查阅数据手册。 这不是很复杂。 您可以自己看明白。 那么,我将会如何使用该标志位呢? 为了触发中断,我将设置 发送标志位和接收标志位来触发中断。 在 也可以是其中的任一个。 如果是一个接收标志位,我将读取数据 并将其放入 同样,这里有两个软件 一个从接收器收集数据, 另一个从发送器发送数据。 如果发送器处于空闲状态,这也是 中断发生的原因,那么我将会 从 如果 否则,我将会把数据发送出去。 基本上,我都会以这样的方式 在 在中断服务例程内使用 我将会在接收数据上执行放置操作, 并将执行获取操作。 这是两种不同的 一个是发送通道,一个是接收通道。 综上所述,串行通信 是一种非常常见的协议。 也是比较简单的方法之一。 我们采用的是 数据一次发送一位。 这里没有时钟,所以它使用边沿来进行同步。 在实验中,您将使用中断驱动型连接, 因为它允许我们把很多东西连接在 一起。 本课程到这里马上就要结束了。 我们的机器人已经变得非常复杂, 我们需要能够执行各种任务, 我们的软件需要能够只在需要时执行相应任务, 这便是我们使用中断的原因。 波特率是每秒传输的总位数, 换句话说,这是位时间, 波特率等于 带宽是信息传输速率, 在本例中,由于我们拥有八个数据位, 10 波特率的 这是最大带宽。 希望您喜欢本次实验。 它非常简单,但能让您的微控制器 与另一个微控制器通信。 祝您实验愉快。 An internal server error occurred.