STM32串口通信(理论部分)B站江科大

   通信协议

  在我们的硬件当中存在许许多多的通信协议,有了通信协议stm32的内部也就可以和各个外设进行数据的传送和通信了。

通信协议的种类:

那么这个表应该怎么看呢?这些参数都是通信协议的特征。

全双工:全双工就是通信双方可以同时相互通信,也就是发送和接收可以同时进行,互不影响,因此,全双工的通信协议都是由两个通信线的。

半双工:半双工就是双方不能够同时进行通信,因为只有一根通信线。

异步:接收发送不是一同进行的异步的特点就是发送方可以任意时刻进行发送数据,接收端也要进行准确的接收,这也就要求了我们的数据需要一些标志来表明这是我要发送的数据。一半异步通信的数据都是以帧为单位进行发送的,每一帧数据包括了帧头帧尾,这样我们的接收就可以准确的接受到我们的数据。

同步:顾名思义就是接收发送一同进行,一同进行就要求我们要有相同的时钟,因此此类的硬件都会有一根时钟线。

单端:单端就是我们的引脚对地的电平

差分:就是我们的引脚之间的电平比较

点对点:这涉及到了两个设备,一个是发送设备,一个是接收设备,两个设备之间直接进行数据交换就可以了

多设备:发送设备会面对多个接收设备,需要一个寻址的过程来确定通信的对象

那么接下来就是本篇的主角了。

串口通信

串口通信的特征符合上面各通信协议的特征,也就是全双工、异步、单端、点对点通信。

串口硬件知识

串口一般有四个引脚,通信需要两根线,一个是TX,一个是RX,这两个分别是发送端与接收端,我们的这两个端口需要交叉进行连接。因为它是单端通信,所以需要有一根GND,上面的VCC当有独立的电源的时候是不需要接的。另外需要注意,当电平标准不一样的时候我们需要加一个电平转换芯片,相同的电平信号才可以进行相互通信。

既然我们提到了电平标准,哪单片机一般都有哪些点评标准呢?

如下图:

串口参数及时序

特别注明:波特率,就是每秒钟发送多少个码元,与比特率区分开,比特率是每秒发送多少位数据。但是在二进制当中,一个码元就是一个比特,因此,如果表示速率的话,这两种在二进制额情况下表达的是一个意思。

USART

USART是stm32的一个外设,上面所说的时序都是硬件自动生成的,要注意,USART1是APB2的外设,USART2/3都是APB1的外设。同时也要注意不同的总线时钟频率也是不一样的。

下面我们就来介绍它内部的电路吧

这个图看似很复杂,其实我们细分每个模块就不会了。在图中用红笔圈住的部分是为了兼容一些其他的协议的,我们可以不管。灰色区域有两块,其中TDR和RDR数据寄存器的地址是相同的,移位寄存器就是进行移位操作的,一位一位的将数据移入进来,都是先低位后高位。移位寄存器是由我们途中的发送控制器和接受控制器来控制的。在上图中的SCLK是产生时钟信号配合我们的发送寄存器的,只支持输出,不支持输入,发送数据寄存器每移位一次,同步时钟就会跳变一个周期,向外部相连的串口表明有数据了。SCLK的存在可以兼容别的协议。它还可以做自适应波特率,我们可以通过计算发送设备的时钟周期得到对应的波特率, 该功能就需要另外写程序了。硬件数据流控,就是用来控制发送端要不要发送的,同时我也可以作为发送接收别人的发送与否的请求,这里的是低电平表示请求发送。在最小面有一个波特率发生器,是用来生成波特率的。唤醒单元,就是用来挂载多个设备的,可以通过唤醒单元来选择要通信的设备。另外还需需要注意的就是接收端和发送端都有一个标志位,都可以用来触发外部中断。

该结构的框图就是上图的简化,首先总线有一个时钟,经过波特率发生器就可以将是时钟信号进行分频得到波特率,然后到达发送控制器和接受控制器,,这两个控制器分别控制发送的相关寄存器,和接收的相关寄存器,这两个寄存器有分别连接了两个脚,一个是TX另一个是RX。最后开启我们的开关控制就可以了进行串口通信了。

串口细节内容

  在图中我们可以看到时钟的上升沿是在每一位数据的中间的,9位长的数据帧的上面那一个时序是我们需要了解的,下面的时序我们暂时不需要了解,8位长的也是如此。在数据帧当中,我们可以选择是几位停止位或者有无校验位。停止位方便下一个数据的传送,拉高之后就是停止位,然后下降沿就标志着数据的传送。校验位我们可以选择奇校验,或者偶校验,奇校验就是保证我们发送数据的1的个数是奇数,偶校验就是保证我们发送数据的1的个数是偶数,这样我们就可以判断我们的数据是不是准确的。但是奇校验和偶校验并不能够十分准确的排查数据正误,于是在stm32当中又有一个CRC校验,这是一个单独的外设,可以去了解一下。

停止位的配置

起始位侦测

  在侦测器起始位的时候,我是以为数据进行16此采样,然后根据采样的数据进行判断这是不是一个起始信号,如上图,我们如果每三位有两个零就可以认为是正确的起始信号。之后数据时钟会定在该位数据的中间,这样我后面所有的数据也就都对齐了,即,时钟的上升沿都是在每一位数据的中间时刻。

波特率发生器

计算波特率的公式要了解一下,传波特率的寄存器是有小数的。

这差不多是所有的额内容了(自己写来记笔记用的,复习方便 ^_^).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值