查看: 2416|回复: 7

[原创] 米尔电子HMI试用报告#8——直流充电桩充电界面(三)

[复制链接]
  • TA的每日心情
    开心
    7 天前
  • 签到天数: 1011 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2019-5-13 22:02:13 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 idiy 于 2019-5-14 18:27 编辑

    串口接收数据及切换界面显示

    确定UART连接及在开发板上的名称

    i.MX6ULL 和 i.MX6UL 系列处理器最高可达 8 路异步串口。由于芯片的管脚复用关系,
    MYB-Y6ULX-HMI 底板扩展出了 1 路 TTL 电平调试串口,1 路 RS232 通讯串口和一路
    RS485 通讯串口。先来看看开发板上的硬件连接,如下图:


    UART硬件连接.png

    由图可知,RS232连接的是UART2。

    查看系统里的串口名称:

    1. ls -l /dev/tty*
    复制代码


    串口名称.png

    查看串口驱动:

    1. cd /proc/tty/driver
    2. ls
    3. cat IMX-uart
    4. cat fsl-lpuart
    5. cat usbserial
    复制代码


    串口驱动.png

    查看串口设备:


    1. dmesg | grep tty*
    复制代码


    串口设备.png

    由以上判断,UART2在开发板上的名称为 /dev/ttymxc1。

    我们来测试一下,对/dev/ttymxc1 进行设置(115200 8 N 1)


    1. stty -F /dev/ttyS0 speed 115200 cs8 -parenb -cstopb  -echo
    复制代码


    用RS232连接线连接开发板和PC,打开串口调试助手,串口设置为 115200 8 N 1,然后打开串口:
    在开发板上输入:


    1. echo "12345" > /dev/ttymxc1
    复制代码


    串口调试助手显示如下:

    串口测试.png

    正确接收到了开发板上发送过来的字符串,说明连线和UART2名称都是正确的。

    其实,以上只是为了加深印象而做的测试。有更好的办法来确定UART的名称。就是利用开发板上预装的串口应用来进行回环测试。

    回环测试.jpg

    在充电桩应用中添加串口代码

    打开串口:


    1. void SystemContentWidget::openSerial()
    2. {
    3.     if(!openFlag)
    4.     {
    5.         QString serialPortStr = "/dev/ttymxc1";
    6.         QString rateStr = "115200";
    7.         QString checkBitStr = "NONE";
    8.         QString dataBitStr = "8";
    9.         QString stopBbitStr = "1";
    10.         qDebug() << "serialPortStr: " << serialPortStr;
    11.         qDebug() << "port: " << serialPortStr;
    12.         qDebug() << "rate: " << rateStr;
    13.         qDebug() << "check: " << checkBitStr;
    14.         qDebug() << "data: " << dataBitStr;
    15.         qDebug() << "stop: " << stopBbitStr;

    16.         QString tty_configure;
    17.         int fd;
    18.         fd = m_mxde->callOpenSerialPort(serialPortStr,tty_configure);
    19.         qDebug() << "open ret: " << fd;
    20.         if(0 == fd)
    21.         {
    22.             QStringList list = tty_configure.split(" ");
    23.             m_serial_fd = list.at(1).toInt();
    24.             qDebug() << "m_serial_fd: " << m_serial_fd;
    25.             qDebug() << "tty_configure: " <<  tty_configure;

    26.             setCurrentConfigure(list);
    27.             openFlag = true;

    28.         }
    29.         else
    30.         {

    31.             QString serial_param;
    32.             int serial_mode = TTY_RS232_MODE;
    33.             int tty_flow = 0;

    34.             m_serial_fd = fd;
    35.             checkBitStr = "NONE";
    36.             QByteArray check = checkBitStr.toLatin1();
    37.             serial_param.sprintf("%d %d %d %d %d %s %d",m_serial_fd,rateStr.toInt(),dataBitStr.toInt(), serial_mode, tty_flow,check.data(),stopBbitStr.toInt());
    38.             m_mxde->callSetSerialPort(serial_param);

    39.             openFlag = true;
    40.         }
    41.     }
    42.     else    // 关闭串口
    43.     {
    44.         m_mxde->callCloseSerialPort(m_serial_fd);
    45.         m_serial_fd = 0;
    46.         openFlag = false;
    47.         qDebug() << "closed ...";
    48.     }
    49. }
    复制代码


    接收数据及处理:


    1. void SystemContentWidget::onSerialRecvData(int uart_fd, const QString &data, int size)
    2. {
    3.     if(m_serial_fd == uart_fd )
    4.     {
    5.         QByteArray ba = data.toUtf8();
    6.         char c = ba.data()[ba.size()-1];
    7.         if (isdigit(c))
    8.         {
    9.             if ((c > '0') && (c <= '0' + layoutTotal))
    10.             {
    11.                 layoutIdx = c - '1';
    12.                 layoutAddWidgetByList(mWidgetList[layoutIdx]);
    13.             }
    14.         }
    15.     }
    16. }
    复制代码


    串口助手设置


    串口助手设置.png

    实际显示效果,由串口助手一秒钟发一条切换界面指令


    实际效果.gif

    嗯,完成了最基本的要求了。等我把源码整理一下,上传到github。


    源码在这
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 16:09
  • 签到天数: 38 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2019-5-15 09:43:47 | 显示全部楼层
    完结撒花,辛苦了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-2-25 14:56
  • 签到天数: 643 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2019-5-15 17:32:10 | 显示全部楼层
    你好
    下了你的工程代码,编译一下,发现个问题解决不了,问一下如何办
    2019-05-15 17-28-04屏幕截图.png

    右下角4个,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 1011 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-5-15 18:12:41 | 显示全部楼层
    本帖最后由 idiy 于 2019-5-15 20:21 编辑
    HXM9531 发表于 2019-5-15 17:32
    你好
    下了你的工程代码,编译一下,发现个问题解决不了,问一下如何办

    这代码我上传到github,删掉原来的代码,再次下载重新编译测试过的。
    我没有遇到这样的问题,你点下方编译输出看是什么报错信息。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 1011 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-5-15 18:15:32 | 显示全部楼层
    HXM9531 发表于 2019-5-15 17:32
    你好
    下了你的工程代码,编译一下,发现个问题解决不了,问一下如何办

    或者你删除掉同级目录下的build_mxde_...目录
    或者你把代码放到另外一个目录再次编译
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-2-25 14:56
  • 签到天数: 643 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2019-5-16 09:45:19 | 显示全部楼层
    你好,这两个方法都不能编译通过,第2种新建个目录后,把下载的文件解压后放到新建目录,在QT打开就出现这个图: IMG_20190516_093152.jpg
    IMG_20190516_094231.jpg IMG_20190516_094306.jpg IMG_20190516_094316.jpg
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 1011 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2019-5-16 22:27:39 | 显示全部楼层
    HXM9531 发表于 2019-5-16 09:45
    你好,这两个方法都不能编译通过,第2种新建个目录后,把下载的文件解压后放到新建目录,在QT打开就出现这 ...

    1、你检查一下Qt Creator的配置。特别是qtcreator.sh里有一个source,要改成你的SDK的安装目录。
    2、截图要截error信息,不是warning信息。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-3-19 11:28 , Processed in 0.196463 second(s), 30 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.