打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Qt遍历串口以及串口操作
userphoto

2022.10.02 北京

关注

一、添加串口模块

cmake中添加:

#添加SerialPort模块 下面整句添加
qt5_use_modules(${PROJECT_NAME} Core SerialPort)

或者

find_package(Qt5Core  COMPONENTS Qt5SerialPort REQUIRED)

 

二、遍历串口

#include <QtSerialPort/QSerialPort>//串口接口
#include <QtSerialPort/QSerialPortInfo>//串口接口信息

  1. /**
  2. * @brief枚举出所有的串口,并寻找出指定描述Description的串口,比如NDI导航头的serialPortDescription可以在设备管理器中查看
  3. * NDI的serialPortDescription一般不会变,可用于自动识别串口
  4. *
  5. */
  6. std::string NDICAPI::getSerialPortName(std::string serialPortDescription)
  7. {
  8. std::string retPortName {};
  9. foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
  10. {
  11. //通常通过串口名称进行连接,例COM1,所以在此处获取串口名称
  12. // qDebug() << "Name : " << info.portName();
  13. // qDebug() << "Description : " << info.description();
  14. // qDebug() << "Manufacturer: " << info.manufacturer();
  15. // qDebug() << "Serial Number: " << info.serialNumber();
  16. // qDebug() << "System Location: " << info.systemLocation()<<"\n";
  17. if(serialPortDescription == info.description().toStdString())
  18. {
  19. #ifdef _WIN32 // Windows serial port implementation
  20. retPortName = info.portName().toStdString();
  21. #else // Mac/Linux serial port implementation
  22. retPortName = info.systemLocation().toStdString();
  23. #endif
  24. }
  25. }
  26. if(retPortName == "")
  27. {
  28. qDebug() << "can not find SerialPortName,please check serialPortDescription";
  29. std::cout << "Press Enter to continue...";
  30. std::cin.ignore();
  31. exit(-1);
  32. }
  33. return retPortName;
  34. }

三、参考链接:

https://blog.csdn.net/zusi_csdn/article/details/80976841

https://stackoverflow.com/questions/34128686/how-do-i-add-qserialport-module-into-cmake/34130985

 

四、Linux串口配置

https://blog.csdn.net/liudsl/article/details/79266003

注意:串口数据/t-/n的转换

    config.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    config.c_iflag &= ~(INLCR| ICRNL | IGNCR);
    config.c_cc[VMIN] = 0;                  /* use constant, not interval timout */
    config.c_cc[VTIME] =100/100; /* wait time is in 10ths of a second */

注意:清楚缓存区

    tcflush(fdComm_, TCIOFLUSH);
    tcflush(fdComm_, TCIFLUSH);
    tcflush(fdComm_, TCOFLUSH); /* clear input/output buffers */

 

链接:

https://blog.csdn.net/coobutter/article/details/17502367

https://www.cnblogs.com/zgq0/p/8078505.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Qt中如何针对串口大数据量通信进行流式处理
qDebug 学习小结
利用回调函数实现DLL与Qt主程序的数据交互,进一步实现对Qt主程序中的信号触发
Qt5 中文乱码解决方法剖析
QT项目
QMake介绍以及使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服