学习笔记|串口通信的基础知识|同步/异步|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础

目录

1.串口通信的基础知识

百度百科:串口通信的概念

什么是通信?

例如U盘和电脑,我们电脑需要往U盘存东西,而U盘上只有四个触点,除去一个电源一个地,只剩下两个引脚了。此时我们坑定不能像点亮LED那样单纯的给他两个引脚上输出个高低电平就能写数据了对吧。总不至于输出一个高电平就能在U盘里写入"STC32位8051单片机就是牛!"这么一句话了吧。
通信指设备之间通过一定的协议进行的信息交换。

每次发送一位数据的称为串行通信,多位(严格来说是2位以上)一起传输的称为并行通信。

今天要讲的串口通信是串行通信的其中的一种!也是1位1位的往外发数据,不是像这个图一样8位一起发。

stc共有4个串口!串口1/2和3/4的主要区别在这里,这节课主要讲异步串口。

串口通信(Serial Communication)

是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。

同步/异步?

异步方式(使用较多):

①以字符为单位传送信息。

②相邻两字符间的间隔是任意长。

③因为一个字符中的比特位长度有限,所以需 要的接收时钟和发送时钟只要相近就可以。

④异步方式特点简单的说就是:字符间异步,字符内部各位同步。

同步方式:

①以数据块为单位传送信息。

②在一个数据块(信息帧)内,字符与字符间无间隔。

③因为一次传输的数据块中包含的数据较多,所以接收时钟与发送进钟严格同步,通常要有同步时钟。

全双工?

常见的串口软件的参数

这里的4个数据发送端和接收段必须严格保持一致。否则接收到的就是乱码。

●波特率?

例如9600的波特率意味着每秒钟可以发9600位的数据。

我们这里起始位就是一个位(一个二进制的一个数0或者1),1bit的变量。中间有8个数据为,然后校验位,停止位。速度9600即每秒最快可以发960个这种包,

●数据位? 有几个2进制位的数据

●校验位?

●停止位?

●传输距离

通信距离很短,如何解决?

以下分别为RS232,RS422,RS485的通信原理图。


串口的逻辑电平只有5V或者3.3V,如果单片机是5V供电,逻辑电平只有5V(高电平),因为电平比较低,传输距离受限,

●串口有什么用

2.STC32的串口通信实现原理

引脚选择:实现分时复用

模式选择


每一种模式的配置参考手册,这里不再复述。这里主要讲串口1的模式1(应用最广泛)。

串口1模式1,模式1波特率计算公式

当软件设置SCON的SMO、SM1为"01"时,串行口1则以模式Ⅰ进行工作。此模式为8位UART格式,一帧信息为10位:1位起始位,8位数据位(低位在先)和1位停止位。波特率可变,即可根据需要进行设置波特率。TxD为数据发送口,RxD为数据接收口,串行口全双工接受/发送。

模式Ⅰ的发送过程:串行通信模式发送时,数据由串行发送端TxD输出。当主机执行一条写SBUF的指令就启动串行通信的发送,写"SBUF"信号还把"1"装入发送移位寄存器的第9位,并通知TX控制单元开始发送。移位寄存器将数据不断右移送TxD端口发送,在数据的左边不断移入"O"作补充。当数据的最高位移到移位寄存器的输出位置,紧跟其后的是第9位"1",在它的左边各位全为"0",这个状态条件,使TX控制单元作最后一次移位输出,然后使允许发送信号"SEND"失效,完成一帧信息的发送,并置位中断请求位TI,即 TI=1,向主机请求中断处理。

模式1的接收过程:当软件置位接收允许标志位.REN,即REN=1时,接收器便对RxD端口的信号进行检测,当检测到RxD端口发送从"1"→"O"的下降沿跳变时就启动接收器准备接收数据,并立即复位波特率发生器的接收计数器,将IFFH装入移位寄存器。接收的数据从接收移位寄存器的右边移入,已装入的IFFH向左边移出,当起始位"0O"移到移位寄存器的最左边时,使RX控制器作最后一次移位,完成一帧的接收。若同时满足以下两个条件:

·RI=0;

. SM2=0或接收到的停止位为1。

则接收到的数据有效,实现装载入SBUF,停止位进入RB8,RI标志位被置l,向主机请求中断,若上述两条件不能同时满足,则接收到的数据作废并丢失,无论条件满足与否,接收器重又检测RxD端口上的"1"→"0"的跳变,继续下一帧的接收。接收有效,在响应中断后,RI标志位必须由软件清0。通常情况下,串行通信工作于模式1时,SM2设置为"0"。

串口1的波特率是可变的,其波特率可由定时器1或者定时器2产生。当定时器采用IT模式时(12倍速),相应的波特率的速度也会相应提高12倍。

模式2和模式3,大同小异,不深入展开。

3.串口通信代码实现


RXD和TXD接在了P4.6跟P4.7上,使用的是串口2。

编写串口1通信程序

打开手册15.5 范例程序

15.5.4 串口2使用定时器2做波特率发生器

新建工程16.串口2通信

复制"15.NTC温度采集"工程为"16.串口2通信",HARDWARE目录中新建usart子目录,并将usart文件夹加入include,新建usart2.c和usart2.h,:

插入头文件模板,并修改。

先编写初始化函数声明:void Usart2_Init(void);,入口参数肯定是无。函数实现:

测试

总结

1.学会串口的一专业名词。

2.学会串口的配置和使用(也可以去学习一下试验箱代码, 里面的代码非常全面)

课后练习:

1.串口发送字符Ax\r\n,(x表示0-7)板子点亮对应LED

2.串口发送Bxxxx\r\n,xxxx表示一个四位数,四位数码管显示这个4位数

2.串口发送Z\r\n,板子给电脑发送"Hello STC";

3.串口发送字符Cx\r\n,(x表示0-1)板子打开/关闭蜂鸣

4.串口发送字符Dx\r\n,板子通过串口发送当前温度给电脑。

能独立做出这个实验的话,说明你已经快出师了。

相关推荐
liangbm339 分钟前
数学建模笔记——动态规划
笔记·python·算法·数学建模·动态规划·背包问题·优化问题
潮汐退涨月冷风霜44 分钟前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
羊小猪~~1 小时前
深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
人工智能·python·深度学习·学习·算法·机器学习·cnn
Charles Ray2 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码2 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
我要吐泡泡了哦3 小时前
GAMES104:15 游戏引擎的玩法系统基础-学习笔记
笔记·学习·游戏引擎
骑鱼过海的猫1233 小时前
【tomcat】tomcat学习笔记
笔记·学习·tomcat
贾saisai5 小时前
Xilinx系FPGA学习笔记(九)DDR3学习
笔记·学习·fpga开发
北岛寒沫5 小时前
JavaScript(JS)学习笔记 1(简单介绍 注释和输入输出语句 变量 数据类型 运算符 流程控制 数组)
javascript·笔记·学习