分类: 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程序正在启动着依然会干扰波特率)