嵌入式—STM32串口通信

提示:本文章基于stm32F103C8T6最小系统板展开实验


前言

提示:这里可以添加本文要记录的大概内容:

本文章基于stm32F103C8T6最小系统板展开实验,旨在帮助实验者理解串口功能


提示:以下是本篇文章正文内容,下面案例可供参考

一、串口通信的基本原理

1.串口协议和RS-232标准

串口协议
串口协议是一种在串行通信中使用的通信协议。它通过一条数据线(可以是单向或双向)按位顺序传输数据,在通信线路上每次只传输一位数据,数据的各个位按顺序依次发送和接收。

数据格式:通常包括起始位、数据位、奇偶校验位和停止位。起始位用于通知接收方数据传输开始,一般是一个逻辑 0 电平。数据位包含了要传输的实际数据,其位数可以是 5、6、7 或 8 位。奇偶校验位用于简单的错误检测,可选择奇校验、偶校验或无校验。停止位用于表示一个数据字节传输结束,一般是一个或多个逻辑 1 电平。

波特率:这是串口通信的一个重要参数,它表示每秒传输的位数(bps)。例如,波特率为 9600bps 意味着每秒传输 9600 位。发送方和接收方的波特率必须严格匹配,否则数据将无法正确接收。

传输方向:分为单工、半双工和全双工。单工通信是指数据只能在一个方向上传输;半双工通信允许数据在两个方向上传输,但不能同时进行;全双工通信则可以同时在两个方向上传输数据。

RS - 232 标准

RS - 232(Recommended Standard 232)是一种串行通信接口标准,由美国电子工业联盟(EIA)制定。它规定了接口的电气特性、机械特性和功能特性等多个方面,用于确保不同设备之间能够可靠地进行串行通信。

电气特性
RS - 232 使用正负电压来表示逻辑电平。在该标准中,逻辑 0(空号)被定义为 + 3V 到 + 15V 之间的电压,逻辑 1(传号)被定义为 - 3V 到 - 15V 之间的电压。这种采用正负电压的方式有助于提高抗干扰能力,但也使得它与常见的数字逻辑电平(如 TTL 电平,0 - 0.8V 表示逻辑 0,2 - 5V 表示逻辑 1)不兼容,所以在实际应用中往往需要进行电平转换。

机械特性
RS - 232 标准定义了接口的物理形状和引脚排列。最常见的是 DB - 9(9 针)和 DB - 25(25 针)连接器。例如,在 DB - 9 连接器中,不同的引脚有不同的功能定义,如引脚 2 用于发送数据(TXD),引脚 3 用于接收数据(RXD),引脚 5 用于接地(GND)等。

功能特性
它规定了数据传输的控制信号,如请求发送(RTS)、清除发送(CTS)、数据终端就绪(DTR)和数据设备就绪(DSR)等信号。这些信号用于设备之间的握手,以协调数据传输过程,确保数据的可靠发送和接收。

在这里插入图片描述

2.RS232电平与TTL电平

RS232电平

电平定义:RS232 采用负逻辑,逻辑 “1” 的电平为 - 3V 至 - 15V,逻辑 “0” 的电平为 + 3V 至 + 15V,噪声容限为 2V,即要求接收器能识别高于 + 3V 的信号作为逻辑 “0”,低于 - 3V 的信号作为逻辑 “1”.

电气特性:
信号电压高:RS232 的信号电平相对较高,这使得它在传输过程中具有较强的抗干扰能力,但也正因如此,其接口电路的芯片容易因过高的电压而损坏.
与 TTL 电平不兼容:由于电平标准与 TTL 电平差异较大,所以在 RS232 接口与 TTL 电路连接时,必须使用电平转换电路,如常用的 MAX232 芯片等,来实现电平的适配.
TTL电平
电平定义:TTL 电平中,逻辑高电平通常定义为 2.4V 至 5V 之间的电压范围,典型值为 5V;逻辑低电平通常定义为 0V 至 0.8V 之间的电压范围,典型值为 0V.

电气特性:
电平与数字逻辑直接对应:TTL 电平信号规定简单,+5V 等价于逻辑 “1”,0V 等价于逻辑 “0”,与计算机处理器等数字电路的逻辑电平直接对应,便于数字电路之间的直接连接和通信.
噪声容限较低:TTL 电平的噪声容限相对较小,对信号的稳定性要求较高,在实际应用中需要注意减少干扰源,以确保信号的正确传输.

传输距离:TTL 电平适用于短距离通信,一般最远距离大约在 10 米左右。因为其信号在传输过程中容易受到线路噪音和信号衰减的影响,所以长距离传输时可靠性会降低.

3.USB转串口模块(以CH340芯片为例)

CH340 USB 转串口的工作原理如下:

