前面学习了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驱动安装:
串口助手软件使用: