Ubuntu下串口工具 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/picocomWolfram Sang 维护的, 在原仓库基础上继续开发的一个版本安装在 Ubuntu 上直接通过sudo apt install picocom
安装, 版本是3.1
使用 115200 波特率连接串口设备 /dev/ttyUSB0
【资料图】
picocom -b115200 /dev/ttyUSB0
断开有两种方式
Ctrl+A, Ctrl+Q退出, NO RESETCtrl+A, Ctrl+X退出, RESET在串口通信时, RTS(Ready To Send)会处于低电平, 当断开串口时如果RESET, 就会恢复高电平, 默认会进行RESET.
在调试STC单片机的时候, 往往会使用带自动烧录的串口转USB设备连接, 而这种设备的自动烧录机制, 就是通过拉低RTS触发MCU断电重启. 在使用这种RTS触发的设备进行烧录和调试时, 就要灵活使用RESET机制.
当进行调试时, 我们不希望每次连接MCU时自动重启, 因此断开串口时要避免RESET, 让RTS一直处于低电平, 断开连接时使用 Ctrl+ACtrl+Q退出, 可以避免RESET当进行烧录时, 如果RTS还处于低电平, 拉低RTS无效, 导致无法重启MCU. 所以在烧录时, 断开串口要RESET, 让RTS回到高电平, 使用 Ctrl+ACtrl+X退出PS: 这个功能在 picocom 上工作是正常的, 但是在 minicom 上工作不正常, 使用 Ctrl+A, Q 退出一次之后, 无论再使用 Ctrl+A,X, 还是 Ctrl+A,Q 都无法再触发 RESET
显示二进制在调试串口通信时, 有时候需要观察串口的二进制输出, 这时候就需要将数据通过16进制打印出来, 在 picocom 下需要用 --imap
参数, 这个参数是一个多选项, 可以区分不同类型的数值进行转换.
--imap
例如
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
增加定义, 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+ACtrl+N依次切换不同显示格式, 也可以在启动时直接指定, 例如
./picocom --imap nrmhex,8bithex /dev/ttyUSB0 -N3
参考https://kaisenlinux.org/manpages/picocom.html
标签:
为您推荐
广告
- Ubuntu下串口工具 PicoCOM 的使用和时间戳显示 焦点讯息
- 伪满皇宫博物院博物馆之眼艺术宫将于5月18日盛大开启 诸多文物即将首展 当前热议
- 尼日利亚姆巴佩今年第3次戴帽,19场19球五大联赛外第一妖星
- 用哪种方向盘? 特斯拉新款Model 3内饰首曝_天天视点
- 焦点热讯:护字书法 虎字书法
- 精简人员、缩减投资,福特在华被迫“瘦身”?
- 通讯!上海交通大学在职研究生档案调入问题需注意吗
- 女王蜂 - 回春
- 停云 vol.6 快资讯
- 天天亮点!德国宣布向乌克兰追加27亿欧元军事援助
- 全球今头条!教你一个华丽的健身技巧
- 当前观察:我是民营企业家丨刘曰兴:赋予纺织行业更多“新玩法”
- 今年山西将开展消费促进活动超百场
- 荣耀13英寸平板:骁龙888+66W快充
- 【全球报资讯】沈阳一车辆失控撞上行人及车辆是什么情况
- 回到崇祯末年txt下载-回到崇祯末年 世界新视野
- 适当的多喝水有助减肥吗蚂蚁庄园_适当的伪装 全球信息
- 环球时讯:长春中医学院神经内科专家_长春中医学院高血压临床研究院
- 男子随防盗网从六楼坠落身亡是什么情况
- 我国万吨海上油气平台开始对接安装 全球最资讯
- 1苦荞茶的功效与禁忌是什么_苦荞茶的功效与禁忌
- 2【国际锐评】谁在破坏国际规则?这个“小圈子”不妨照照镜子|今日报
- 3李阳疯狂英语集训营费用_请教李阳疯狂英语集训营的方法
- 4读懂孩子心理,从这本绘本开始……
- 5【全球播资讯】塞尔达传说王国之泪吉乌可乌每神庙解谜攻略一览
- 6曹植洛神赋名句_洛神赋名句-环球时快讯
- 74月份江苏CPI同比持平
- 8环球微动态丨通源环境:5月12日融资买入75.62万元,融资融券余额2615.85万元
- 9重庆姐弟坠亡案事发房子已被卖掉具体详细内容是什么_全球今亮点
- 10原油收盘:经济前景担忧施压 原油连续四周录得下跌
- 1得了子宫肌瘤怎么办才好_得了子宫肌瘤怎么办 焦点热文
- 2今日精选:协约国是什么意思?-协约国是什么意思
- 3环球快讯:越南首富反向收购SPAC实现“电动车IPO”梦想 估值近230亿美元
- 4小布说丨2023年度唐山市“最美科技工作者”揭晓!国内首条!会“飞”的列车真来了
- 5联合国:超1.8万人从苏丹进入埃塞俄比亚|微资讯
- 6NBA季后赛:勇士胜湖人
- 7苏式月饼图片大全_苏式月饼图片
- 8全球聚焦:居民个人出境旅行增多,一季度旅行逆差434亿美元增58%
- 9三力士:公司经过多年发展,在自主技术创新、新产品及自动化设备研发及研发、人才培养、质量与品牌、销售网络和售后服务体系、成本管理等方面具有独特的竞争优势
- 102023年广州普高名额分配各区详细结果出炉!
广告
- 维普网查重和知网差别_维普网查重
- 全球消息!四川广汉:所地共建 助力社区矫正工作提质增效
- 翻斗式矿车卸矿(翻斗式矿车)
- 报道:广西多举措激发人才创新创造活力 引领支撑高质量发展
- 王莉丽:打好国际传播这场思想之战
- 焦点信息:看这男顶流穿女装,比露肉还上头
- 湖北能源:4月完成发电量同比减少15.87%
- 2022年湖北建筑业产值达2.11万亿元,正从“制造”走向“智造”|精彩看点
- 【全球独家】4月份全国新办涉税经营主体148万户 同比增长28.8%
- 诈骗后报案要有什么证据|世界看点
- 【世界新要闻】美国银行业动荡之际 日本投资者Q1美债净买入总额创18年以来最多
- 快消息!学前特殊儿童综合主题教学活动设计
- 商汤与人民网灵境•人民艺术馆战略合作,为"数字+文化"点睛|环球要闻
- 勇士队与湖人队展开了西部半决赛G5的对决-环球关注
- 文字玩出花恋爱脑通关攻略 世界简讯
- 世界滚动:排插接线图片红线 是什么线_排插接线图
- 天猫直营店和旗舰店的区别
- 邮你贷网贷逾期39年还不起会上征信吗
- 世界消息!迷你世界方西瓜怎么变成西瓜片(迷你世界里的西瓜怎么变成西瓜片)
- 郭德纲昔日爱徒曹云金直播说相声,暗讽德云社门票贵,双方开战了|世界简讯