0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【Z站推荐】AWTK最新动态:使用serial_widget简化串口编程

ZLG致远电子 2022-08-08 10:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

把串口做成一个控件并不新鲜,在VB里有个通信组件,就是用来简化串口编程的。最近AWTK也提供了这样一个控件serial_widget,本文介绍一下它的使用方法。

1d247994-1516-11ed-9ade-dac502259ad0.jpg 基本功能我们编写一个简单的应用程序,它有两个功能:

  • 把收到的数据显示出来。
  • 把界面输入的数据发送给对方。


1d247994-1516-11ed-9ade-dac502259ad0.jpg UI界面描述文件1d3d20f2-1516-11ed-9ade-dac502259ad0.png

  

"open" text="Open Device" x="10" y="100" w="160" h="36" /> "device"x="180"y="100"w="-200"h="36"text="/dev/ttys032"/> "send"text="SendMessage"x="10"y="150"w="160"h="36"/> "send_msg"x="180"y="150"w="-200"h="36"text="helloserial"/> "recv_msg"x="c"y="b:100"w="90%"h="100"/> "serial"/>1d247994-1516-11ed-9ade-dac502259ad0.jpg 接收数据先注册数据事件的处理函数。

widget_child_on(win, "serial", EVT_DATA, on_data, win);

在处理函数中读取数据并显示到界面上。

static ret_t on_data(void* ctx, event_t* e) { char text[128] = {0}; widget_t* win = WIDGET(ctx); serial_widget_t* serial = SERIAL_WIDGET(e->target); widget_t* label = widget_lookup(win, "recv_msg", TRUE); int32_t len = tk_istream_read(serial->istream, text, sizeof(text)-1); if(len > 0) {
    text[len] = '\0';
    widget_set_text_utf8(label, text);
  }returnRET_OK;
}

1d247994-1516-11ed-9ade-dac502259ad0.jpg 发送数据

从界面读取数据,并发送到串口

static ret_t on_send(void* ctx, event_t* e) { char text[128] = {0}; widget_t* win = WIDGET(ctx); serial_widget_t* serial = SERIAL_WIDGET(widget_lookup(win, "serial", TRUE)); widget_t* edit = widget_lookup(win, "send_msg", TRUE);
  widget_get_text_utf8(edit, text, sizeof(text)-1);
  tk_ostream_write_len(serial->ostream, text, strlen(text), 3000); return RET_OK;
}

完整代码请参考 serial 可以下载 awtk-c-demos 编译运行。

./bin/demo_serial

1d247994-1516-11ed-9ade-dac502259ad0.jpg 测试

下面操作是在 Linux/MacOS 上测试的,Windows 下需要安装虚拟串口软件,具体做法有些不同,请自行调整。

使用socat创建虚拟串口

socat -d -d pty,raw,echo=0 pty,raw,echo=0

该命令会生成两个设备文件,对应串口的两端(每次生成的设备名可能不同)。

2022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys0322022/07/08 16:32:33 socat[1879] N PTY is /dev/ttys0332022/07/08 16:32:33 socat[1879] N starting data transfer loop with FDs [5,5] and [7,7]

在AWTK 这端我们使用设备/dev/ttys032
在另外一端读取数据
打开一个新的终端,并运行下面的命令(有数据时自动显示出来):

cat /dev/ttys033

在另外一端发送数据

打开一个新的终端,并运行下面的命令(发送当前时间字符串):

date >/dev/ttys033

1d247994-1516-11ed-9ade-dac502259ad0.jpg 使用fscript进行串口编程

也可以使用 fscript 进行串口编程(配合 AWBlock 就简单了)。AWTK 里提供一个与前面功能相同的例子,总体来看要简洁不少。

  

"打开设备" x="16" y="15" w="76" h="34" > "on:click"> var device = widget_get('device', 'text') widget_set('serial','device', device)

  "device" x="119" y="13" w="178" h="38" text="/dev/ttys028" />
  "recv" x="5" y="123" w="303" h="101" />
  "send" text="hello serial" x="5" y="273" w="200" h="34" />
  

"button" tr_text="send" x="220" y="274" w="81" h="34" > "on:click"> var os = widget_get('serial','ostream') var msg = widget_get('send', 'text') ostream_write_string(os, msg)

  "serial">
    "on:data">
      var is = widget_get('self','istream')
      var msg = istream_read_string(is, 100, 0)
      widget_set('recv', 'text', msg)    
  

在 AWTK 根目录下可以运行该例子,测试方法与前面相同。

./bin/preview_ui design/default/ui/serial.xml

1d247994-1516-11ed-9ade-dac502259ad0.jpg 移植

目前串口只实现了Windows, Linux, MacOS, Android 和 AWorks 等平台,其它平台需要自己移植。

请参考AWorks平台的移植:

src/platforms/aworkslp/serial_helper.c

