串口传输文件
本文主要叙述通过串口来进行文件传输文章目录一、实验简介二、通过串口传输文件1、简单的对话2、文件的传输3、思考三、实验总结四、参考资料一、实验简介本次实验将首先通过串口来进行发送和接收信息,然后将通过串口发送文件。由于实验设备的限制,本次实验通过笔记本电脑的两个USB口,再通过两个TTL转USB模块和杜邦线连接。注意:需要将TXD接另一个模块的RXD,RXD接另一个模块的TXD,不需要接电源和地。
本文主要叙述通过串口来进行文件传输
一、实验简介
本次实验将首先通过串口来进行发送和接收信息,然后将通过串口发送文件。由于实验设备的限制,本次实验通过笔记本电脑的两个USB口,再通过两个TTL转USB模块和杜邦线连接。
注意:需要将TXD接另一个模块的RXD,RXD接另一个模块的TXD,不需要接电源和地。
效果图也比较简单,这里就不做展示了。关于串口通信的相关原理可以参考我之前的博客STM32F103串口通信USART小试牛刀_江南烟脓雨的博客-CSDN博客
二、通过串口传输文件
在正确连接好硬件后,我们打开串口调制工具,这里选择的是SSCOM软件,有需要的可以在网上搜索到相应的安装包。打开两次SSCOM软件,然后分别选择两个不同的串口
注意:这里需要设置波特率等相关参数一致
1、简单的对话
通过对话框发送简单的文字,信息会通过杜邦线将信息传递回来。比如,我们通过串口6发送Hi
,串口7便会接收到串口6发来的信息Hi
。再通过串口7发送Hello,wolrd!
,串口6会接收到串口7发送的信息。
2、文件的传输
接下来是主角的进场了——文件的传输。首先需要在SSCOM中打开文件,这里笔者选择发送一张jpg格式的图片。
然后点击发送文件,此时串口7便会接收到串口6发送的数据。
注意需要勾选接收数据到文件,否则没有文件生成

在SSCOM的同级目录下,将文件名更改为jpg结尾。如果在文件中查看文件时没有文件扩展名(后缀),在文件资源管理器的菜单栏点击查看将文件扩展名选项勾选上,然后再修改文件名。
下面是对比图(左边是串口传输的文件,右边是源文件)
3、思考
笔者还试过不同的波特率,也遇到一些问题。当波特率过高时,误码率上升,因为根据著名的香农公式
C = B log 2 ( 1 + S N ) C=B\log_{2}({1+\frac{S}{N}}) C=Blog2(1+NS)
当信噪比一定时,令 x = S / N 0 x=S/N_0 x=S/N0,这样上面的公式可以写成
C t = S n 0 B n 0 S log 2 ( 1 + x ) 1 / x = S n 0 log 2 ( 1 + x ) 1 / x C_t=\frac{S}{n_0}\frac{Bn_0}{S}\log_{2}(1+x)^{1/x} =\frac{S}{n_0}\log_{2}(1+x)^{1/x} Ct=n0SSBn0log2(1+x)1/x=n0Slog2(1+x)1/x
又利用关系式,
lim x − > 0 ln ( 1 + x ) 1 / x = 1 \lim_{x->0}\ln(1+x)^{1/x}=1 x−>0limln(1+x)1/x=1
及
log 2 a = log 2 e ⋅ ln a \log_{2}{a}=\log_{2}{e}\cdot\ln a log2a=log2e⋅lna
可以推出
lim B − > ∞ C t = lim x − > 0 S n 0 log 2 ( 1 + x ) 1 / x = S n 0 log 2 e ≈ 1.44 S n 0 \lim_{B->\infty}C_{t}=\lim_{x->0}{\frac{S}{n_0}\log_{2}(1+x)^{1/x}}=\frac{S}{n_0}\log_{2}e\approx1.44\frac{S}{n_0} B−>∞limCt=x−>0limn0Slog2(1+x)1/x=n0Slog2e≈1.44n0S
所以,波特率趋于无穷大时,传输速率实则趋近于恒定的值。当我使用这个软件的最大波特率2000000波特率时,传输的文件转化为图片,打开时出现了一些错误。同时,SSCOM软件根据波特率和文件大小计算出了传输时间。如果以I为传信率,S为波特率,N为每个符号承载的信息量,则
I = S log 2 N I=S\log_{2}N I=Slog2N
这次的文件传输实验,实际用时在20s左右,比预计的14s左右要慢6s。
三、实验总结
本次实验相对比较简单,但是从中也可以学习到有关串口和通信的相关知识。比如文章末尾提到的香农公式,感兴趣可以自行查看通信原理有关的知识。
四、参考资料
更多推荐

所有评论(0)