基于 MDK实现STM32串口通信

本文介绍了串口通信的基础,包括串口协议、RS-232标准及其电平转换。然后详细讲解了STM32的USART配置,包括波特率、停止位和无校验位的设置,以及如何通过STM32CubeMX配置串口。通过实例展示了如何创建工程、编写代码并实现STM32向Windows发送数据。实验结果显示通信成功。
摘要由CSDN通过智能技术生成

一、串口协议与RS-232标准

1、串口协议

串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232RS-422RS-485
想要加强理解,我们可以通过分层来简化这个复杂的问题。将通讯协议分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
下面主要介绍RS-232标准

2、RS-232标准

RS-232标准主要规定了信号的用途、通讯接口以及信号的电平标准。
使用RS-232标准的串口设备间常见的通讯结构见图。
在这里插入图片描述
在上面的通讯方式中,两个通讯设备的"DB9接口"之间通过串口信号线建立起连接,串口信号线中使用"RS-232标准"传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个"电平转换芯片"转换成控制器能识别的"TTL校准"的电平信号,才能实现通讯。

3、RS232电平与TTL电平

根据通讯使用的电平标准不同,串口通讯可分为TTL标准及RS-232标准,见表

通讯标准 电平标准(发送端)
5V TTL 逻辑1:2.4V~5V
逻辑0:0~0.5V
RS-232 逻辑1:-15V~-3V
逻辑0:+3V~+15V

我们知道常见的电子电路中常使用TTL的电平标准,理想状态下,使用5V表示二进制逻辑1,使用0V表示逻辑0
而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑1+15V表示逻辑0
使用RS232与TTL电平校准表示同一个信号时的对比见图
因为控制器一般使用TTL电平标准,所以常常会使用MA3232芯片对TTL及RS-232电平的信号进行互相转换。在这里插入图片描述

二、USART

1、介绍

通用同步异步收发器USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个UART,它相比USART来说没有同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。串行通信一般是以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。USART 就是对这些传输参数有具体规定,当然也不是只有唯一一个参数值,很多参数值都可以自定义设置,只是增强它的兼容性。

2、功能框图

在这里插入图片描述

  • 功能引脚
    TX:发送数据输出引脚。
    RX:接收数据输入引脚。
    SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引
    脚。
    nRTS:请求以发送(Request To Send), n 表示低电平有效。如果使能 RTS 流控制,当
    USART 接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时,
    nRTS 将被设置为高电平。该引脚只适用于硬件流控制。
    nCTS:清除以发送(Clear To Send), n 表示低电平有效。如果使能 CTS 流控制,发送
    器在发送下一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制。
    SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。

3、USART初始化结构体

标准库函数对每个外设都建立了一个初始化结构体。结构体成员用于设置外设工作参数,并由外设初始化配置函数,比如USART_Init()调用,这些设定参数将会设置外设相应的寄存器,达到配置外设工作环境的目的。

 USART初始化结构体
1 typedef struct {
   
2 uint32_t USART_BaudRate; // 波特率
3 uint16_t USART_WordLength; // 字长
4 uint16_t USART_StopBits; // 停止位
5 uint16_t USART_Parity; // 校验位
6 uint16_t USART_Mode; // USART模式
7 uint16_t USART_HardwareFlowControl; // 硬件流控制
8 } USART_InitTypeDef;

当使用同步模式时需要配置SCLK引脚输出脉冲的属性,标准库使用一个时钟初始化结构体USART_ClockInitTypeDef来设置,因此该结构体内容也只有在同步模式才需要设置。

USART时钟初始化结构体

1 typedef struct {
   
2 uint16_t USART_Clock; // 时钟使能控制
3 uint16_t USART_CPOL; // 时钟极性
4 uint16_t USART_CPHA; // 时钟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值