(串口通信编程) 开源串口调试助手Common (Com Monitor)
最新的文档见这里:http://blog.twofei.com/566/
我写的串口调试助手程序以及源代码.
警告:请勿将本软件源代码用于任何商业用途。
其实吧, 我写的这个串口软件绝对比网上流传的一些串口调试软件好用很多, 对于软件,我本身并没有作
太多推广, 一些功能我由于懒也没有文档化; 如果您正在使用, 也觉得我说得没错, 还望您帮忙推广一下. 感激!
本程序最近正在使用C++完全重构, github上面的源代码无法通过编译~~
敬请期待最新版本!
微云你就一坑货, 说了的链接永久有效呢?
源代码:https://github.com/movsb/common.git
声明:本软件为开源软件,绝对不包含任何对系统不利的代码,对于360的那种行为,我不想说什么.
软件界面:
-------------------------------------------------------------------------------------------------------------------------
说明: 更新信息可能不会再更新到这里, 请到GitHub上面查看.
更新:
2014-07-07:
①优化:接收数据时,如果最后一个字符是'\r'或'\n',则会在一定时间内等待接收所有'\r','\n'字符,避免导致读取'\r\n'可能造成的两次换行
②更改:除已经提到的那三种情况, 还有使用'\r\n\r'三个字符作为换行符使用的, 已增加支持
2014-07-07:
①修复:回车换行字符'\r','\n','\r\n'均能达到换行效果
②修复:一开始"忽略回车"等无法点击问题
③优化:简化对数据中包含'\0'的数据的处理
④增加:简洁界面模式时把工具栏放到左边
⑤更改:只显示接收区按下的"回车"字符为"<Enter>",其它不显示
⑥增加:接收区增加一个"清空数据"菜单
2014-07-06 1.17:
①增加:允许从接收区输入字符并发送(更友好的类交互模式)
会显示的字符包括:
' ' <Space>
'\b' <Backspace>
'\t' <Tab>
'\r' <Enter>
感觉输入效果还不错:
②更改:更改了字符接收区/发送区的字体为Consolas等宽字体,不再使用原来的Courier字体
③增加:简洁模式 - 此模式下大部分界面元素会被隐藏, 有时候这样更舒服
见上图所示, 左下角为"简洁模式"开关, 开启简洁模式后就像上图, 是不是很简洁?
④增加:主窗口的自动界面布局(允许拖动改变窗口大小,控件坐标自动调整)
⑤更改:默认使用的模式改为:字符接收+字符发送
2014-07-05 1.16 (未对外发布):
①字符接收数据时,增加对控制字符Backspace的支持(即'\b'),效果就是向前删除一个字符
②修复一处中文检测错误(原来是对的, 不知道什么时候改错了
③删除了窗体大小调整(下个版本即将使用自动布局)
2014-03-03 1.15:
更新:支持手动输入非标准波特率
改进:增加了几个功能快捷键,比如Alt+S为发送,....
优化:修正:如果接收缓冲区有未显示的数据,则会在按下继续显示时进行提示,而不是原来的在接收到下一次的数据时进行提示;
2013-11-02 1.14:
更新:修改了原来的命令发送模式的界面,现在变得更加友好了
如下图, 先选择要发送的命令列表文件:
点击打开, 将会打开如下界面:
1.上面的代码是我测试蓝牙芯片用到的命令列表文件, 点击"发送命令"就会发送对应的一条命令
2.16进制还是原来的要求, 2个一组即可; 对于字符数据:默认开启转义字符功能, 比如 '\n' 就代表换行,
支持字符型转义字符有6个, \n,\r,\\,\t,\a,\v,\b, 那些可见的字符不需要转义, 比如引号,问号...
支持的16进制转义字符格式:\x?? - 其中, 一个?代表一个16进制字符, 以上4个字符组成一个16进制值,缺一不可
3.文本框中的数据可以在发送时随时修改,回车键可看到效果, (但修改的内容目前不能更新到原来的本地文件上)
4.注意到数据类型后面的"双击改变"几个字样, 也就是说通过双击, 可以改变那条命令的解析格式
5.数据大小是指最终要被发送的数据的大小, 而不是转义前的大小
命令文件的格式举例:
C:初始化SPP库:at+init\r\n
C:查询任意访问码的蓝牙设备:at+iac=9e8b33\r\n
C:查询设备类为0x1f1f的蓝牙设备:at+class=1f1f\r\n
C:设置查询模式:at+inqm=1,9,48\r\n
C:过滤,查询周边蓝牙设备:at+inq\r\n
H:16进制测试:12 45 67 4f
分为3部分组成, 两者之间用冒号隔开:
第1部分:C或者H(大写), 代表数据是16进制还是字符数据
第2部分:命令的名字
第3部分:数据对应的数据
BUG修复:
上一个版本在发送数据前忘记检查串口是否已经打开了, 已修复~
----------------------------------------------------------------------------------------------------------
2012-12-24 1.0.0.0:
发布第1个版本
2012-12-26:
自动识别当前存在,插入,移除的串口号
2013-01-11 1.0.0.1:
增加保存接收区数据到文件(16进制/文本形式)
增加从文件读数据到发送区(16进制/文本形式)
增加暂停显示功能
增加复制发送/接收区数据到剪贴板
2013-01-18 1.0.0.2:
修复:文本文件,16二进制文件读取错误
修复:程序内部缓冲区满后使程序进入死循环
修复:文本字符方式显示接收的数据时产生不正确的换行符的错误,若要产生换行符, 请使用"\n"
2013-02-08 1.0.0.3:
内部程序作了许多的优化工作,包含数据的发送方式等
修复接收数据时鼠标在接收区的文本选择造成的干扰
2013-02-14 1.0.0.4:
增加显示出0~127号ASCII对应8,10,16进制功能
2013-02-24 1.0.0.5,今天元宵节:
更改原来的1~64串口列表到自动检测计算机上的可用串口
2013-02-27 1.0.0.6:
若发送文本,则自动发送被自动取消(若自动发送选项已打开)
在显示模式下不允许对接收区数据进行选择操作
提供硬件支持的串口设备设置
为用户提供串口超时设置
提供手动设置DTR/RTS引脚电平
2013-03-01 1.0.0.7:
修改原计算器(系统)为表达式求值计算器(简单版本)
2013-03-03:
添加:<其它>菜单添加<设备管理器>
修改:在关闭串口后自动发送前面的钩不再自动取消(如果已经选中)
修改:串口被关闭/移除后串口列表回到第一个串口设备的BUG
2013-03-04:
修改:现在在串口列表中可以显示串口在设备管理器中的名字了
修正:无法显示 MSP430-FETUIF Debugger 的串口号(现在调用SetupApi更新列表)
2013-03-05:
为了方便数据的统计与显示,16进制内容与字符内容被显示到不同的编辑框中
2013-03-09 1.0.0.8:
修正在使用SetupApi枚举串口设备时未检测并口设备而造成的内存异常访问错误
减少在某些波特率(如:19200bps)下丢包严重的情况(如:MSP430串口),有时候还是会发生,等待修复.某些软件(如:SComAssistant采用每
次只读一个字节的办法效果还行, 就是速度有点慢. 我改成了WaitCommEvent函数调用了(原来是Pending ReadFile),减少了CPU占用(有些串口驱动并不总是支持同步操作.
以前只管ReadFile+输出nRead字节,这里错误,ReadFile并不保证读取到要求的数据量后才返回,这里会导致严重丢包,WriteFile亦然.
速度减慢,但数据更完整
2013-03-10 1.0.0.9:
修正:因为在格式化字符串的最后少写了一句 *pb = '\0',导致接收区数据显示错误!
修复:对utils.hex2chs和add_text作了大量修改,大大减少数据丢包,貌似没有丢包?,细节处理参见源程序
1.0.0.8版本因为内部原因速度严重减慢, 1.0.0.9回到原来的快速!
2013-03-18:
更正:若为字符显示方式,16进制方式保存不被允许,因为格式基本上不满足!
2013-03-23 1.10:
添加:工作模式中,右键点击接收区字符文本框可以使能中文显示模式(不推荐),由于中文字符由
两个字节构成,所以:一旦在某一次接收过程中只
接收到了中文字符的一个字节,那么数据就会显示出错, 这个无法避免, 所以建议尽量不使能中文显示模式.
修正:用C语言的人们都习惯使用'\n'作为换行符,我也这样使用,
但偏偏Windows的编辑框以'\r\n'作为换行符,没有办法,我不得
不把所有的'\n'换成'\r\n',效率必然会下降,而且我不得不计算出
\n的个数先 --> 为了计算所需缓冲区的大小.
添加:现在可以显示出还未被发送出去的数据计数.
添加:新增计时器,打开串口后开始计时,关闭后停止计时.
2013-03-25:
修正:大大减少中文乱码的问题.细节处理见代码.
增加:字符串转16进制数组功能,工具菜单里面.
2013-04-04:
修正:无法复制接收区字符文本的BUG.
小提示:在选择串口时,如果没有任何可用的串口,则进行提示更新.
2013-04-07:
修改:完全修改了utils.str2hex的实现,大大增加了16进制输入的灵活性.
现在的要求:每个16进制值由两个相邻字符组成,无其它限制.(以前是2个相邻字符+一个空格)
2013-04-11:
发送字符数据时,对于换行,只发送'\n',不再发送'\r\n',注意:结尾的'\0\'不被发送!
2013-04-13:
修正:更改发送与接收方式为异步方式.
添加:简单波形显示.
2013-04-23:
修正:发送与接收方式改回同步方式!坑~
修正:当发送操作达到100次时无法继续发送的BUG!
修改:优化内部线程同步机制,避免程序停止工作(失去响应)!
优化:优化自动发送数据的方式,提高精度,减小内存/CPU占用!
小提示:在加载/保存文件时,若不清楚打开/保存方式,可以查看简单的帮助信息!
2013-05-11:明天母亲节
修正:终于找到一个比较好的办法来处理自动发送用到的重复数据了,呵呵,时间下限减少到10ms
2013-07-05:
临时修正:选择从文件加载并取消后, 串口号选择的ComboBox会消失不见,不知道原因,临时已解决
2013-07-14:
改进:程序内部改进内存分配算法,避免因程序错误造成内存泄漏
2013-07-20 1.12:
2013-09-10 1.13 今天教师节:
增加:现在可以手动编写待发送的命令文件,并发送命令了 - 在发送文件时选择 命令文件, 格式见博客后面的介绍
增加:字符发送模式下,可以选择取消回车换行符的发送,可以选择插入转义字符
1.支持的字符型转义字符:
\r,\n,\t,\v,\a,\b,\\
2.支持的16进制转义字符格式:
\x?? - 其中一个问号代表一个16进制字符, 不可省略其一,
必需保证4个字符的格式
3.'?',''','"', 等print-able字符不需要转义
女孩不哭 @ 2012-12-27 14:47:59 @ http://www.cnblogs.com/memset