硬件连接与初始化
当 CH340 芯片通过 USB 接口连接到计算机时,其内部的 USB 收发器会与计算机的 USB 总线进行通信协商,以确定数据传输的速率等参数。CH340 的 UD + 和 UD - 引脚直接连接到 USB 总线上,按照 USB2.0 全速模式的规范进行数据交互.
芯片内置了电源上电复位电路,在上电时进行初始化操作,使芯片内部各寄存器和逻辑电路恢复到初始状态,准备好进行后续的工作.
对于需要外部时钟的 CH340G 等型号,需通过 XI 引脚外接 12MHz 的晶体及振荡电容,为芯片提供工作时钟信号,以确保芯片内部的时序逻辑正常运行.

USB 数据接收与处理
计算机通过 USB 接口向 CH340 发送数据时,数据以 USB 数据包的形式传输到 CH340 的 USB 收发器。
CH340 内部的 USB 控制器接收到数据包后,会对数据进行解析和处理,提取出其中的有效数据,并根据预设的通信协议,将数据转换为串口格式的数据,存放在芯片内部的接收缓冲区中 。

串口数据发送与控制
当 CH340 检测到串口输出引脚 TXD 空闲时,会从接收缓冲区中取出待发送的串口数据,按照设定的波特率,通过 TXD 引脚将数据逐位发送出去。
芯片支持多种波特率,范围从 50bps 到 2Mbps,可以通过配置相关寄存器来选择合适的波特率,以满足不同设备之间的通信需求.
此外,CH340 还提供了常用的 MODEM 联络信号 RTS、DTR、DCD、RI、DSR、CTS 等,这些信号可以用于与外部设备进行握手和状态指示,实现更复杂的通信控制功能.

电平转换与接口适配
CH340 芯片本身输出的是 TTL 电平的串口信号,如果需要与 RS232、RS485 等不同电平标准的串口设备进行通信,就需要通过外加电平转换器件来实现电平的适配.
例如,当与 RS232 设备连接时,可以使用 MAX232 等芯片将 CH340 的 TTL 电平转换为 RS232 电平,从而实现计算机与 RS232 设备之间的正常通信 。

CH340电路与实物图:
在这里插入图片描述
TXD:发送端,一般表示为自己的发送端,正常通信必须接另一个设备的RXD。

RXD:接收端,一般表示为自己的接收端,正常通信必须接另一个设备的TXD。

二.串口通信实验——电脑之间通信

1.实验要求

将两台笔记本电脑,借助 USB/TTL转RS232 模块和杜邦线,建立起串口连接。然后用串口助手等工具软件(如sscom,带文件传输功能)将一台笔记本上的一个大文件(图片、视频和压缩包软件)传输到另外一台电脑。

(1)预估文件大小、波特率和传输时间三者之间的关系,并对比实际传输时间。

(2)如果只接TX–RX, RX–TX 这样两根线,不接电源线或者不接GND地线,文件传输是否还能正常工作?请解释原因。

2.实验操作

需要两台电脑,电脑上都下载好串口调试助手(如:sscom),方便接收和发送显示文件。两个USB转TTL连接这两台电脑。打开串口调试助手,开始实验。

硬件连接图:
在这里插入图片描述

在发送电脑上打开串口调试助手sscom,开启串口,选择串口,设置波特率为115200,选择打开图片文件:
在这里插入图片描述
同时在另一个接收电脑打开串口调试助手sscom,开启串口,选择串口,设置波特率为115200

在发送电脑上发送图片:

在这里插入图片描述

接受电脑接受的图片信息情况:
在这里插入图片描述

三.串口通信实验——stm32与上位机通信

1.实验要求

安装 stm32CubeMX,配合Keil,使用HAL库(或标准库)方式,设置USART1 波特率为115200,1位停止位,无校验位,完成下列任务:

1)STM32系统给上位机(win10)连续发送“hello windows!”,win10采用“串口助手”工具接收。如果STM32的连续发送之间不加延时语句,观察win10端是否出现接收数据丢失的现象。

2)在完成以上任务基础,继续扩展功能:当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送;

2.利用stm32cubemx创建hal库开发环境

1)打开STM32CubeMX,在主界面点击:ACCESS TO MCU SELECTOR:
在这里插入图片描述

(2)选择的单片机型号以及点击开始工程项目:
在这里插入图片描述
3)配置GPIO:PA0。如果仅仅是完成串口通信的话,这一步可以跳过。但是根据实验要求,为了区分串口通信的开启与关闭,要使用一个LED灯来显示。当串口通信开启(STM32向电脑发送信息)的时候,LED灯亮,当串口通信关闭(STM32停止向电脑发送消息)的时候,LED灯灭。

在这里插入图片描述
(4)配置USART1,使能UART1,选择异步模式,软件会自动帮我们选择最合适的引脚,配置串口通信的位数大小,校验位,停止位,通信速率等(需要注意,通信双方的数据格式必须一样,一般来说,使用cubemx默认的数据格式就行,不用修改)
在这里插入图片描述

(5)配置时钟树

在这里插入图片描述

(6࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值