嵌入式 串口通信

简介: 嵌入式 串口通信

前面学习了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驱动安装:

串口助手软件使用:

 


相关文章
|
6月前
|
API 数据格式
嵌入式系统中的串口通信
嵌入式系统中的串口通信
119 0
|
6月前
|
小程序 Linux 芯片
实用的嵌入式 C 程序!建议收藏
实用的嵌入式 C 程序!建议收藏
42 0
|
6月前
|
网络协议 Linux
嵌入式单片机开源的串口示波器实现方法
嵌入式单片机开源的串口示波器实现方法
56 0
|
存储 机器人 芯片
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
嵌入式 STM32 步进电机驱动,干货满满,建议收藏
|
数据格式
嵌入式 STM32 红外遥控
嵌入式 STM32 红外遥控
|
存储
day7嵌入式(2022.1.13)
day7嵌入式(2022.1.13)
|
数据安全/隐私保护 C语言
day12嵌入式(2022.1.18)
day12嵌入式(2022.1.18)
|
Java 编译器 C++
嵌入式C++(六)
嵌入式C++(六)
嵌入式C++(六)
嵌入式c++(八)
嵌入式c++(八)
嵌入式c++(八)