嵌入式系统中的串口通信

目录

 1、通信的基本概念

1.1 串行通信

1.2  并行通信 

2、串行通信的特点

2.1 单工

2.2 半双工

2.3 全双工 

3、串口在STM32的引脚 

4、STM32的串口的接线 

4.1  STM32的串口1和电脑通信的接线方式

4.2  单片机和具备串口的设备连接图

5、串口通信协议

6、串口通信速率

7、串口代码编写

7.1  开启GPIOA/USART1的时钟电源

7.2  将PA9和PA10设置为复用模式

 7.3 设置USART1相关参数

7.3.1 波特率

7.3.2 使能发送接收功能 

7.3.3 使能USART1进行工作 

7.3.4 编写发送接收数据函数 


前面学习了I/O引脚的三种模式的输入模式和输出模式,还有复用功能模式没有学习到,那么我这个章节的串口就是使用I/O引脚的复用功能模式。

输入功能模式:—按键

输入浮空:空闲状态(默认状态)的电平不确定,由外部电路决定

输入上拉:默认状态为高电平

输入下拉:默认状态为低电平

模拟输入:捕捉外部输入的高/低电平模拟信号

输出功能模式:—–LED&beep

开漏输出:只能输出低电平

推挽式输出:可以输出高低电平

复用功能模式:—-串口

推挽式输出复用功能:片上外设可以输出高低电平,数据不会丢失

开漏输出复用功能:片上外设只能输出低电平,数据会丢失

 1、通信的基本概念

通信???

计算机与外部的设备进行数据信息交换(发送和接收)称为通信

按数据的交换传播介质方式,可将通信分为并行和串行通信

1.1 串行通信

所传送数据的各位按顺序一位一位地发送或接收。

优缺点:接线简单,灵活,缺点速度慢

 

 

1.2  并行通信 

所传送数据的各位同时发送或接收。一般数据线为8或16/24

 

 优缺点:速度快,缺点占用引脚资源多

2、串行通信的特点

串口是属于什么通信方式呢???串行通信

串行通信的方式:

有两根数据线,按数据线的工作模式可分为:单工、半双工、全双工

2.1 单工

数据在甲机和乙机之间只允许单方向传送。两机之间只需 1 条数据线

 典型例子:遥控器

2.2 半双工

数据在甲机和乙机之间允许双方向传送,但只能分时复用,因而两机之间只需 1 条数据线

典型例子:对讲机

2.3 全双工 

甲、 乙两机之间数据的发送和接收可以同时进行, 全双工形式的串行通信必须使用 2 条数据线

典型例子:数据线、手机通信

3、串口在STM32的引脚 

串口的引脚在stm32中的引脚:STM32的串口有很多个,如下图

 

4、STM32的串口的接线 

目标:我们现在只学习使用stm32f103r8t6的串口1(USART1)和电脑进行简单的数据通信

4.1  STM32的串口1和电脑通信的接线方式

 

4.2  单片机和具备串口的设备连接图

串口1的代码编写:USART1-TX:PA9      USART1-RX:PA10

每一个引脚都支持三种模式:输出模式、输入模式、复用模式

PA9:输出模式、输入模式、复用模式

PA10:输出模式、输入模式、复用模式

5、串口通信协议

 

串口通信协议:

起始位: 1bit

数据位: 8bit

停止位: 1bit

1+8+1=10bit

每传输一个字节数据,必须由10个位构成

6、串口通信速率

概念:发送数据的速度:

传送速率是指数据传送的速度。用 b/s 或 bps( 比特/秒)表示, 称为比特率。 在二进制的情况下, 比特率与波特率数值相等, 因而在单片机的串行通信中, 常称为波特率。

40GB高速流量,超了40GB高速流量之后下降为1Mbps—》1M/8=128KB

常用的串口波特率:9600/S     115200/S

比如9600表示串口1秒钟传输9600个比特位等价于串口传输多少字节???

9600/10 = 960 byte/s

7、串口代码编写

7.1  开启GPIOA/USART1的时钟电源

 

7.2  将PA9和PA10设置为复用模式

 

 

 7.3 设置USART1相关参数

7.3.1 波特率

 

假设你要设置波特率为9600,那么你要写入BRR的值计算如下:

72Mhz=72000000hz  

72000000/9600/16=468.75你要写入BRR的值

468.75

 

7.3.2 使能发送接收功能 

 

 

 1位起始位,8位数据位/1位停止位都已经默认了,所有不用写代码控制

 

7.3.3 使能USART1进行工作 

 

7.3.4 编写发送接收数据函数 

串口1发送和接收数据的原理:

 

原理总结:

发送数据之前,必须等待发送数据寄存器为空,才可以发送数据

读数据之前,必须等待接收数据寄存器不为空,才可以读取数据

怎么知道发送数据什么时候为空,接收数据寄存器什么时候不为空呢???

通过SR状态寄存器,里面记录着串口1的状态

发送数据之前,要判断并等待SR寄存器的位7/6的值为1,才可以发送数据

 

 

 

 

读数据之前,要判断并等待SR寄存器的位5的值为1,才可以读取数据

 

 下载代码。进行数据的发送和接收验证

 CH340驱动安装:

 串口助手软件使用:

 

物联沃分享整理
物联沃-IOTWORD物联网 » 嵌入式系统中的串口通信

发表评论