本文导读
ZMP110x创新串口屏应用开发如何脱离硬件,仅在PC上就完成全部的UI开发和通信调试工作?下面就跟随小编步伐,一起玩转虚拟串口屏开发模式吧。
普通串口屏需要拿到实物后,使用对应的上位机进行开发、烧录,然后下载到串口屏中进行验证;但既然都用串口屏了,电脑上也有串口,也有屏幕,为啥开发过程不在电脑上一步到位呢?下面一起看下ZMP110x创新串口屏应用开发如何以虚拟串口的方式在PC上完成全部的UI开发和通信调试工作。
AWTK 全称 Toolkit AnyWhere,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎。基于“AnyWhere”这一特性,在AWTK Designer中拖拽生成的UI,本来就可以在“AnyWhere”中运行。
实现思路
基于这一思路,只需将PC端模拟运行的串口屏程序的“串口”补齐,使其具备收发串口数据的功能,就能仅在PC端完成ZMP110x串口屏的开发验证!
虚拟串口
这一步有许多的现有方案,本文就不再赘述。
打开串口
使用AWTK集成的串口流扩展模块tk_iostream_ serial_t中的tk_iostream_serial_create函数打开串口。
收发数据
串口屏中接收到数据会发送一个自定义的消息,调用串口指令解析函数,并把数据传入函数中;为了兼容串口屏程序,PC端也采用了同样的操作。
至于发送数据就更加简单,增加与串口屏中同名的发送函数,在函数中调用串口输出流,发送串口数据。
实际操作
如图所示,经过优化,客户在实际使用时仅需拷贝两个文件夹,修改两个文件即可。
1.以新建的空白UI为例,将“pc_uart_debug”和“serial”两个文件夹粘贴在UI工程路径下的src文件夹:
图1 全部更改图示
串口默认配置为baudrate=115200 bytesize=8 stopbits=1 flowcontrol=0 parity=0,如需修改,可在pc_uart_debug/ pc_uart_debug.h中修改:
#define PC_UART_BAUDRATE 115200 #define PC_UART_BYTESIZE 8 #define PC_UART_PARITY 1 #define PC_UART_STOPBITS 0 #define PC_UART_FLOWCONTROL 02. 在“application.c”中添加串口初始化及解初始化函数:
/** * 当程序初始化完成时调用,全局只触发一次。 */ static ret_t application_on_launch(void) { pc_uart_debug_init(); //PC端串口初始化 return RET_OK; } /** * 当程序退出时调用,全局只触发一次。 */ static ret_t application_on_exit(void) { pc_uart_debug_deinit(); //PC端串口解初始化 return RET_OK; }3. 用文本编辑器打开“SConscript”,由于实现枚举串口的为C++程序,所以得在源文件中加入cpp文件:
import os import sys import platform env = DefaultEnvironment().Clone() BIN_DIR = os.environ['BIN_DIR'] LIB_DIR = os.environ['LIB_DIR']; sources = Glob('**/*.c') + Glob('*.c') + Glob('**/*.cpp') env.Program(os.path.join(BIN_DIR, 'demo'), sources, LIBS = env['LIBS'])
修改完毕,在AWTK Designer中打开此工程,编译后点击模拟运行,在弹出的UI窗口中会出现选择串口的白色小框;此时电脑上已有两个互相连接的虚拟串口COM5和COM6,点击OPEN按钮,令UI程序使用COM5,在串口助手中使用COM6,即可完成接下来的开发/测试工作:
图2 运行效果
恢复到实体串口屏
在电脑端完成开发后,将此UI加入到串口屏eclipse工程中仍旧仅需屏蔽“tests”文件夹,即可正常编译,编译完成后就能将UI固件下载到实体串口屏中,完成整个流程:
图3 eclipse工程中编译结果
效果展示
以串口屏的智能家居“hmi_demo”为例,加入上述文件后就能在PC端完成演示。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !