串口通信协议

常见的通信接口

本文图片大多选自B站江科大STM32入门教程

1、I2C和SPI的时钟是同步的,接收方可以在时钟信号的指引下进行采样。串口、CAN和USB没有时钟线,是异步通讯,异步通讯需要双方约定一个采样频率,并且要加一些帧头帧尾,进行采样位置的对齐。

2、单端信号:引脚的高低电平都是对GND的电压差,单端信号的双方必须共地(GND连在一起),故表中的前三个还需要有GND脚。USB有的是单端信号。

3、差分信号:差分信号是用两根线之间的电压差要表示输出信号的高低,差分信号的抗干扰能力强,传输距离远。

4、点对点:一般是两个设备之间进行通讯。

串口通信简介

串口通信的硬件电路

串口通讯的电平标准

1、单片机直接产生的就是TTL电平信号。

2、使用RS485电平标准,通信距离可以达到上千米,而TTL电平和RS232电平只能传几十米。

3、以上三种电平标准都是串口常用的电平标准,都属于串口,串口一般使用异步通信。

4、硬件方面:需要其他的电平加电平转换模块就可以了。软件程序方面:以上三种电平的软件程序一样。

串口参数及时序

起始位:起始位为低电平。空闲状态是高电平,当电平为低时,设备就要开始接收数据了。

停止位:停止位为高电平,为下一个起始位做准备。

校验位:奇/偶校验,保证1的个数为奇数或者偶数。

奇偶校验只能在一定程度能检测出错误,如果两位都发生改变,奇偶校验就检测不出错误了。

CRC校验是一种校验能力较强的校验方式。

停止位:停止位的宽度可以设置(如下图)。

串口通讯的STM32外设与软件模拟

串口外设

STM32有串口外设可以自动发送和接收数据。STM串口外设的作用:按照串口协议来产生和接收高低电平信号,实现串口通信。

串口转TTL:可以将串口协议转为USB协议(用CH340G芯片),一头接电脑,一头接支持串口协议的芯片,能实现串口和电脑的通信了。

软件模拟

发送:定时(使用定时器,定时时间由波特率决定)写GPIO。

接收:定时读GPIO,接收的时候需要一个外部中断,检测到下降沿就开始定时采样数据。

串口协议总结

TX引脚输出定时翻转的高低电平,RX引脚定时读取引脚的高低电平,每个字节的数据加上起始位、停止位,可选的校验位,打包成数据帧,依次输出在TX引脚,另一端RX引脚依次接收,这样就完成了字节数据的传递。

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

S是同步的意思,UART就是通用异步收发器,串口大多数是异步的。串口很少使用这个同步功能,STM32的USART同步模式,多了一个时钟输出,只支持时钟输出不支持输入,更多是为了兼容其他协议或特殊用途而设计的,并不支持两个USART进行同步通信。

其他协议:加了时钟之后和SPI协议特别像,有了时钟输出的串口就可以兼容SPI协议。

特殊用途:这个时钟可以做自适应波特率:接收设备不确定发送设备给什么波特率,就可以测量一下这个时钟的周期,计算得到波特率。

STM32串口外设发送/接收数据的详细过程

STM32串口外设框图

串口发送数据

硬件检测发送移位寄存器是否有数据在移位,没有移位时数据由发送数据寄存器移到发送移位寄存器,会置一个TXE(发送寄存器空)的标志位,判断这个标志位就可以知道是不是可以写下一个数据到TDR。TXE位置1时,数据其实还没有发送出去(数据还要一位一位移出去)。对数据寄存器进行写操作会对该标志位TXE清零。

串口接收数据

在接收控制器的控制下,一位一位移入接收移位寄存器,移完一帧数据,数据就会统一转运到接收数据寄存器,转移的同时,置一个RXNE(接收数据寄存器非空)的标志位,检查该标志位就可以知道是不是收到数据了,该标志位也可以申请中断。对数据寄存器进行读操作会对该标志位(RXNE)清零。

串口外设的硬件流控制设计

硬件流控制:防止数据发送过快导致接收数据不正确的设计。

nRTS:输出有个能不能接收数据的反馈信号,如果可以接收就向发送方的CTS发送低电平表示可以接收,请求对方发送。n表示低电平有效。如果此时STM32接收不过来就会发送高电平表示不能接收对方接收到之后,就会暂停发送,STM32用串口发送数据对方接收时也是同理。

USART的基本结构

发送寄存器每移位一次,同步时钟电平就跳变一个周期,指导外部接收。

STM32串口外设对串口数据采样

如果有噪声干扰,按照2:1的规则取数据,且噪声标志位NE置1。

串口外设波特率的设定

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值