备赛电赛学习STM32(十一):USART串口基础

本文详细介绍了STM32的USART串口通信协议,包括串口协议、硬件电路、电平标准、USART外设的结构与工作原理。重点讲解了USART的波特率发生器、数据帧、起始位侦测、数据采样等关键概念,并通过实例展示了如何进行串口发送和接收的初始化及函数实现。同时,文章还探讨了显示汉字的方法,包括UTF8和GB2312编码的选择与配置。
摘要由CSDN通过智能技术生成

目录

一、USART串口协议

1.1、串口协议 

1.2、串口通信

1.3、硬件电路

1.4、电平标准

 1.5、串口参数及时序

二、USART外设

2.1、USART简介

2.2、USART框图

 2.2.1、引脚部分

2.2.2、数据寄存器

2.2.3、控制部分

2.2.4、USART中断控制

2.2.5、波特率发生器

2.3、USART简单结构

2.4、数据帧

2.5、起始位侦测

2.6、数据采样

2.7、波特率发生器

2.8、USB转串口原理图

2.9、数据模式

三、实例部分

3.1、库函数

3.2、串口发送

3.2.1、接线图

 3.2.2、初始化

3.2.3、函数部分(该部分把函数分开)

3.2.4、总的函数

3.3、显示汉字的方法

3.4、串口接收

3.4.1、接线图

3.4.2、直接接收

3.4.3、中断接收


一、USART串口协议

1.1、串口协议 

  • 引脚:
  1. USART:TX(数据发送脚)、RX(数据接收脚)
  2. I2C:SCL(时钟)、SDA(数据)
  3. SPI:SCLK(时钟)、MOSI(主机输出数据脚)、MISO(主机输入数据脚)、CS(片选,用于指定通信对象)
  4. CAN:CAN_H、CAN_L(这两个是差分数据脚,用两个引脚表示一个差分数据)
  5. USB:DP、DM(差分数据脚)
  • 通信模式:
  1. 全双工:通信双方能够同时进行双向通信,一般来说,全双工通信都有两根通信线,比如串口,一根TX发送,一根RX接收,SPI,一根MOSI发送,一根MISO接收,发送线路和接收线路互不影响
  2. 半双工:是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能有一个方向上的传输存在。
  3. 单工:数据只能从一个设备到另一个设备
  • 时钟:
  1. 同步:有单独的时钟线为同步,例如I2C、SPI
  2. 异步:没有单独的时钟线,需要通信双方约定一个采样频率,并且还需要加一些帧头和帧尾等,进行采样位置的对齐,如USART、CAN、USB
  • 电平:
  1. 单端信号:它们引脚的高低电平都是对GND的电压差,所以单端信号通信的双方必须要共地,如I2C、USART、SPI
  2. 差分信号:靠两个差分引脚的电压差来传输信号,如CAN、USB,不过USB协议里面也有一些地方需要单端信号,差分信号的抗干扰能力强,所以差分信号一般传输速度和距离都比较远
  • 设备特性:
  1. 点对点:如USART、USB
  2. 多设备:可以在总线上挂载对个设备

1.2、串口通信

1.3、硬件电路

1.4、电平标准

 1.5、串口参数及时序

二、USART外设

2.1、USART简介

  •  同步模式只是多了个时钟CLK的输出
  • 硬件流,比如A设备有个TX向B设备的RX发送数据,A设备一直在发,发的太快了,B处理不过来,如果没有硬件流控制,那B只能抛弃新数据或者覆盖原数据,如果有硬件流控制,在硬件电路上,会多出一根线,如果B没有准备好接收,就置高电平,如果准备好了,就置低电平,A收到B反馈的信号,就只会在B准备好的时候才发数据,如果B没有准备好,那数据就不会发送出去
  • USART1是APB2总线上的设备,USART2和USART3是APB1总线上的设备

2.2、USART框图

 2.2.1、引脚部分

  • 有TX和RX,这两个是数据发送和接收引脚
  • 下面的其他引脚是智能卡和IrDA通信的引脚,我们一般用不到
  • 一般TX和RX引脚与寄存器可以这么认为(引脚旁边的那个框不用去管)

2.2.2、数据寄存器

  •  上图为串口的数据寄存器,发送或接收的字节数据就存在这里
  • 上面那两个数据寄存器,一个是发送数据寄存器(TDR),一个是接收数据寄存器(RDR),这两个寄存器占用同一个地址,在程序上,只表现为一个寄存器,就是数据寄存器,但是硬件中是分成了两个寄存器,一个用于发送TDR,一个用于接收RDR,TDR是只写的,RDR是只读的,当你进行写操作时,数据写到TDR,当进行读操作时,数据从RDR读
  • 下面那两个寄存器,一个用于发送,一个用于接收、
    • 发送移位寄存器的作用就是,把一个字节的数据一位一位地移出去,正好对应串口协议的波形的数据位,举个例子,比如在某时刻在TDR中写一个0X55这个数(01010101),那么此时硬件检查到你写入数据了,它就会检查,当前发送移位寄存器是不是有数据正在移位,那么写入到TDR的寄存器就会全部移动到发送移位寄存器,准备发送,当数据从TDX移动到发送移位寄存器时,会置一个标志位,叫TXE(TX Empty),我们检查这个标志位,如果置1了,我们就可以在TDR中写入下一个数据,注意的是,TXE置1时,数据其实没有发出去,只要数据从TDR转移到发送移位寄存器,TXE就会置1,然后发送移位寄存器就会在下面发生器控制的驱动下向右移位,然后一位一位的发送到TX引脚(低位先行),当数据移位完成,新的数据就会再次自动地从TDR转移到发送移位寄存器,如果移位没有完成,TDR的数据就会等待,一旦移位完成,就会立刻转移过来,有了TDR和移位寄存器的双重缓存,可以保证连续发送数据的时候,数据帧不会有空闲,提高了工作效率
    • 接收端也是类似,数据从RX引脚通向接收移位寄存器,在接收器控制驱动下,一位一位的读取RX电平,先放在最高位,然后向右移,移动8次就能接收一个字节了,同样,因为串口协议规定是低位先行,所以接收移位寄存器是从高位往低位移动,之后,当一个字节移动完成后,这一个字节的数据就会整体地转移到接收数据寄存器RDR里来,在转移的过程中,也会置一个标志位,叫RXNE(RX Not Empty),接收数据寄存器非空,当我们检测到RXNE置1之后,就可以把数据读走

2.2.3、控制部分

  • 发送其控制发送,接收器控制接收

注:唤醒单元和时钟了解一下就行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子ゆ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值