系列文章目录
第4章 USART串口通信
目录
系列文章目录
前言
1 STM32的USART
前言
通信,即是计算机与外围设备或者计算机与计算机之间的信息交换
根据通信方式不同可分为并行通信和串行通信。
并行通信是将数据的各个位用多条数据线同时进行传送,外加地址线和通信控制线,优点是传输速率高,缺点是长距离传输的成本高、可靠性差、接收方的各个位同时接收存在困难;串行通信是将数据逐位按顺序在一条传输线上传送,优点是传输线少、长距离传输时成本低,缺点是传输速率低
根据传输方式不同可分为同步通信和异步通信。
同步通信时要建立发送方时钟对接收方时钟直接的控制,使双方达到完全同步,传输数据的位直接的距离均为“位间隔”的整数倍,同时传输的字符间不留间隙,即保持位同步关系,也保持字符同步关系;异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程,在异步通信中,CPU与外设直接必须有几项约定,即每一帧位数、字符个数和波特率
根据串行通信数据的传输方向,可将串行通信方式分为单工方式、半双工方式和全双工方式
单工方式是指数据传输只能沿着一个方向,不能反向传输;半双工方式是指数据传输可以沿着两个方向,但不能同时发送,即表示发送/接收是有先后顺序的;全双工方式是指可以同时进行双向传输,全双工和半双工通信的本质区别是半双工通信双方只共用一条线路实现双向通信,但全双工却利用两条线路,一条用作发送数据用,另一条作接收数据用
通信协议是需要通信双方所达成的一种约定,它对包括数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题作出统一规定,通信双方必须共同遵守。串口通信协议分为物理层和协议层,物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输;协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准
串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,在串口通讯的协议层中,规定了数据包的内容,它由起始位、主体数据、检验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常的发送和接收数据
波特率:即通讯的速率。在异步通讯中由于没有时钟信号,所以两个通讯设备之间需要预定好波特率,只有在波特率一致的情况下,才能保证接收方和发送方获取同样的数据,波特率,可以理解为一个设备在一秒内发送/接收了多少码元的数据,常见的波特率为9600、19200、115200
通讯的起始和停止信号:数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止位可由0.5、1、1.5、2个逻辑1的数据位表示,通讯双方需约定一致
有效数据:处于起始位和校验位之间,传输的主体数据即为有效数据,其长度常被约定为5、6、7或8位长
数据校验:在有效数据之后,有一个可选的数据校验位,作用是校验通讯过程中是否出错。奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个8位长的有效数据是10101001,共有4个“1”,为达到奇校验效果,校验位为“1”,此时传输的数据有9位;偶校验则正好相反,在上述例子中补校验位为“0”,即可达到偶校验的效果;0校验是不管数据中的内容是什么,校验位总为“0”,1校验是校验位总为“1”,无校验的情况下,数据包中不含校验位
1 STM32的USART
USART发送接收有三种基本方式,轮询、中断和DMA,串口外设架构如下图所示
1、引脚
TX:发送数据输出引脚; RX:接收数据输入引脚
SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体的外部引脚
nRTS:请求以发送(Request To Send),n表示低电平有效,若使能RTS流控制,当USART接收器准备好接收新数据时就会将nRTS变成低电平;当接收寄存器已满时,nRTS将被设置为高电平
nCTS:清除以发送(Clear To Send),n表示低电平有效,若使能CTS流控制,发送器在发送下一帧之前会检测nCTS引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送
IRDA_OUT/IRDA_IN:用于红外传输数据
SCLK:发送器时钟输出引脚,仅适用于同步模式
2、数据寄存器
USART数据寄存器(USART_DR)只有低9位有效,并且第9位数据是否有效取决于USART控制寄存器1(USART_CR1)的M位设置,当M位为0时表示8位数据字长,当M位为1时表示9位数据字长,一般使用8位数据字长,USART_DR包含了已发送的数据或者接收到的数据。USART_DR包含了2个寄存器,一个专门用于发送的可写TDR,另一个专门用于接收的可读RDR,TDR和RDR都是介于系统总线和移位寄存器之间,当需要发送数据时,内核或DMA外设会把数据从内存写入到发送数据寄存器TDR,TDR的数据转移到发送移位寄存器,然后从移位寄存器一位一位地发送出去;接收数据是一个逆过程,数据一位一位地输入接收移位寄存器,然后转移到RDR,最后使用内核指令或DMA读取到内存中
3、控制器
USART有专门的控制发送的发送器、控制接收的接收器、还有唤醒单元、中断控制等,使用USART之前需要向USART_CR1寄存器中的UE位置1使能USART
4、发送器
当发送使能位(TE)置1时,发送移位寄存器中的数据在TX脚上输出,如果是同步模式,在SCLK引脚也输出时钟脉冲。每个字符前都有一个低电平的起始位,之后跟着停止位,数目可通过USART控制寄存器2(USART-CR2)的STOP[1:0]位控制,可选0.5个、1个、1.5个、2个停止位,默认使用一个停止位,2个停止位可用于常规USART模式、单线模式以及调制解调器模式,0.5和1.5个停止位用于智能卡模式
在发送数据时,发送器对TE位置1,发送一个空闲帧作为第一次数据发送,把要发送的数据写进USART_DR寄存器,在写入最后一次数据字后,等待TC=1,表示最后一个数据帧的传输结束,如果USART_CR1的TCIE位被置起,则会产生中断
5、接收器
设置USART_CR1的RE位,激活接收器,使它开始寻找起始位,在确定到起始位后就根据RX线电平状态把数据存放在接收移位寄存器内,接收完成后将移位寄存器移到RDR内,并把USART_SR寄存器的RXNE位置1,表示数据已经被接收并且可以被读出,如果USART_SR的RXNEIE位被置1,表示产生中断