串口通信和USART通信

1 串口通信
1.1 通讯协议
通讯协议分为物理层和协议层。

  • 物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输;
  • 协议层:规定通讯逻辑,统一收发双方的数据打包、解包标准。

串口通讯物理层之RS-232
RS-232标准主要规定了信号用途、通讯接口和信号电平标准。如图1为常见的设备间串口通讯结构图。
图1
如上图所示,每个设备都有一个DB9接口,通过DB9接口连接RS-232标准的串口线进行数据传输。由于通过RS-232标准传输的电平信号到达设备后,不能直接被识别,所以会通过电平转换芯片(例如MAX3232、SP3232芯片等)转换成能识别的TTL电平信号,实现通讯。
相互通讯的两个设备间,一个设备发送数据,一个设备接收数据。一般情况下,发送数据的设备称为DTE(Data Terminal Equipment数据终端设备),如计算机;接收数据的设备称为DCE(Data Circuit-terminating Equipment),如调制解调器。
DB9接头

如上图,以公头为例,有9条信号线,其中,

  • RXD:用于接收DCE发来的数据信号,即输入;
  • TXD:用于发送DTE的信号,即输出。公头和母头的RXD和TXD应交叉连接;
  • GND:用于平衡设备双方的地电位,即共地

1.2 串口通讯协议层
协议层规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据。如图3为数据包的基本组成。
这里写图片描述
波特率
串口异步通讯中由于没有时钟信号,所以通讯双方需要约定好波特率,即每个码元的长度,以便对信号进行解码。常见的波特率有4800、9600、115200等。

  • 关于波特率详见下篇文章

起始、停止位
数据包从起始位开始,到停止位结束。起始信号用逻辑0的数据位表示,停止信号由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可。

有效数据
起始位之后便是传输的主体数据内容了,也称为有效数据,其长度一般被约定为5、6、7或8位长。

数据校验
由于在通讯过程中易受到外部干扰导致传输数据出现偏差,所以在有效数据之后加上校验位解决。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)及无校验(noparity)。

  • 奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个8位长的有效数据为:01101001,此时共有4个“1”,为达到奇校验效果,校验位为“1”,最后传输的是8位有效数据加1位校验位,共9位。
  • 而偶校验刚好相反,要求有效数据和校验位的“1”数量为偶数,则此时为达到偶校验效果,校验位为“0”。
    -而0校验则无论有效数据中是什么数据内容,校验位总是为“0”,1校验校验位总是为“1”。

2 USART通信
***学习目的:***通过这个模块来实现单片机和电脑之间的通信,并以此为基础,实现利用电脑来简单地控制单片机的目的。
2.1 什么是USART通信
USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。这是一个用于和其他设备(如电脑、单片机等)通信(交换数据、信息等)的端口,就像手机数据线那样。

STM32 有3个USART接口(通用同步/异步接收、发送端口,比UART增强了同步功能)
STM32的USART串口,采用分数波特率发生器,最高速率=72M/16=4.5Mb/S

  • 全双工异步通信
  • 单线半双工通信
  • 使用DMA的可配置的多缓冲通信
  • 单独的发送器和接收器使能位
  • 检测标示 接收缓冲器满,发送缓冲器空 传输结束标志
  • 校验控制 发送检验位 对接收数据进行检验(奇偶校验)
  • 四个错误检测标志
  • 10个带标志的中断源

任何USART通信,需要用到

  1. 2个对外连接的引脚:RxD、TxD
  2. SCLK:发送器时钟输出(同步模式用到)

数据接收过程
数据接收
数据发送过程
这里写图片描述
应用场合:

  • 芯片间近距离通信
  • 与PC机通信
  • 模块间远距离通信

    2.2 STM32中USART功能框图
    这里写图片描述
    2.2.1 功能引脚:
  • TX:输出引脚,用于发送数据
  • RX:输入引脚,用于接收数据
  • SW_RX:输入引脚,用于单线和智能卡模式,属于内部引脚,没有具体外部引脚引出
  • IRDA_OUT:输出引脚,用于发送红外数据
  • IRDA_IN:输入引脚,用于接收红外数据
  • nRTS:请求以发送(Request To
    Send),n表低电平有效。若使能RTS硬件流控制,当USART接收器准备好接收数据时,nRTS有效,即它为低电平;当接收寄存器已满时,nRTS被设置为高电平
  • nCTS:请求以发送(Clean To
    Send),n表低电平有效。若使能CTS硬件流控制,发送器在发送下一帧数据前会检测nCTS引脚状态,若为低电平表可以发送数据,若为高电平则在发送完当前数据帧之后停止发送。
  • SCLK:发送器时钟输出引脚,仅适用于同步模式。

