前几天给林某人安排了一个基于 uart 实现串口通讯的任务,之后也是不断修改不断优化,最后使用 cutecom 软件进行发送和接收,因此在这里记录一下 cutecom 的使用。
(看别人的代码比自己写代码要难多了TvT)
具体的程序代码可以参考这个人的这篇博客。这里主要讲解 cutecom 的使用。
启动 Ubuntu,把两个 USB to TTL 模块连接好插到自己电脑上,如下图所示:
之后可以看到,/dev 目录下多了两个文件: ttyUSB0 和 ttyUSB1。这两个文件就对应着两个先后插入的串口。注:这么做的目的是为了自发自收,即用 cutecom 和 程序之间相互通信,用于检测我们写的程序是否正常。除此之外,这么
之后输入以下命令给这两个串口权限,才能在 cutecom 中打开:
sudo chmod 777 /dev/ttyUSB*
(注意:如果拔插串口的话,需要重新赋予权限)
如果未安装,须执行:
sudo apt install cutecom
执行以下命令打开cutecom:
cutecom
打开 cutecom 后,选择对应的串口,点击open,即可打开串口。打开后的串口可以用于发送数据,同时会实时接收数据。
界面的下方是接收数据的显示区,会实时显示接收到的数据。点击左下角的 clear 按钮可以清空屏幕。
通常默认会将接收到的字节按照 ASCII 码表转化为对应的字符显示出来。如果想要将接收到的原始数据显示出来,可以勾选 clear 按钮右侧的 Hex output 按钮,即可将接收到的原始数据以 16 进制显示出来。
在界面的中间部分有一个 Input 输入框,在里面输入完数据按回车即可发送。
在这个输入框右侧有一栏选项,表示数据是以什么格式发送的,有:LF、CR、CR/LF、None、Hex。因为上次没有注意这里,导致没问题的代码一次又一次地收不到数据,差点就要崩溃了(TwT)。所以在这里也记录一下吧
将输入的每个字符按照 ASCII 表编码后发出去,并在最后插入 LF(ASCII 码值为 0x0A)。有下面一个例子:
发送:12
按照 Hex output 接收:31 32 0a
输出说明:31 在 ASCII 码上对应 1、 32对应2 、0a 对应 LF。
将输入的每个字符按照 ASCII 表编码后发出去,并在最后插入 CR(ASCII 码值为 0x0D)。有下面一个例子
发送:12
按照 Hex output 接收:31 32 0d
将输入的每个字符按照 ASCII 表编码后发送出去,并在最后插入 CR 和 LF.
有下面一个例子:
发送:12
按照 Hex Output 接收:31 32 0d 0a
将输入的每个字符按照 ASCII 表编码后发送出去,不添加任何结束符。
有下面一个例子
发送:12
按照 Hex Output 接收:31 32
将输入的数据两两一组,看做两位16进制数,组成一个字节发送出去。如果长度为奇数则在最高位补0
有下面一个例子
发送:123
接收:01 23
发送:aaff
接收:aa ff
最后在测试的时候,就是因为没有留意到这个选项,导致原本应以 Hex 发送的数据变成了以 CR 形式发送出去,然后程序一直接收不到数据,还以为是林某人的代码出问题了。(真是气得我给了桌子一拳。希望桌子没事)
此事再次证明:想要让程序员崩溃,往往只需要一个很小的 bug。(TwT)