【STM32】USART串口协议

1 通信接口

通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统

通信协议:制定通信的规则,通信双方按照协议规则进行数据收发

USRT:TX是数据发送引脚,RX是数据接受引脚;

I2C:SCL是(Serial clock)时钟,SDA(Serial Data)是数据;

SPI:SCLK是时钟(Serial Clock),MOSI(Master output Slave Input)主机输出数据脚,MISO(Master intput Slave output)主机输入数据脚,CS(chip select) 片选:用于指定通信对象;

CAN通信:引脚CAN_H、CAN_L,用两个引脚表示差分数据;

USP通信:引脚是DP(Data positive)和DM(Data Minus)(D+/D-),也是差分数据脚。

全双工:同时双向通信,一般有两根通信线(一根发,一根收);

I2C和SPI有单独时钟线,所以它们是同步的,接收方可以在时钟信号的指引下进行采样。

USART、I2C、SPI都是单端电平,即它们引脚的高低电平都是对GND的电压差,还需要GND

CAN和USB是差分信号,它是靠两个差分引脚的电压差来传输信号的,不需要GND。提高抗干扰特性

1.1 串口通信

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信

单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力

USB转串口模块:把串口协议转换成USB协议

陀螺仪传感器模块、蓝牙串口模块

1.2 硬件电路

简单双向串口通信有两根通信线(发送端TX和接收端RX)

TX与RX要交叉连接

当只需单向的数据传输时,可以只接一根通信线

当电平标准不一致时,需要加电平转换芯片

1.3 电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种;

TTL电平:+3.3V或+5V表示1,0V表示0

RS232电平:-3~-15V表示1,+3~+15V表示0

RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

1.4 串口参数及时序

波特率:串口通信的速率(Band、比特率)

波特率是1000bps,表示1m发送1000位,每一位的时间就是1ms

起始位:标志一个数据帧的开始,固定为低电平

串口的空闲状态是高电平,打破高电平

数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行

校验位:用于数据验证,根据数据位计算得来(奇偶校验)

停止位:用于数据帧间隔,固定为高电平

发送0xf的电平

串口中,每一行字节都装在一个数据帧里,每个数据帧由起始位、数据位、停止位组成的;第二张图多了校验位。

1.5 串口时序

发送0x55,无校验,波特率是9600,一位的时间是1/9600 = 104us

低位先行(0101 0101)-》(1010 1010)

发送0xAA,无校验,波特率是9600,一位的时间是1/9600 = 104us

低位先行(1010 1010)-》(0101 0101)

下面同理

发送0x55,无校验,波特率是4800,一位的时间是1/4800 = 208us

低位先行(0101 0101)-》(1010 1010)

发送0x55,加了偶校验,波特率是4800,一位的时间是1/4800 = 208us

**低位先行(0101 0101)-》(1010 1010),**不用增加1

停止位也是可以设置的

上图的停止位是一位,下图的停止位是两位。

2 USART简介

US ART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器

USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里

自带波特率发生器,最高达4.5Mbits/s

可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)

可选校验位(无校验/奇校验/偶校验)

支持同步模式、硬件流控制、DMA、智能卡、IrDA、LIN

STM32F103C8T6 USART资源: USART1(APB2)、 USART2(APB1)、 USART3(APB1)

2.1 USART框图

先忽略寄存器,看引脚部分。左上角有TX和RX,就是发送和接收引脚,后面几个暂时不用管。

右上角是发送数据寄存器和接收数据寄存器,这两个寄存器占用同一个地址。

TDR是只写的,数据写到TDR中;RDR是只读的,数据从RDR读出。

发送移位寄存器的作用是:把一个字节的数据一位一位地移出去,正好对应串口协议的波形数据位。

工作方式:例如某时刻给TDR写入0x55这个数据,在寄存器里存储是0101 0101,此时硬件检测写入了数据,就会检查当前移位寄存器是不是有数据正在移位,如果没有,这个0101 0101就会立刻全部移动到发送移位寄存器,准备发送;当数据从TDR移动到移位寄存器时,会置一个标志位TXE,发送寄存器空,检查这个标志位如果置1了,就可以在TDR写入下一个数据了。当TXE置1时,数据其实没有发送出去,只要数据从TDR转移到发送移位寄存器了,TXE就会置1,就可以重新写入数据了。

然后发送移位寄存器就会在下面这里的发生控制器的驱动下,向右移位,然后一位一位的把数据输出到TX引脚,这里实现向右移位的,所以正好和串口通信规定的低位先行是一致的。当数据移位完成后,新的数据就会再次自动的从TDR转移到发送移位寄存器里来;如果当前移位还没有完成,TDR的数据就会进行等待,一旦移位完成,就会立刻转移过来。有了TDR和移位寄存器的双重缓存,可以保证连续发送数据的时候,数据帧之间不会有空闲。简单来说,数据一旦从TDR转移到移位寄存器了,不管有没有完成,就立刻把下一个数据放在TDR等着,一旦移完了,新的数据就会立刻跟上。

接收端类似的。数据从RX引脚通向接收移位寄存器,在接收器控制驱动下,一位一位的读取RX电平,先放在最高位,然后向右移,移位8次之后,就能接收一个字节了,低位先行,所以接收移位寄存器是从高位往低位这个方向移动的,之后当一个字节移位完成后,这一个字节的数据就会整体的一下子转移到接收数据移位寄存器RDR里,在转移的过程中也会置一个标志位RXNE(TX Not Empty,接收数据寄存器非空),当检测到RXNE置1后,就可以把数据读走了,同样,这里也是两个寄存器进行缓存,当数据从移位寄存器转移到RDR时,就可以直接接收下一位帧数据了,这就是USART的整个工作流程。

下面是发送器控制,用来控制发送移位寄存器工作的,接收器控制是控制接收移位寄存器工作的。

左边有硬件数据流控,如果发送设备发送的太快,接收设备来不及处理,就会出现数据覆盖丢失的现象,有了流控,可以避免这个问题。两个引脚,nRTS和nCTS,nRTS是请求发送,是输出脚(能不能接收);nCTS是清除发送,是输入脚(接收信号),n是低电平有效。(TX和CTS是一对,RX和RTX是一对)。

右边是用于产生同步的时钟信号。

相关推荐
lantiandianzi1 小时前
基于单片机的多功能跑步机控制系统
单片机·嵌入式硬件
文弱书生6561 小时前
输出比较简介
stm32
哔哥哔特商务网1 小时前
高集成的MCU方案已成电机应用趋势?
单片机·嵌入式硬件
跟着杰哥学嵌入式1 小时前
单片机进阶硬件部分_day2_项目实践
单片机·嵌入式硬件
电子科技圈2 小时前
IAR与鸿轩科技共同推进汽车未来
科技·嵌入式硬件·mcu·汽车
东芝、铠侠总代136100683933 小时前
浅谈TLP184小型平面光耦
单片机·嵌入式硬件·物联网·平面
lantiandianzi3 小时前
基于单片机中医药柜管理系统的设计
单片机·嵌入式硬件
嵌入式知识大讲堂3 小时前
HDMI数据传输三种使用场景
单片机
黑客呀4 小时前
[系统安全]Rootkit基础
stm32·单片机·系统安全
小A1594 小时前
STM32完全学习——使用SysTick精确延时(阻塞式)
stm32·嵌入式硬件·学习