Ubuntu下串口工具 PicoCOM 的使用和时间戳显示
PICOCOM
Ubuntu下的串口软件, 除了 CuteCOM, screen, MiniCOM 以外, 还有一个和 MiniCOM 很像的 PicoCOM. 最近在调试 CH340C 串口的过程中, 发现只有 PicoCOM 的连接Reset才能正常工作, 因此单独记录一下.
- GitHub 仓库 https://github.com/npat-efault/picocom
- 仓库的所有者 Nick Patavalis (npat-efault) 在 2018 年之后就未再更新
- 在 Ubuntu22.04 下能编译通过并正常工作
- GitLab 分支仓库 https://gitlab.com/wsakernel/picocom
- Wolfram Sang 维护的, 在原仓库基础上继续开发的一个版本
安装
在 Ubuntu 上直接通过sudo apt install picocom
安装, 版本是3.1
使用
连接和断开
使用 115200 波特率连接串口设备 /dev/ttyUSB0
picocom -b115200 /dev/ttyUSB0
断开有两种方式
- Ctrl+A, Ctrl+Q 退出, NO RESET
- Ctrl+A, Ctrl+X 退出, RESET
在串口通信时, RTS(Ready To Send)会处于低电平, 当断开串口时如果RESET, 就会恢复高电平, 默认会进行RESET.
在调试STC单片机的时候, 往往会使用带自动烧录的串口转USB设备连接, 而这种设备的自动烧录机制, 就是通过拉低RTS触发MCU断电重启. 在使用这种RTS触发的设备进行烧录和调试时, 就要灵活使用RESET机制.
- 当进行调试时, 我们不希望每次连接MCU时自动重启, 因此断开串口时要避免RESET, 让RTS一直处于低电平, 断开连接时使用 Ctrl+A Ctrl+Q 退出, 可以避免RESET
- 当进行烧录时, 如果RTS还处于低电平, 拉低RTS无效, 导致无法重启MCU. 所以在烧录时, 断开串口要RESET, 让RTS回到高电平, 使用 Ctrl+A Ctrl+X 退出
PS: 这个功能在 picocom 上工作是正常的, 但是在 minicom 上工作不正常, 使用 Ctrl+A, Q 退出一次之后, 无论再使用 Ctrl+A,X, 还是 Ctrl+A,Q 都无法再触发 RESET
显示二进制
在调试串口通信时, 有时候需要观察串口的二进制输出, 这时候就需要将数据通过16进制打印出来, 在 picocom 下需要用 --imap
参数, 这个参数是一个多选项, 可以区分不同类型的数值进行转换.
--imap <map> (input mappings)
<map> is a comma-separated list of one or more of ...
例如
picocom --imap spchex,tabhex,crhex,lfhex,nrmhex,8bithex -b 19200 /dev/ttyS0
各参数的说明
- spchex (map special chars (< 0x20 || 0x7f), excl. CR, LF, and TAB to hex)
- tabhex (map TAB to hex)
- crhex (map CR to hex)
- lfhex (map LF to hex)
- 8bithex (map chars with 8th-bit set to hex)
- nrmhex (map normal ascii chars (0x20 <= c < 0x7f) to hex)
二次开发: 增加时间戳
调试串口时经常会用到时间戳, 例如观察延时是否正确. 虽然这个时间戳并不准确, 但是作为一个粗略的时间标记还是非常方便的. minicom在较新的版本中已经支持时间戳输出, 但是 picocom 上还没有这个功能.
开源软件的好处就在于, 用得不顺手可以自己改. 在 picocom 上增加时间戳输出也并不麻烦.
先通过项目仓库 https://github.com/npat-efault/picocom 导出代码, 直接make
编译验证环境是否正确. 如果编译不成功先解决编译环境问题.
而后是修改代码, 主要修改的部分都在 picocom.c
头文件引入 sys/time.h, 因为会用到时间取值函数
#include <sys/time.h>
增加定义, n/N 这个参数用于开关/选择时间戳格式
#define KEY_TIMESTAMP CKEY('n') /* show timestamp */
在结构体 struct { ... } opts 中增加一个字段 int timestamp;
用于记录时间戳选项
在帮助显示中增加按键提示
fd_printf(STO, "*** [C-%c] : Toggle display timestamp\r\n",
KEYC(KEY_TIMESTAMP));
增加对应的按键处理
case KEY_TIMESTAMP:
opts.timestamp = (opts.timestamp + 1) % 4;
fd_printf(STO, "\r\n*** display timestamp, format:%d ***\r\n",
opts.timestamp);
在输出部分, 增加时间戳的生成方法, 这里会产生4种显示方式, 0:不显示, 1:分:秒, 2:时:分:秒, 3:年-月-日 时:分:秒
/* print leading timestamp */
void print_lead_str(void)
{
struct timeval tv;
struct tm lt = {0};
char buff[32], buff2[64];
gettimeofday(&tv, NULL);
localtime_r(&(tv.tv_sec), <);
switch (opts.timestamp) {
case 3:
strftime(buff, sizeof(buff), "%Y-%m-%d %H:%M:%S", <);
sprintf(buff2, "%s.%03ld ", buff, tv.tv_usec / 1000);
write(STO, buff2, 24);
break;
case 2:
strftime(buff, sizeof(buff), "%H:%M:%S", <);
sprintf(buff2, "%s.%03ld ", buff, tv.tv_usec / 1000);
write(STO, buff2, 13);
break;
case 1:
strftime(buff, sizeof(buff), "%M:%S", <);
sprintf(buff2, "%s.%03ld ", buff, tv.tv_usec / 1000);
write(STO, buff2, 10);
break;
default:
break;
}
}
在显示中增加调用
if ( FD_ISSET(tty_fd, &rdset) ) {
char buff_rd[TTY_RD_SZ];
char buff_map[TTY_RD_SZ * M_MAXMAP];
/* read from port */
do {
n = read(tty_fd, &buff_rd, sizeof(buff_rd));
} while (n < 0 && errno == EINTR);
if (n == 0) {
fatal("read zero bytes from port");
} else if ( n < 0 ) {
if ( errno != EAGAIN && errno != EWOULDBLOCK )
fatal("read from port failed: %s", strerror(errno));
} else {
print_lead_str(); //<--- 输出时间戳
int i;
char *bmp = &buff_map[0];
if ( opts.log_filename )
if ( writen_ni(log_fd, buff_rd, n) < n )
fatal("write to logfile failed: %s", strerror(errno));
for (i = 0; i < n; i++) {
bmp += do_map(bmp, opts.imap, buff_rd[i]);
}
n = bmp - buff_map;
if ( writen_ni(STO, buff_map, n) < n )
fatal("write to stdout failed: %s", strerror(errno));
}
}
详细的代码改动可以参考
https://github.com/IOsetting/picocom
除了增加了 -N 参数显示时间戳功能, 还修改了默认的通信波特率, 将 9600 改为 115200, 因为现在基本上都是 115200 了. 运行make
编译后可以直接使用.
在通信过程中通过 Ctrl+A Ctrl+N 依次切换不同显示格式, 也可以在启动时直接指定, 例如
./picocom --imap nrmhex,8bithex /dev/ttyUSB0 -N3
参考
Ubuntu下串口工具 PicoCOM 的使用和时间戳显示的更多相关文章
- Ubuntu下串口工具
一.Kermit 1.安装: sudo apt-get install ckermit 2.配置: sudo gedit /etc/kermit/kermrc 3.在文件末端添加如下内容 : set ...
- ubuntu下串口编程备忘
弄了一下串口,一个小问题多折腾了下,备忘.软件环境:zl@zhanglong:~$ cat /etc/lsb-release DISTRIB_ID=UbuntuDISTRIB_RELEASE=12.0 ...
- ubuntu 下截图工具的使用
我个人觉得,ubuntu自带的截图工具功能就不错.具体使用如下: 在ubuntu下的系统设置中找到硬盘区的“键盘”处,进入该设置界面如下: 选择标签“快捷键”,进入新设置界面如下所示: 之后,你就可以 ...
- UBUNTU下FPT工具--lftp使用说明
lftp 是UBUNTU下一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps 和https需要在编译的时候包含open ...
- 转:Ubuntu下下载工具安装--uget+aria2
原文地址:http://burner1024.blog.163.com/blog/static/17447800420126191858424/ Windows下的下载工具--迅雷,之所以下载速度快, ...
- Ubuntu 下串口调试工具
1. cutecom 安装:sudo apt-get install cutecom 打开方式: 在终端输入:cutecom,即可打开串口工具 或者在应用中,点击 cutecom 图标打开 打开后的界 ...
- ubuntu下截图工具推荐 -- [deepin-scrot]
有时候我们需要在linux下截图来保存.如果你仅仅需要全屏截图的话其实可以直接按键盘上的PrScrn或者Press Print键盘按键来实现即可: 但是如果你需要对截图的图片进行标记.画个线画个圈加个 ...
- ubuntu 下串口调试工具 minicom安装与配置cutecom安装
安装minicom: $sudo apt-get install minicom 配置minicom: 如果您的系统的默认语言不是英文,请执行下面的命令: $LANG=EN ...
- linux下串口工具minicom
系统环境:ubuntu 14 .04 和ubuntu 16.04 我当时的需要主要是两个,能够看到正常串口输出,并且把串口内容实时输出到文件中 那接下来工作主要是两个:1.安装 2.配置 相信各位 ...
- ubuntu 下串口调试工具 minicom安装与配置
检查系统是否支持USB转串口: lsmod | grep usbserial 如果有usbserial,说明系统支持USB转串口. 识别串口设备: 插上USB转串口,在终端输入命令: #dmesg | ...
随机推荐
- 【ASP.NET Core】修改Blazor.Server的Hub地址后引发的问题
Blazor Server,即运行在服务器上的 Blazor 应用程序,它的优点是应用程序在首次运行时,客户端不需要下载运行时.但它的代码是在服务器上执行的,然后通过 SignalR 通信来更新客户端 ...
- 第二章 数据和C
2.1错误和警告 如果输入这个程序的过程中出现错误(error),比如少了一个分号,编译器会给出语法错误消息.即使输入正确,编译器还可能发出这样的警告(warning):"警告------从 ...
- 再谈回声消除测评丨Dev for Dev 专栏
本文为「Dev for Dev 专栏」系列内容,作者为声网音视频实验室工程师 黄译庆. 音频质量的优化是一个复杂的系统工程,回声消除是其中一个老生常谈的话题,一般来说,回声消除的效果受设备本身的声学设 ...
- 基于 Agora SDK 实现 iOS 端的多人视频互动
视频互动直播是当前比较热门的玩法,我们经常见到有PK 连麦.直播答题.一起 KTV.电商直播.互动大班课.视频相亲等. 本文将教你如何通过声网Agora 视频 SDK 在iOS端实现一个视频直播应用. ...
- ACM-刷题记录-14届NEFU校赛
P2031凯撒密码 #include<bits/stdc++.h> using namespace std; int main(){ string s; int d; while(cin& ...
- Git Commit Message 应该怎么写?
原文链接: Git Commit Message 应该怎么写? 最近被同事吐槽了,说我代码提交说明写的太差.其实都不用他吐槽,我自己心里也非常清楚.毕竟很多时候犯懒,都是直接一个 -m "f ...
- [数据库]mysql/mysqldump命令帮助说明
1 mysql [root@test ~]# mysql --help mysql Ver 14.14 Distrib 5.7.24-27, for Linux (x86_64) using 6.0 ...
- CSS样式中颜色与颜色值的应用
使用CSS描绘页面样式时,颜色是其中不可或缺的,无论是对文本.背景还是边框.阴影,我们都写过无数代码用来增添颜色.而为了让网页的色彩表现更出色,我们很有必要完整梳理下CSS中的色彩. 要讲清楚CSS中 ...
- day26:装饰器&面向对象当中的方法&property
目录 1.装饰器 1.1 装饰器的基本用法 1.2 @符号的使用 1.3 装饰器的嵌套 1.4 用装饰器扩展带有参数的原函数 1.5 用装饰器扩展带有参数和返回值的原函数 1.6 用类装饰器扩展原函数 ...
- Android ViewGroup的事件分发机制-源码分析
为了更好的理解ViewGroup的事件分发机制,我们在自定义一个MyLinerLayout. public class MyLinearLayout extends LinearLayout { pr ...