2.2.2 寄存器
数据寄存器
USART数据寄存器(USART_DR)只有低9位有效,第9位数据是否有效要取决于USART_CR1(USART控制寄存器1)的M位设置
数据寄存器
控制寄存器
控制寄存器
当M位为0时表示8位数据字长,当M位为1时表9位数据字长,一般我们使用8位数据字长。
USART_DR实际是包含了两个寄存器,一个专门用于发送的TDR,一个专门用于接收的RDR。进行发送数据操作时,往USART_DR写入数据会自动存储在TDR内,当进行读取数据操作时,向USART_DR读取数据会自动提取RDR数据。串行通信时一位一位传输的,所以TDR和RDR寄存器都是介于系统总线和移位寄存器间的:发送数据时把TDR内容转移到发送移位寄存器上,接收数据时则是把接收到的每一位顺序保存在接收移位寄存器内进而转移到RDR。
2.2.3 控制器
STM32的USART有专门用于控制发送、接收、唤醒单元和中断等的寄存器。例如:

  • USART_CR1寄存器的UE位用于开启/关闭给串口的时钟源的,使用USART之前向该位写1用于使能USART。
  • USART_CR1寄存器的M位用于控制发送/接收数据字长可选8位/9位。
  • USART_CR1寄存器的TE位用于启停数据发送,向该位写1时发送移位寄存器上的数据会从TX引脚输出,低位在前,高位在后。如果设置USART为同步模式,SCLK引脚将会输出时钟信号。
  • USART_CR1寄存器的RE位用于开启/关闭USART的接收,若为1,接收器在RX线开始接收数据帧的起始位,确定到起始位后就根据RX线电平状态把数据存放在接收移位寄存器内,接收完成后就要接收移位寄存器移到RDR内,并将USART_SR寄存器的RXNE位置1(若USART_CR2寄存器的RXNEIE置1的话此时可以产生中断)

一般在我们编程中较为重要的USART_CR1寄存器标志位有:

  • 在发送数据时
TE:发送使能
TXE:发送寄存器为空
TC: 发送完成
TXIE:发送完成中断使能
  • 接收数据时
RE:接收使能
RXNE:读数据寄存器非空
RXNEIE:发送完成中断使能

2.2.3 波特率的设置
USARTDIV是一个存放波特率寄存器(USART_BRR)的无符号浮点数
USART的发送器和接收器使用相同的波特率,计算公式为:

Tx/Rx波特率 = USART的时钟频率 / (16 * USARTDIV)


DIV_Mantissa[11:0]表示USARTDIV的整数部分
DIV_Fraction[3:0]表示USARTDIV的小数部分。
例如:DIV_Mantissa = 26(0x1a),DIV_Fraction = 12(0x0c),那么USART_CRR的值为0x26c。USARTDIV的小数位12 / 16 = 0.75,整数位26,最终USARTDIV的值为26.75。
假设知道USARTDIV的值为22.63,那么,DIV_Fraction = 16 * 0.63 = 10.08,最接近的整数位10,即DIV_Fraction = 0x0a,DIV_Mantissa = 22,即为0x16。
以USART1为例,它是挂接在APB2总线上的:

即USART1的时钟源频率为72MHz,那么如果要得到115200的波特率,即:
115200 = 72000000 / (16 * USARTDIV),USARTDIV = 39.0625,
同理计算可得,DIV_Fraction = 0.0625 * 16 = 1,DIV_Mantissa = 39,USART_BRR的值设置为0x271。
2.2.4 校验控制
STM32F103系列单片机的USART支持奇偶校验,USART_CR1寄存器的PCE位置1就可以启动奇偶校验,奇偶检验由硬件自动完成。使能奇偶校验控制后,每个字符帧的格式变为:

起始位 + 数据帧 + 校验位 + 停止位

**注意:**当使用校验位时,USART_CR1寄存器的M位需要设置为1,即9位模式,因为串口传输的长度为8位数据帧加上1位校验位共9位。启动奇偶校验控制后,在发送数据帧时会自动添加校验位,接收数据帧时自动验证校验位。接收数据时若出现奇偶校验位验证失败,USART_SR寄存器的PE位会被置1并可以产生奇偶校验中断。
2.2.5 中断控制
USART有多个中断请求事件,常用中断请求有:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值