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

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

相关推荐
chennalC#c.h.JA Ptho12 分钟前
archlinux 详解系统层面
linux·经验分享·笔记·系统架构·系统安全
海尔辛3 小时前
学习黑客三次握手快速熟悉
网络·学习·tcp/ip
腾飞的信仰4 小时前
51单片机同一个timer 作为定时器和波特率发生器么?
网络·单片机·51单片机
_Jyuan_4 小时前
镜头内常见的马达类型(私人笔记)
经验分享·笔记·数码相机
丰锋ff6 小时前
考研英一学习笔记 2018年
笔记·学习·考研
1296004526 小时前
pytorch基础的学习
人工智能·pytorch·学习
岂是尔等觊觎6 小时前
软件设计师教程——第一章 计算机系统知识(下)
经验分享·笔记·其他
Oll Correct6 小时前
计算机二级WPS Office第三套电子表格
笔记
睡不着还睡不醒7 小时前
【笔记】unsqueeze
笔记
LouSean7 小时前
Unity按钮事件冒泡
经验分享·笔记·学习·unity·游戏引擎