学习笔记|串口通信的基础知识|同步/异步|常见的串口软件的参数|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,板子通过串口发送当前温度给电脑。

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

相关推荐
@曲终5 分钟前
C语言学习 12(指针学习1)
c语言·经验分享·笔记·学习
SRC_BLUE_1710 分钟前
[网安靶场] [更新中] UPLOAD LABS —— 靶场笔记合集
笔记
YuanLiu_22712 分钟前
代码随想录算法训练营第十三天(递归遍历;迭代遍历;统一迭代;层序遍历)
java·数据结构·笔记·算法·leetcode
一只小菜鸡..31 分钟前
241126学习日志——[CSDIY] [ByteDance] 后端训练营 [19]
学习
Echo_cy_42 分钟前
STM32 USART串口发送
单片机·嵌入式硬件
Clockwiseee43 分钟前
JS原型、原型链以及原型链污染学习
javascript·学习·原型模式
qq_214782611 小时前
ChatGPT如何辅助academic writing?
人工智能·学习·chatgpt
Octopus20771 小时前
【C++】读取数量不定的输入数据
开发语言·c++·笔记·学习
Lostgreen1 小时前
计算机网络----基本概念
网络·笔记·学习·计算机网络
孤邑1 小时前
【Linux】网络通信
linux·服务器·网络·笔记·学习