STM32笔记(4) ————USART串口通信协议&外设

一、串口通信

1.1 通信接口

  • 通信的目的: 将一个设备的数据传送到另一个设备, 扩展硬件系统
  • 通信协议: 制定通信的规则, 通信双方按照协议规则进行数据收发
  • STM32里的通信协议有如下表:
    在这里插入图片描述
    USART有同步和异步两种通讯方式, 但同步只用作特殊功能, 一般只使用异步通讯(需要双方约定一个频率)

1.2 串口通信

串行通信与并行通信

  • 串行通信: 数据字节一位位地依次传送的通信方式, 串行通信的速度慢, 但用的传输线条数少, 成本低,适用于远距离的数据传送
  • 并行通信: 数据字节的各位同时传送的通信方式, 优点是数据传送速度快, 缺点是占用的传输线条数多, 适用于近距离通信, 远距离通信的成本较高

串行异步通信和串行同步通信

异步通信:

  • 一次通信传送一个字符帧, 发送的字符之间的时间间隔可以是任意的, 优点是通信设备简单、价格低廉, 但因为具有起始位和停止位, 传输效率较低

同步通信:

  • 进行通信前先建立同步, 发送频率和接受方的接受频率要同步。在发送信息时, 将多个字符加上同步字符组成一个信息帧,有一个统一的时钟控制发送端的发送, 接收端识别到同步字符后, 就认为开始一个信息帧, 此后位数作为实际传输信息处理。
  • 优点:传输速度较快, 可用于点对多点 缺点: 需要使用专用的时钟控制线实现同步, 对于长距离通信成本较高, 通信速率也会降低。一般用于同一PCB上芯片级之间的通信

串口参数及时序(串行异步通信)

  • 波特率: 串口通信的速率
    速率的参数就是波特率,波特率就是每秒传输码元的个数,单位是码元/s(baud)
    比特率:每秒传输的比特数,单位是bit/s,或者是bps
    在二进制的情况下,一个码元就是一个bit,此时波特率等于比特率(单片机的串口通信基本都是二进制调制(高电平表示1,低电平表示0,一位就是1bit)

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

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

  • 校验位: 用于数据验证, 根据数据位计算得来

  • 停止位: 用于数据帧间隔, 固定为高电平
    在这里插入图片描述

  • 字节装载在数据帧中,数据帧由起始位、数据位、停止位组成

  • 数据位有8个,代表一个字节的8位,右图可以在最右边加一个奇偶校验位,跟在有效载荷(字节)后面,则数据位总共是9位。接收方在接收数据后,会验证数据位和校验位

  • 若规定发送的波特率是1000bps,表示1s要发1000位,每一位的时间就是1ms,发送方每隔1ms发送一位,接收方每隔1ms接受一位,决定了每隔多久发送一位

  • 空闲状态下,起始位为高电平,起始位给低电平,使其产生下降沿,表示数据帧要开始

  • 奇偶校验的数据验证方法,可以判断数据传输是否出错,如果出错可选择丢弃或者重传。可选择三种方式,无校验、奇校验、偶校验。奇校验,包括校验位在内的9个数据位会出现奇数个1,根据8位数据情况奇校验位补0或1,保证1的个数位奇数,接收方接收数据时,会验证数据位和校验位,检出率不高比如有两位同时出错,只校验奇偶特性是检验不出的。偶校验同理,只能保证一定检出率。如果要更高检出率可以使用CRC校验


1.3 硬件电路

简单双向串口通信有两根通信线(发送端TX和接收端RX),TX与RX要交叉连接。(两个设备之间的GND一定要接在一起,但是VCC可以各自接)当只需单向的数据传输时,可以只接一根通信线
在这里插入图片描述
电平标准
电平标准是数据1和数据0的表达方式, 是传输线缆中人为规定的电压与数据的对应关系,
串口常用的电平标准有如下三种:

  • TTL电平: +3.3V或+5V表示1, 0V 表示0
  • RS232电平: -3~-15V表示1, +3~+15V表示0
  • RS485电平: 两线压差+2~+6V表示1, -2~-6V表示0(差分信号)干扰小
    一般TTL电平和RS232电平传输距离只有十几米,RS485电平的传输范围可达数千米

二、USART外设

2.1 USART简介

  • USART(Universal Synchronous/Asynchronous Receiver/Transmitter) 通用同步/异步收发器
  • USART是STM32内部集成的硬件外设, 可根据数据寄存器的一个字节数据自动生成数据帧时序,从 TX 引脚发送出去,也可自动接收 RX 引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里
  • 自带波特率发生器(一般设置为9600/115200), 最高可达4.5Mbits/s
  • 可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
  • 可选校验位(无校验/奇校验/偶校验)
  • 支持同步模式、硬件流控制、DMA、智能卡、IrDA、Lin
    同步模式多了个时钟CLK输出
    DMA,是指串口支持DMA进行数据转运,收发数据量大时可借助DMA,减轻CPU负担。
    IrDA用于红外通信的,一边红外发光管,另一边红外接收管,靠闪烁红外光通信,与遥控器的红外不同。
    LIN是局域网的通信协议。
  • STM32F108C8T6 USART资源: USART1(APB2总线上的设备) 、 USART2(APB1)、 USART3(APB1

2.2 USART框图

在这里插入图片描述
左上角TX、RX为发送和接收引脚,SW_RX、IRDA_OUT/IN是智能卡和IrDA通信的引脚(暂时不用)。TX由发送移位寄存器发出,RX通向接收移位寄存器。
在这里插入图片描述
在这里插入图片描述

2.3 USART基本结构

江科大自化协博主将框图简化后得到常用基本结构如下:
在这里插入图片描述

2.4 数据帧

在这里插入图片描述
在这里插入图片描述

有8位字长和9位字长,分别可以选择有校验和无校验
9位建议有校验,8位建议无校验
停止位有0.5,1,1.5,2,建于选择1位

2.5 输入数据

起始位侦测
在这里插入图片描述
在一位的时间里进行16次的采样
3、5、7/ 8、9、10次进行采样 且要求每3位至少应该有两个0(只有两个0会在状态寄存器里置NE, 噪声标志位)


数据采样
在这里插入图片描述
从1到16是一个数据位的时间长度,即一个数据位有16个采样时钟,由于起始位侦测已经对齐了采样时钟,所以这里就直接在第8、9、10次采样数据位。为了保证数据可靠性连续采样3次(8、9、10),如果没有噪声时,3次都为1或0,那么就认为采样的为1或0;如果有噪声造成3次中既有0也有1,按照2:1规则来,按出现2次的,这种情况NE噪声标志位也会置1。

简述:8、9、10次采样每3位也至少应该有两个0(只有两个0会在状态寄存器里置NE, 噪声标志位)


2.6 波特率发生器

  • 发送器和接收器的波特率由波特率寄存器BRR里的DIV确定 (分整数和小数部分)
  • 计算公式: 波特率 = fPCLK2/1 /(16 * DIV)) //内部有16倍波特率的采样时钟

在这里插入图片描述
比如要配置USART为9600的波特率,那么BRR寄存器的配置为:代入公式9600=72M/(16xDIV),解得DIV=468.75,二进制数为111010100.11,所以写入DIV整数部分的是111010100(前面未满的位补零),DIV小数部分写入的是11(后面未满的位补零)。不过用库函数就很方便,需要多少波特率直接写就行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值