本文主要叙述通过串口来进行文件传输
一、实验简介
本次实验将首先通过串口来进行发送和接收信息,然后将通过串口发送文件。由于实验设备的限制,本次实验通过笔记本电脑的两个USB口,再通过两个TTL转USB模块和杜邦线连接。
注意:需要将TXD接另一个模块的RXD,RXD接另一个模块的TXD,不需要接电源和地。
效果图也比较简单,这里就不做展示了。关于串口通信的相关原理可以参考我之前的博客STM32F103串口通信USART小试牛刀_江南烟脓雨的博客-CSDN博客
二、通过串口传输文件
在正确连接好硬件后,我们打开串口调制工具,这里选择的是SSCOM软件,有需要的可以在网上搜索到相应的安装包。打开两次SSCOM软件,然后分别选择两个不同的串口
注意:这里需要设置波特率等相关参数一致
1、简单的对话
通过对话框发送简单的文字,信息会通过杜邦线将信息传递回来。比如,我们通过串口6发送Hi ,串口7便会接收到串口6发来的信息Hi 。再通过串口7发送Hello,wolrd! ,串口6会接收到串口7发送的信息。
图2.1
2、文件的传输
接下来是主角的进场了——文件的传输。首先需要在SSCOM中打开文件,这里笔者选择发送一张jpg格式的图片。
图 2.2
然后点击发送文件,此时串口7便会接收到串口6发送的数据。
注意需要勾选接收数据到文件,否则没有文件生成
图 2.3
在SSCOM的同级目录下,将文件名更改为jpg结尾。如果在文件中查看文件时没有文件扩展名(后缀),在文件资源管理器的菜单栏点击查看将文件扩展名选项勾选上,然后再修改文件名。
图 2.4
下面是对比图(左边是串口传输的文件,右边是源文件)
图 2.5
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?=n0?S?SBn0??log2?(1+x)1/x=n0?S?log2?(1+x)1/x 又利用关系式,
lim
?
x
?
>
0
ln
?
(
1
+
x
)
1
/
x
=
1
\lim_{x->0}\ln(1+x)^{1/x}=1
x?>0lim?ln(1+x)1/x=1 及
log
?
2
a
=
log
?
2
e
?
ln
?
a
\log_{2}{a}=\log_{2}{e}\cdot\ln a
log2?a=log2?e?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?>∞lim?Ct?=x?>0lim?n0?S?log2?(1+x)1/x=n0?S?log2?e≈1.44n0?S? 所以,波特率趋于无穷大时,传输速率实则趋近于恒定的值。当我使用这个软件的最大波特率2000000波特率时,传输的文件转化为图片,打开时出现了一些错误。同时,SSCOM软件根据波特率和文件大小计算出了传输时间。如果以I为传信率,S为波特率,N为每个符号承载的信息量,则
I
=
S
log
?
2
N
I=S\log_{2}N
I=Slog2?N
这次的文件传输实验,实际用时在20s左右,比预计的14s左右要慢6s。
三、实验总结
本次实验相对比较简单,但是从中也可以学习到有关串口和通信的相关知识。比如文章末尾提到的香农公式,感兴趣可以自行查看通信原理有关的知识。
四、参考资料
波特率和数据传输速率的关系 - 丶尘丶 - 博客园 (cnblogs.com)
|