什么是通讯
在计算机的设备于设备之间或者集成电路之间进行数据传输就叫做通讯
1.串行和并行通讯
串行通讯
概念:一次发送一个数据,只需要一根线
通讯协议:USART,I2C,SPI
特点:通讯距离远,抗干扰能力强,传输速率慢,成本低
并行通讯
概念:一次发送多个数据,需要多根线
通讯协议:SDIO(四位),FSMC(16位),W5500(16位),W5100(位)
特点:通讯距离近,抗干扰能力弱,传输速率快,成本高
2. 数据通讯方向
全双工 | 可同时收发数据 |
---|---|
半双工 | 不可同时收发数据,可分时收发数据 |
半双工 | 任何时刻都只能往某一固定方向传输数据 |
3.同步和异步
同步 | 同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。 |
---|---|
异步 | 异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。 |
4.通讯的速率
Bitrate——比特率:每秒钟传输的二进制位数,单位为比特每秒(bit/s)。
Baudrate——波特率:表示每秒传输的码元个数。
当一个二进制表示一个码元时:
0V | 0 |
---|---|
3.3V | 1 |
当两个二进制表示一个码元时: | |
0 V | 00 |
– | – |
2V | 01 |
4V | 10 |
6V | 11 |
5.串口通讯协议
物理层
规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。也就是硬件部分
协议层:
协议层主要规定通讯逻辑,同一收发双方的数据打包、解包标准。其实就是软件部分
串口通讯协议简介
物理层
串口 | 信号表示 | 主要用途 | 电平转换芯片 | 接口 |
---|---|---|---|---|
TTL | 0V表示0,3.3V—5V表示1 | 原生串口通讯主要是控制器跟串口的设备或者传感器通讯,不需要转换电平。GPS模块、GSM模块、串口转WIFI模块、HCO4模块 | 用杜邦线连接即可 | |
RS232 | +15V表示0,-15V表示1 | 主要用于工业设备直接通讯 | MAX3232、SP3232 | DB9 |
USB | – | 设备与电脑通信 | CH340、PL2303、CP2102、FT232 | USB |
协议层
串口数据包的基本组成
起始位:由一个逻辑0的数据位表示
结束位:由0.5、1、1.5或2个逻辑1的数据位表示
有效位:在起始位后紧接着的就是有效数据,有效数据的长度常被约定为5、6、7、8位长
校验位:可选,为的是数据的抗干扰性
奇校验(odd) | 有效数据和校验位中”1“的个数为奇数 |
---|---|
偶校验(even) | 有效数据和校验位中”1“的个数为偶数 |
零校验(space) | 不管有效数据中的内容是什么,校验位总为”0“ |
一校验(mark) | 校验位总为”1“ |
无校验(noparity) | 数据包中不包含校验位 |
USART寄存器
1.通过USART_CR1寄存器上的置为UE来激活USART
2.通过USART_CR1上的M位来定义字长
3.在USART_CR2中编程停止位的位数
4.如果采用多缓冲通信,配置USART_CR3中的DMA使能拉(DMAT)。按多缓冲器通讯中的描述配置DMA寄存器。
5.利用USART_BRR寄存器选择要求的波特率
6.设置USART_CR1中的TE位发送一个空闲帧作为第一次数据的发送。
7.把要发送的数据写进USART_DR寄存器,此动作清除TXE位。在只有一个缓冲器的情况下,对每个待发送的数据重复步骤7
8.在USART_DR寄存器中写入最后一个数据后,要等待TC=1.它表示最后一个数据传输结束。在关闭USART或者进入停机模式之前要确认传输结束,避免破坏最后一次传输。
(1)串口时钟使能
串口作为一个外设,其时钟由外设时钟使能控制寄存器控制,在这里我们使用的串口1是在APB2ENR寄存器的第14位
注意:除了串口 1 的时钟使能在 APB2ENR 寄存器,其他串口的时钟使能位都在 APB1ENR
寄存器, 而 APB2(72M)的频率一般是 APB1(36M)的一倍。
(2)串口复位
一般系统刚开始配置外设的时候,都会先执行复位该外设的操作。可以使外设对应的寄存器恢复到默认配置,方便我们进行配置。串口 1 的复位就是通过配置 APB2RSTR 寄存器的第 14位来实现的。
(3)串口波特率设置
每个串口都有自己的波特率配置寄存器USART_BRR,
(4)串口控制
每个串口都有3个控制寄存器USART_CR1~3,串口的很多配置都是通过这三个寄存器来设置的,串口的CR1寄存器的描述如下图
UE 为串口使能位,通过该位置 1,使能串口。 M 为字长,当该位为 0 的时候设置串口为 8 个字长外加 n个停止位,停止位的个数(n)是根据 USART_CR2 的[13:12]位设置来决定的,默认为 0。 PCE为校验使能位,设置为 0,即禁止校验,否则使能校验。 PS 为校验位选择,设置为 0 为偶校验,否则奇校验。 TXIE 为发送缓冲区空中断使能位,设置该位为 1,当USART_SR 中的 TXE 位为1 时,将产生串口中断。 TCIE 为发送完成中断使能位,设置该位为 1,当 USART_SR 中的 TC位为 1 时,将产生串口中断。 RXNEIE 为接收缓冲区非空中断使能,设置该位为 1,当 USART_SR中的 ORE 或者 RXNE 位为 1 时,将产生串口中断。 TE 为发送使能位, 设置为 1,将开启串口的发送功能。 RE 为接收使能位,用法同 TE。
(5)数据发生与接收
STM32的发送与接收是通过USART_DR来实现的,这是一个双寄存器。包含了TDR和RDR。当向该寄存器写数据的时候,串口就会自动发送,当接收到数据的时候,也是自动存在该寄存器内。
(6)串口状态