问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32F103C8T6原理学习笔记——串口通信

创作时间:
作者:
@小白创作中心

STM32F103C8T6原理学习笔记——串口通信

引用
CSDN
1.
https://blog.csdn.net/Hacanchen/article/details/134344974

串口通信是嵌入式系统中常用的一种通信方式,尤其在单片机开发中占据重要地位。本文以STM32F103C8T6单片机为例,详细介绍了串口通信的基础知识、硬件电路设计以及USART外设的使用方法。通过本文的学习,读者可以掌握串口通信的基本原理和实际应用,为嵌入式系统开发打下坚实的基础。

一、通信接口基础

通信的目的在于将一个设备的数据传送到另一个设备,从而扩展硬件系统的功能。为了确保数据能够正确传输,通信双方需要遵循一定的规则,这就是通信协议。

通信引脚

不同的通信接口使用不同的引脚:

  • USART:TX(发送)和RX(接收)
  • I2C:SCL(时钟)和SDA(数据)
  • SPI:SCLK(时钟)、MOSI(主机输出从机输入)、MISO(主机输入从机输出)和CS(片选)
  • CAN:CAN_H和CAN_L(差分数据)
  • USB:DP(数据正)和DM(数据负)

通信模式

通信模式主要分为三种:

  • 全双工:通信双方能够同时进行双向通信,需要两根通信线(如USART的TX和RX,SPI的MOSI和MISO)。
  • 半双工:通信双方可以互相发送数据,但不能同时进行,只有一根数据线(如I2C、CAN、USB)。
  • 单工:数据只能从一个设备传输到另一个设备,通信是单向的(如灯塔发出光信号)。

时钟特性

  • 同步通信:I2C和SPI有单独的时钟线,接收方可以在时钟信号的指引下进行采样。
  • 异步通信:USART、CAN、USB没有时钟线,需要双方约定一个采样频率,并增加帧头帧尾进行采样位置对齐。

电平特性

  • 单端信号:引脚的高低电平都是对GND的电压差,通信双方需要共地。
  • 差分信号:CAN和USB通过两个差分引脚的电压差传输信号,不需要共地,传输速度和距离更远。

设备特性

  • 点对点:USART和USB都是点对点设备,直接传输数据。
  • 多设备:I2C、SPI、CAN可以在总线上挂载多个设备,需要寻址确定通信对象。

二、串口通信原理

串口是一种应用广泛的通信接口,具有成本低、使用简单、通信线路简单等特点。单片机的串口可以实现与各种设备的通信,极大地扩展了单片机的应用范围。

硬件电路

  • 简单双向串口通信需要两根通信线(发送端TX和接收端RX)
  • TX与RX要交叉连接
  • 当只需单向的数据传输时,可以只接一根通信线
  • 当电平标准不一致时,需要加电平转换芯片
  • 如果两个设备都有独立供电则不需要接VCC,如果一个有一个没有,协议把两个设备的VCC接在一起。

电平标准

串口常用的电平标准有三种:

  • TTL电平:+3.3V或+5V表示1,0V表示0
  • RS232电平:-3-15V表示1,+3+15V表示0
  • RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号)

串口参数及时序

  • 波特率:串口通信的速率,单位是bps(bits per second)
  • 起始位:标志一个数据帧的开始,固定为低电平
  • 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
  • 校验位:用于数据验证,根据数据位计算得来
  • 停止位:用于数据帧间隔,固定为高电平

三、USART外设详解

USART(Universal Synchronous/Asynchronous Receiver/Transmitter)是STM32内部集成的硬件外设,支持同步和异步通信模式。

USART功能特点

  • 最高支持4.5Mbits/s的通信速率
  • 可配置数据位长度(8/9位)
  • 可配置停止位长度(0.5/1/1.5/2位)
  • 支持奇偶校验
  • 支持硬件流控制
  • 支持DMA传输
  • 支持智能卡、IrDA、LIN等通信协议

USART硬件结构

USART的主要硬件结构包括:

  • 数据寄存器(DR):发送数据寄存器(TDR)和接收数据寄存器(RDR)共享同一个地址
  • 发送移位寄存器:将一个字节的数据一位一位地移出去
  • 接收移位寄存器:将接收到的数据一位一位地移入
  • 硬件流控:通过nRTS和nCTS引脚实现数据流控制
  • 同步时钟(SCLK):支持SPI协议和自适应波特率
  • 唤醒单元:实现多设备通信功能

数据帧结构

串口数据帧由起始位、数据位、校验位和停止位组成。


起始位侦测

串口输入部分的电路对采样时钟进行了细分,以波特率的16倍进行采样。当检测到下降沿时,会进行连续16次采样,以确保起始位的准确性。

数据采样

波特率发生器通过波特率寄存器BRR里的DIV值来计算波特率:

波特率 = fPCLK2/1 / (16 * DIV)

数据模式

串口数据可以采用HEX模式或文本模式显示:

  • HEX模式:以原始数据形式显示
  • 文本模式:以字符编码形式显示


数据包接收

对于包含包头、数据和包尾的数据包,可以使用状态机来处理不同状态的逻辑。状态机通过标志位来区分包头、数据和包尾的状态,并进行相应的处理。


© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号