目录
前言
最近做开发工作已经逐步转到Linux系统上来了,linux上的终端是很方便的工具,在做开发的时候我们往往会用串口来和电脑通信,比如做FPGA开发,我们调试的时候想看一下FPGA内部的寄存器值,或者获取FPGA内部经过数字电路后的输出结果,我们就可以在FPGA里面加入串口模块,实现与PC的通讯,当然,对于树莓派,licheepi,ARM等的调试,我们都可以这样做。
在windows下我们经常使用图形化的串口调试工具,当我们熟悉linux的操作模式后,也许会对命令模式情有独钟,因此虽然在linux环境下有图形化的串口调试助手,但是使用起来总不如在控制台中用命令来的灵活。
因此此次我以licheepi为例,说明如何在linux终端通过串口来实现与licheepi的交互。
linux下串口操作
linux是文件系统,是直接可以像操作文件一样操作串口的,具体介绍如下
使用linux shell来读写串口
针对嵌入式串口调试的bash脚本
有了上面介绍的知识,于是就想实现在没有网络模块时,在linux上操作树莓派,licheepi就如同在本地终端操作一样的效果,显然万能的shell
可以帮我们完成这个任务,我根据自己的使用习惯,写了一个脚本,为mtty.sh
,
mtty.sh文件的内容如下:
#!/usr/bin/env bash
#-------------------------------------------------------
# FileName : mtty.sh
# Author :hpy
# Date :2020年08月09日
# Description :基于linux终端的串口工具
# :连接树莓派,licheepi等
#-------------------------------------------------------
#++++++++++++++++ 串口参数设置+++++++++++++++++++++
#目标串口设置 /dev/ttyUSB*
fdtty=/dev/ttyUSB0
#波特率设置
baud=115200
#+++++++++++++++++++++++++++++++++++++++++++++++++++
tp="/tmp/$(date +%N).txt"
exUsb(){
if [ ! -c $fdtty ];then
echo "不存在目标串口($fdtty)!退出脚本"
exit 0
fi
}
#自动检测目标usb 未完成
checkUsb(){
t1=$(ls /dev/ttyUSB*)
if [[ $? -gt 0 ]];then
read -p "请插入串口后,是否继续检测串口y/n?" chechin
if [ "$chechin" = "y" ] || [ "$chechin" = "yes" ]
then
fdtty=$(ls /dev/ttyUSB*)
fi
else
t2=$(ls /dev/ttyUSB*)
fi
}
#键盘输入
getData(){
while((1))
do
exUsb
read readd
echo -e -n "$readd\n" > $fdtty
done
}
#串口有数据接收时就返回
dis(){
while ((1))
do
exUsb
cat $fdtty | tail -n +2 >> $tp
#cat $fdtty >> /tmp/usbget.txt
if [[ -s $tp ]];then
cat $tp
cat /dev/null > $tp #显示过的就在文件中清除
fi
done
}
info(){
echo "欢迎使用linux终端上的嵌入式串口工具!"
echo "使用 <Ctrl-c> 退出"
echo ""
}
main(){
info
exUsb
stty -F $fdtty -echo raw speed $baud min 0 time 2 &> /dev/null
#cat /dev/null > /tmp/usbget.txt
echo -e -n "\n" >$fdtty #启动时发送,以获取反馈显示
dis & #显示线程
getData #键盘输入线程
exit 0
}
main
看一看跑这个脚本实现和licheepi交互的效果:
本地linux电脑的终端如下图:
使用脚本licheepi后的终端效果:
连接方法
linux下的串口设备为/dev/ttyUSB*
,于是我们首先可以先将连接到licheepi的串口从linux
电脑上拔出,然后在终端输入命令
ls /dev/ttyUSB*
查看当前有哪些串口,如果没有串口设备将会报错,如下
然后我们连接好接到licheepi
的串口,在运行上面的命令查看增了那个串口,那它就是我们的目标串口。
然后我们把文件中的串口和波特率修改成我们需要的后执行脚本即可。
当然这只是一个基本的数据传输的,是不能够在脚本中使用vim命令的,否则显示会乱糟糟的。