【版权声明】本文为ZLG开发者社区用户原创内容,未经授权不得转载。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 串口通信
    +关注

    关注

    34

    文章

    1662

    浏览量

    58172
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IDT Serial RapidIO 交换机特性对比分析

    IDT Serial RapidIO 交换机特性对比分析 在电子工程师的硬件设计工作中,选择合适的交换机对于系统性能至关重要。Integrated Device Technology(IDT
    的头像 发表于 04-14 10:30 90次阅读

    Z86E23键盘微控制器:特性、功能与编程详解

    Z86E23键盘微控制器:特性、功能与编程详解 在电子设计领域,微控制器是众多项目的核心组件。今天我们来详细探讨Zilog公司的Z86E23键盘微控制器,它具有8K OTP(一次性可编程
    的头像 发表于 04-04 14:40 588次阅读

    深度解析 Z8E000 Z8PLUS 一次性可编程微控制器

    深度解析 Z8E000 Z8PLUS 一次性可编程微控制器 引言 在电子设计领域,微控制器扮演着至关重要的角色。ZiLOG 的 Z8E000 Z
    的头像 发表于 04-04 13:15 593次阅读

    深入解析Zilog Z80C30/Z85C30:多功能串口通信控制器的技术精髓

    Z80C30和Z85C30这两款CMOS SCC(Serial Communications Controller)串口通信控制器。它们在通信领域有着广泛的应用,下面就让我们一起来揭
    的头像 发表于 01-08 15:00 484次阅读

    深入剖析Z80C30/Z85C30 CMOS SCC串行通信控制器

    深入剖析Z80C30/Z85C30 CMOS SCC串行通信控制器 在当今的电子通信领域,串行通信控制器扮演着至关重要的角色。Zilog公司的Z80C30和Z85C30 CMOS SC
    的头像 发表于 11-26 16:22 1210次阅读
    深入剖析<b class='flag-5'>Z</b>80C30/<b class='flag-5'>Z</b>85C30 CMOS SCC串行通信控制器

    【EASY EAI】基于瑞芯微RV1126B的串口调试

    。1.2putty使用下面以putty来演示如何打开调试串口COM7。配置左侧的“serial”,波特率是1.5Mbps,如下图所示。配置左侧的“Session”,选择“Se
    的头像 发表于 11-14 11:46 7398次阅读
    【EASY EAI】基于瑞芯微RV1126B的<b class='flag-5'>串口</b>调试

    【EASY EAI】基于瑞芯微RV1126B 的串口调试说明

    putty来演示如何打开调试串口COM7。配置左侧的“serial”,波特率是1.5Mbps,如下图所示。配置左侧的“Session”,选择“Serial”并点击
    的头像 发表于 11-06 15:53 5307次阅读
    【EASY EAI】基于瑞芯微RV1126B 的<b class='flag-5'>串口</b>调试说明

    【CW32】uart_obj_fw 轻量级串口框架

    以下文章内容由CW32生态社区用户提供: https://gitee.com/teletubbies-die-of-murder/lightweight-serial-framework 介绍
    的头像 发表于 09-29 18:02 7937次阅读

    普源示波器DS1102Z-E调试串口通信信号

    串口通信作为嵌入式系统调试的核心手段,其信号质量直接影响数据传输的可靠性。普源DS1102Z-E示波器凭借其丰富的触发功能和精准的波形分析能力,成为调试串口通信的理想工具。本文将结合实际操作经验
    的头像 发表于 09-17 16:49 1240次阅读
    普源示波器DS1102<b class='flag-5'>Z</b>-E调试<b class='flag-5'>串口</b>通信信号

    上海泗博网关ENS-317——解锁串口设备数据直通 Modbus TCP 网络

    ENS-317是一款实现通用串口与Modbus TCP协议转换网关,配备双路RS485接口,可将多个采用自定义协议的串口设备与Modbus TCP主之间数据交互,从而轻松实现各类非标串口
    的头像 发表于 08-29 15:56 835次阅读
    上海泗博网关ENS-317——解锁<b class='flag-5'>串口</b>设备数据直通 Modbus TCP 网络

    PLC与从远距离通信:PXB-6030D的妙用

    在工业现场,Modbus串口通信的短距离限制一直是工程师们面临的难题。本期我们将探讨如何通过ZLG致远电子PXB-6030D解决主PLC与从设备之间的远距离通信问题。Modbus串口
    的头像 发表于 07-17 11:39 633次阅读
    PLC与从<b class='flag-5'>站</b>远距离通信:PXB-6030D的妙用

    PLC串口资源受限?用PXB-6030D轻松解决

    在工业自动化中,设备接口不匹配常常让人头疼。本期我们来聊聊当PLC只有串口可用,而从设备只有以太网口时,如何通过ZLG致远电子PXB-6030D实现Modbus设备的连接。PLC串口与从
    的头像 发表于 07-16 11:41 611次阅读
    PLC<b class='flag-5'>串口</b>资源受限?用PXB-6030D轻松解决

    串口网关是什么

    串口网关是什么? 串口网关(Serial Gateway) 是一种硬件或软件设备,用于将 串口通信协议 (如RS-232、RS-485、TTL等)转换为 网络通信协议 (如TCP/IP
    的头像 发表于 06-05 11:31 937次阅读

    AWTK,开启属于你的GUI之美

    在当今数字化时代,软件界面设计的高效性和一致性至关重要。本文将探讨GUI设计从传统代码编写到所见即所得工具的演变,并介绍AWTK如何通过一致的渲染技术,为开发者带来高效且直观的开发体验。传统GUI
    的头像 发表于 05-13 11:31 1448次阅读
    <b class='flag-5'>AWTK</b>,开启属于你的GUI之美

    还在为工业网关的ETHERNET/IP从配置和CANopen主设置感到困扰?本文将为您详细解析工业协议转换的配置技巧

    产品主要功能 疆鸿智能JH -EIP-COP 连接到EtherNet/IP总线中做为从使用,连接到CANopen总线中做为主使用。自主研发的一款EtherNet/IP从功能的通讯网关,将各种
    的头像 发表于 05-07 13:58 2300次阅读
    还在为工业网关的ETHERNET/IP从<b class='flag-5'>站</b>配置和CANopen主<b class='flag-5'>站</b>设置感到困扰?本文将为您详细解析工业协议转换的配置技巧