本文使用的是 HAL 库。
前言
一、同步,异步传输
举个生活中的例子:
- 同步:朋友打电话说到我家吃饭,我在家里等他们。
- 异步:朋友没有提前打招呼,突然就到我家来了。
-
同步传输:
同步传输要涉及两个信号:时钟信号(用来通知对方要读取数据了),数据信号(用来传输数据)。
-
异步传输:
异步传输没有时钟线,只 需要数据线 ,但是双方需要遵守相同的约定:起始信号的标志(例如 一个9ms的低电平,4.5ms的高电平),数据的表示方式(什么是表示裸机0,裸机1)。
区别: 同步传输抗干扰能力强,需要2条数据线(时钟线,数据线)。异步传输抗干扰能力弱,只需要数据线。
二,单工 / 半双工 / 全双工
- 单工:数据只能在一个方向上传输的通信方式。要么做发送设备,要么做接收设备 -----> 广播,收音机
- 半双工:数据能够在两个方向上传输,但不能同时进行。在同一时间段内,通信双方只能执行发送或接收操作,不能同时进行。-----> 对讲机
- 全双工:数据能够同时在两个方向上传输的通信方式。在全双工通信中,通信双方可以同时进行发送和接收操作。可以收、可以发,并且可以同时进行数据收发 ----> 电话
三、UART串口协议
-
连接方式:
UART 采用 全双工(发送,接收采用不同的引脚) 的通信方式,只需要三根线:TXD 用来发送数据, RXD 用来接收数据, GND 设备接地(提供参考电平)。串口通信协议 没有时钟线,是 异步传输。
- 串口的配置信息
先发送低位,再发送高位
。一个起始位,8个数据位,一个校验位,一个停止位。
- 波特率:单位 bit / s, 表示一秒钟传输的数据位数。波特率是 115200 表示,一秒钟可以传输 115200 bits数据。
- 数据位: 实际的数据部分,根据串口通信的配置可以是 5,6,7或 8位。
- 校验位:用于检测数据位传输过程中是否出现了错误。可以是 奇校验(奇数个高电平),偶校验(偶数个高电平)。
- 停止位:一帧数据传输结束的标志。
四、硬件结构,寄存器分析
USART 方框图分析 :
-
USART_BRR : 波特率寄存器, 用于控制数据发送,接收的速率。(波特率:每秒钟传输的位数,单位:bits/s)
-
USART_TDR : 发送数据寄存器。数据写入 TDR 中后,会放入移位寄存器 Shift Reg 中。
-
USART_RDR : 接收数据寄存器。数据会从 移位寄存器 Shift Reg 中放入 RDR 中进行读取出来。
-
Shift Regisiter : 移位寄存器,将数据 一位一位的 发送出去,或者读取进来。
-
USART_SR : 状态寄存器。用于监控和控制 USART 模块的状态。
- TXE(Transmit Data Register Empty):
这个标志位指示 USART 发送数据寄存器(USART_DR)是空的,可以写入新的数据进行发送。当发送缓冲区为空并且准备好接收新的数据时,此标志位被置位。
- RXNE(Receive Data Register Not Empty):
这个标志位指示 USART 接收数据寄存器(USART_DR)中有可用的接收数据。当接收缓冲区中有新的数据可供读取时,此标志位被置位。
- TC(Transmission Complete):
这个标志位指示 USART 发送操作已完成。当最后一个数据位从发送寄存器传输到发送线路并成功发送时,此标志位被置位。
数据的读写依靠 USART的相关寄存器来运行。
例如:
写数据:
将数据 val 写入 发送数据 TDR 寄存器 ,TDR寄存器中的值就会自动放入 移位 shift Reg 寄存器中,然后就会 逐位 发送出去。
写数据时先判断 状态寄存器 SR 的 TDR,再写数据。
读数据时先判断 状态寄存器 SR 的 RXNE,再读数据。
补充:
对于这个开发板没有涉及 FIFO 寄存器,这里给大家介绍一下 FIFO 寄存器。
FIFO 寄存器用于临时存储数据。
例如:在接收数据中,当接收到数据后 无法立刻读取,如果没有 FIFO 下一次的数据会将这次的覆盖;如果存在 FIFO,则未读取的数据将会存放在 FIFO 临时存储寄存器中。
总结
下篇文章为大家介绍 SPI 协议。