(串口通信编程) 开源串口调试助手Common (Com Monitor)

时间:2024-03-11 20:29:21

  最新的文档见这里: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:
   更新:修改了原来的命令发送模式的界面,现在变得更加友好了
     如下图, 先选择要发送的命令列表文件:
       choose_file.png
    点击打开, 将会打开如下界面:
      interface.png

      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