Serial Communication

串口通信,一种发送消息的通信方式。

串,指的是发数据的方式:一位一位串行发,并行是可能有多路通道,每路同时发一个数据,多路同时到达。

串口通信有单工 Simplex,半双工 Half Duplex,全双工 Full Duplex。

两种传输方式:同步 Synchronous,共用一个时钟;异步 Asynchronous,有各自的时钟。

同步很简单,发送方接收方比如都规定时钟信号下降沿收发。

EBU5476 Microprocessor System Design 知识点总结_6 Serial Communication-LMLPHP

异步:需要通过异步通讯协议 Asynchronous Comm. Protocol 来协调。

EBU5476 Microprocessor System Design 知识点总结_6 Serial Communication-LMLPHP

1位起始位标志开始传输,7/8/9位数据位,1位可选奇偶校验位,1位停止位。

RT两方需要有相同的波特率。

当然这只是最简单的串口通信因为只有双方。如果更多方通信我们需要校验地址来判断是哪个发给哪个;数据需要更复杂的校验方式。

异步通信不需要同步时钟之类电路,开销小,但是开发起来难度大一些因为需要起始结束位啥的。

RS232

异步通信,Reversed Polarity 标准电压(-315是0.还有一些其他标准比如TTL是+5为1,-5为0.)

发送数据有两种类型,ascii码和二进制,都得转化为二进制传输。

uart

针对stm32f401.

全双工异步串口。

为了处理RT缓冲数据(因为发收数据需要时间)我们可以通过缓冲区数组,头指针表示已经发到的位置,尾指针表示要发的数据的结尾。增加新数据,尾指针++;发一个数据,头指针++直到碰到尾。

原来发送方一直是发高电平,start frame 起始帧是1帧低电平来表示开始发数据了。

如何判断是1帧低电平?通过在这一帧里多次采样判断是不是真的是一帧低电平。

为什么多次采样?因为异步两个信号有一定的偏移,多次采样准,能确定是不是真的一整帧都低电平。

采样是有一定采样率的,不是说真的能像模拟信号一样一直采。

采样率 oversampling=16: 这个是最大可以达到的采样频率而不是真的一帧采了16次。

EBU5476 Microprocessor System Design 知识点总结_6 Serial Communication-LMLPHP

接收方首先第一次检测到0位,开始怀疑:有可能是串口有消息。这是start frame的第一次采样。

然后每隔一帧检测一次,3 5 7检测3次,如果2个都是0,说明确实有可能。

然后连着检测8910,如果还是2个0,说明确实是start frame。

EBU5476 Microprocessor System Design 知识点总结_6 Serial Communication-LMLPHP

8采样率因为采样间隔长了,更容易碰到左右边界的高电平,所以容错率低。但是速度更快。

计算

波特率计算:

T x / R x ( b a u d ) = f P C L K 8 ∗ ( 2 − O V E R 8 ) ∗ U S A R T D I V T_x/R_x(baud)=\frac{f_{PCLK}}{8*(2-OVER8)*USARTDIV} Tx/Rx(baud)=8(2OVER8)USARTDIVfPCLK

OVER8是过采样率,fPCLK是时钟频率。

USARTDIV是一个浮点数

USARTDIV浮点数怎么存储?通过算法转化为十六进制。

EBU5476 Microprocessor System Design 知识点总结_6 Serial Communication-LMLPHP

小数部分用一个16进制位表示,比如例1是C也就是12,转换后即为12/16也就是0.75.

例2转换为一位16进制,就是0.62*16约等于10也就是A。

整数部分直接转换十六进制即可,例2的25转为19,例1的27转为1B。

然后整数小数部分拼接起来(最多3个整数位,1个小数位,32位寄存器)。

06-15 06:28