CAST电子部单片机方向授课——串口通信 预习文档

1|0CAST电子部单片机方向授课——串口通信 预习文档

1|1课前小准备

1|0安装串口调试助手

第一步:进入Microsoft Store

第二步:在Microsoft Store中搜索 “串口调试助手”
image

第三步:点击获取,按要求安装即可

下载完成后,桌面上可能没有快捷方式,需要在win里搜索一下,然后拖到桌面上。
image

注:其他安装方法都可以,反正就是正常安装步骤,没什么特殊的。

1|2知识预备

有关通信的一些知识:

说白了,通信其实就是一堆01的组合,不同的01序列表示不同涵义。

通信可以用以下的框图概括
image

1|0并/串行通信

1|0并行通信

定义:利用多条传输线将一个数据的各位同时传送。
传输方式:传输一个字节(8个位)的数据时,并口是将8个位一字排开,分别在8条连接线上同时传输。
特点:传输速度块,适用于短距离通信。

image

1|0串行通信

定义:利用一条传输线将数据一位位地顺序传送。
传输方式:传输一个字节(8个位)的数据时,串口是将8个位排好队,逐个地在1条连接线上传输。
特点:通信线路简单,利用电话或电报线就可以实现通信,降低成本,适用于远距离通信,但传输速度慢。

一般来说,串行通信更加普遍实用。

image

1|0串行通信的通信方向

1|0单工

定义:数据只能在一个方向上传输,通信双方数据只能由一方传输到另一方
image

1|0半双工

定义:数据可以错时双向传输,通信双方数据可以支持两个方向传输,但是同一时间只能由一方传输到另外一方。
image

1|0全双工

定义:数据可以同时双向传输,通信双方数据可以同时进行双向传输,对于其中一个设备来说,设备需要支持发送数据时可以进行数据接收。
image

1|0串行通信的通信方式

1|0异步通信

异步通信就是通信双方之间可以在任意时刻发送数据。比如说qq,同学A准备给同学B发送消息1,同学B一直在等待接收;同学A敲下回车键,开始发送;同学B一接受到消息1,就将消息1存进自己的电脑里,完成消息接收。

更specifically的说法:

异步通信是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。

1|0同步通信

同步通信就是通信双方之间有一个时间信号约束。比如说,同学A想给同学B发送消息2,同学A在不发送消息的时候,一直举着手(表示现在不发送消息);当同学A放下手(表示消息开始发送),同学B急忙接收消息,然后将消息存储起来;当同学A消息发送完成后,同学A举手,同学B停止接收,这样就完成了一轮消息接收。在这个例子里,时钟信号就是同学A的手有没有举。

更specifically的说法:

同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。

采用同步通信时,将许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。在同步传输过程中,一个字符可以对应5~8位。当然,对同一个传输过程,所有字符对应同样的数位,比如说n位。这样,传输时,按每n位划分为一个时间片,发送端在一个时间片中发送一个字符,接收端则在一个时间片中接收一个字符。

同步传输时,一个信息帧中包含许多字符,每个信息帧用同步字符作为开始,一般将同步字符和空字符用同一个代码。在整个系统中,由一个统一的时钟控制发送端的发送和空字符用同一个代码。接收端当然是应该能识别同步字符的,当检测到有一串数位和同步字符相匹配时,就认为开始一个信息帧,于是,把此后的数位作为实际传输信息来处理。

1|0串口通信(UART:Universal Asynchronous Receiver/Transmitter)

1|0什么是通信协议?

所谓通信协议,就是双方实体完成通信或服务所必须遵循的规则和约定。比如说:同学A给同学B发送消息,需要举左手;同学C给同学D发消息,需要举右手;那么举的是左手还是右手,就是两边通信协议的差别之一。

1|0串口通信简介

