Chinaunix首页 | 论坛 | 博客
  • 博客访问: 290268
  • 博文数量: 23
  • 博客积分: 491
  • 博客等级: 下士
  • 技术积分: 612
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-29 19:57
文章分类

全部博文(23)

文章存档

2013年(1)

2012年(22)

我的朋友

分类: C/C++

2012-07-11 17:54:53

问题描述:

       Qt程序没启动之前,串口能正常收发数据,Qt程序一启动,串口数据全零。

猜想:

       硬件:串口与LCD控制器端口复用

       软件:主程序线程编程方式存在bug;   Qt程序共享内存机制等干扰串口数据;   Qt初始化环境变量对串口占用;  

解决过程:

       用万用表检测串口各端口与LCD控制器各端口是否复用,结果表明,没有复用

       修改主程序线程运行方式,Qt运行之后串口数据依然全零。而且在命令行下输入

echo hello > /dev/ttyS0 数据依然全零,表明问题根源在于串口本身,而不是线程无法运行。

       编写最简单的Qt界面程序运行,串口数据全零。说明只要Qt程序一运行,串口就无法正常工作,问题不在共享内存机制上。

       尝试只初始化Qt环境变量而不运行Qt程序,串口收发正常,表明问题不在环境变量。

 

 

最终结果:Qt程序启动干扰了串口的波特率,把波特率重新设置为115200可正常工作。

具体措施:在命令行输入setty /dev/ttyS2 115200,或者在脚本中添加sleep 5  

setty /dev/ttyS2 115200   (在脚本中加上sleep 5是因为Qt程序启动需要一定时间,要等Qt程序启动完成再设置波特率,不然设置完波特率后Qt程序正在启动着依然会干扰波特率)

阅读(7543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~