UART串口通信,是一种串行、异步、全双工的通信协议。在STM32单片机中,串口通信只需要两根线,RX和TX(除了VCC和GND)。RX就是接收线(Recieve);TX就是发送线(Transmit);在单独一条线上,只能进行单向发送。在UART通信协议中,高电平表示 ‘1’,低电平表示 ‘0’ 。UART的特点是:通信线路简单,只要一对传输线就可以实现双向通信,大大降低了成本,但传送速度较慢。

1|0通信过程

在通信前,我们需要将线缆正确连接。一般来说,我们用单片机的TX连接另一个模块/单片机的RX,RX连接TX(就是发送端口连接接收端口)。在其中一条线上(比如单片机的TX——模块的RX这条线),通信是这样进行的:

在单片机没有消息发送给模块的时候,线缆上一直为高电平,表示没有消息发送;当单片机要给模块发送消息时,单片机将线缆上电平拉低,变为低电平;经过一个信号周期后(就是传输一位数据,两个信号周期就是两位数据),单片机开始进行数据位的发送,这个数据可以是5,6,7,8,9位的二进制数,传输的方法就是让线缆上的电平发生跳变(比如说传输一位数据 ‘1’,就是将线缆上电平变为高电平,然后持续一个信号周期......);当单片机发送完数据位后,模块可能需要检验刚刚接收到的数据是否正确,于是会有一个校验位的传输:单片机会给模块传输01位的奇偶校验位(后面会说),然后模块会通过这01位的数据来检验刚刚传输的数据是否正确;最后,单片机给模块传输1~2位的停止位,表示数据传输完成;停止位发送完毕后,单片机将电平拉高,表明线缆上无信号传输,一轮数据传输完成。

image

1|0数据协议

波特率 (baud rate):表示传输数据的速度,单位为bps。比如说某串口通信波特率为9600bps,那么在该通信中传输一位二进制数据所需要的时间就是1/9600 = 104.2us。

空闲位:空闲状态里信号线的电平。通过上述例子可以看出,UART的空闲位是高电平1 。

起始位:通信中发送方发送起始位,表示数据即将开始传输。比如在串口通信中,我们以一位数据 ‘0’ 为标志(其实是空闲位’1‘到起始位’0‘的跳变),表示数据马上开始传输。

数据位:表示传输的二进制数据。数据可以是5,6,7,8,9位二进制数据,但一般都是8位(一个字节)。发送过程中,从发送数据的最低位(LSB)开始发送(即小端模式)。

奇偶校验位:数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式:
1.无校验(no parity)
2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。
3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。
4.mark parity:校验位始终为1
5.space parity:校验位始终为0
停止位:数据结束标志,可以是1位,1.5位,2位的高电平。

1|0串口通信的代码实现

  1. 进入cubeMX,新建F401工程,然后进行SystemCore中RCC和SYS的配置,以及ClockConfiguration中时钟树的配置,完成如下界面(不详细演示了,大家应该都很熟练了,不记得的可以翻第一次授课的ppt,后面有。)

image

image

image

  1. 选择左栏的Connectivity,选择USART1,在Mode里选择Asynchronous,其余默认,如下图

image

  1. 进行Project Manager里的配置,同见第一次授课的ppt

image

image

  1. Generate Code,进入keil工程,进入榔头界面,修改工程属性(也不详细演示了,第一次授课ppt也有,修改结果参照下图)

image

image

image

  1. 在main.c中添加如下代码

image

  1. 把烧录器和单片机四个烧录引脚连接起来(连接方法见第一次授课ppt,GND-GND, SCK-SWCLK, DIO-SWDIO, VCC-VREF);然后将烧录器上的TX引脚连接单片机的A10引脚,RX连接A9(就是TX-RX, RX-TX);然后将代码烧录进单片机中。

image

  1. 打开串口调试助手,设置如下图(只要改波特率和串口号),然后点击 “打开串口”

image

  1. 按下CAST学习板上的RESET按键,就可以看到串口调试助手软件上显示的信息啦~

image


__EOF__

本文作者Asaka
本文链接https://www.cnblogs.com/Asaka-QianXiang/p/17817144.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Akasa  阅读(226)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示