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

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

3天内不再提示

如何在PL端开发程序

电子设计 来源:电子设计 作者:电子设计 2022-02-08 15:26 次阅读

作者: ALINX

适用于板卡型号:

AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG

实验Vivado工程为“led”。

对于ZYNQ来说PL(FPGA)开发是至关重要的,这也是ZYNQ比其他ARM的有优势的地方,可以定制化很多ARM端的外设,在定制ARM端的外设之前先让我们通过一个LED例程来熟悉PL(FPGA)的开发流程,熟悉Vivado软件的基本操作,这个开发流程和不带ARM的FPGA芯片完全一致。

在本例程中,我们要做的是LED灯控制实验,每秒钟控制开发板上的LED灯翻转一次,实现亮、灭、亮、灭的控制。会控制LED灯,其它外设也慢慢就会了。

1. LED硬件介绍

1.1 开发板的PL部分连接了4个红色的用户LED灯。这1个灯完全由PL控制。如果PL_LED1为高电平,灯则会灭,否则会亮。

o4YBAGAJo4yAQmY-AACurrEtJhA908.jpg

1.2 我们可以根据原理图的连线关系确定LED和PL管脚的绑定关系。

o4YBAGAJo8qAL3gPAAC2u0nvFGU654.jpg

1.3 原理图中以PS_MIO开头的IO都是PS端IO,不需要绑定,也不能用于PL端的引脚绑定

o4YBAGAJpAiAW1SVAADTnlHCFAE207.jpg

2. 创建Vivado工程

2.1 启动Vivado,在Windows中可以通过双击Vivado快捷方式启动

2.2 在Vivado开发环境里点击“Create New Project”,创建一个新的工程。

o4YBAGAJpIOAejlfAACE1S69Eec284.jpg

2.3 弹出一个建立新工程的向导,点击“Next”

pIYBAGAJpMGAX7LSAABYARSFeiM517.jpg

2.4 在弹出的对话框中输入工程名和工程存放的目录,我们这里取一个led的工程名。需要注意工程路径“Project location”不能有中文空格,路径名称也不能太长。

pIYBAGAJpP6ABoEEAABEJ2GKSf8455.jpg

2.5 在工程类型中选择“RTL Project”

pIYBAGAJpTyATw_JAACQeqn99_Y184.jpg

2.6 目标语言“Target language”选择“Verilog”,虽然选择Verilog,但VHDL也可以使用,支持多语言混合编程

pIYBAGAJpXmADsRwAABeKxangVw774.jpg

2.7 点击“Next”,不添加任何文件

o4YBAGAJpbeAU4jEAAA-93Rtyxo654.jpg

2.8 在“Part”选项中,器件家族“Family”选择“Zynq UltraScale+ MPSoCs”,封装类型“Package”选择“sfvc784”,Speed选择”-1”,Temperature选择“I”减少选择范围。在下拉列表中选择“xczu2cg-sfvc784-1-i”,“-1”表示速率等级,数字越大,性能越好,速率高的芯片向下兼容速率低的芯片。

pIYBAGAJpfWAb9jiAAC5hPPqEEk839.jpg

2.9 点击“Finish”就可以完成以后名为“led”工程的创建。

pIYBAGAJpjOAdME9AAB251Gwdk4205.jpg

2.10 Vivado软件界面

o4YBAGAJpnGABOXMAADEa05XDkk593.jpg

3. 创建Verilog HDL文件点亮LED

3.1 点击Project Manager下的Add Sources图标(或者使用快捷键Alt+A)

o4YBAGAJpq-AO1gXAACNSu5VRw0938.jpg

3.2 选择添加或创建设计源文件“Add or create design sources”,点击“Next”

pIYBAGAJpu2AZHiMAACf-oZNtN8369.jpg

3.3 选择创建文件“Create File”

o4YBAGAJpyqAF1lUAAC7AWSQBKo059.jpg

3.4 文件名“File name”设置为“led”,点击“OK”

o4YBAGAJp2iAcqjEAACdF8Kwowk401.jpg

3.5 点击“Finish”,完成“led.v”文件添加

o4YBAGAJp6aAJ0H8AAC_JYo8CUU729.jpg

3.6 在弹出的模块定义“Define Module”,中可以指定“led.v”文件的模块名称“Module name”,这里默认不变为“led”,还可以指定一些端口,这里暂时不指定,点击“OK”。

o4YBAGAJp-SADpPsAACOPDC79B8664.jpg

3.7 在弹出的对话框中选择“Yes”

pIYBAGAJqCGAdUs0AAC55N4wfP0162.jpg

3.8 双击“led.v”可以打开文件,然后编辑

pIYBAGAJqF-AAXQYAACfKIgvH3A584.jpg

3.9 编写“led.v”,这里定义了一个32位的寄存器timer, 用于循环计数0~24999999(1秒钟), 计数到24999999(1秒)的时候, 寄存器timer变为0,并翻转四个LED。这样原来LED是灭的话,就会点亮,如果原来LED为亮的话,就会熄灭。编写好后的代码如下:

module led( input sys_clk, input rst_n, outputreg[3:0] led ); reg[31:0] timer_cnt; always@(posedge sys_clk ornegedge rst_n) begin if(!rst_n) begin led <=4'd0; timer_cnt <=32'd0; end elseif(timer_cnt >=32'd24_999_999) begin led <=~led; timer_cnt <=32'd0; end else begin led <= led; timer_cnt <= timer_cnt +32'd1; end end endmodule

3.10 编写好代码后保存

4. 添加管脚约束

Vivado使用的约束文件格式为xdc文件。xdc文件里主要是完成管脚的约束,时钟的约束, 以及组的约束。这里我们需要对led.v程序中的输入输出端口分配到FPGA的真实管脚上。

4.1 点击“Open Elaborated Design”

pIYBAGAJqJ2AGwDxAAENylQFaiY652.jpg

4.2 在弹出的窗口中点击“OK”按钮

o4YBAGAJqNuAJa0yAABC88yhgPU579.jpg

4.3 在菜单中选择“Window -> I/O Ports”

pIYBAGAJqRmALuSaAACH5gy_--g938.jpg

4.4 在弹出的I/O Ports中可以看到管脚分配情况

o4YBAGAJqVaAXf_KAACH04IrPvA711.jpg

4.5 将复位信号rst_n绑定到PL端的按键,给LED和时钟分配管脚、电平标准,完成后点击保存图标

pIYBAGAJqZSAcX3QAAB7UlDRYz8859.jpg

4.6 弹出窗口,要求保存约束文件,文件名我们填写“led”,文件类型默认“XDC”,点击“OK”

o4YBAGAJqdGAI-mIAACE9HNXP2s363.jpg

4.7 打开刚才生成的“led.xdc”文件,我们可以看到是一个TCL脚本,如果我们了解这些语法,完全可以通过自己编写led.xdc文件的方式来约束管脚

o4YBAGAJqg-AJtbJAACJpP0aNAQ352.jpg

下面来介绍一下最基本的XDC编写的语法,普通IO口只需约束引脚号和电压,管脚约束如下:

set_property PACKAGE_PIN "引脚编号" [get_ports “端口名称”]

电平信号的约束如下:

set_property IOSTANDARD "电平标准" [get_ports “端口名称”]

这里需要注意文字的大小写,端口名称是数组的话用{ }刮起来,端口名称必须和源代码中的名字一致,且端口名字不能和关键字一样。

电平标准中“LVCMOS33”后面的数字指FPGA的BANK电压,LED所在BANK电压为3.3伏,所以电平标准为“LVCMOS33”。Vivado默认要求为所有IO分配正确的电平标准和管脚编号。

5. 添加时序约束

一个FPGA设计除了管脚分配以外,还有一个重要的约束,那就是时序约束,这里通过向导方式演示如果进行一个时序约束。

5.1 点击“Run Synthesis”开始综合

pIYBAGAJqk2ARpOWAAChDEbdq7Y455.jpg

5.2 弹出对话框点击“OK”

pIYBAGAJqoqAYXXZAAAx1aj5Zhw690.jpg

5.3 综合完成以后点击“Cancel”

o4YBAGAJqsiARpL2AABM0I_b_ek552.jpg

5.4 点击“Constraints Wizard”

pIYBAGAJqwaAZzmHAACpUyQB5BA204.jpg

5.5 在弹出的窗口中点击“Next”

o4YBAGAJq0SAUwm0AADZh6eCKYo000.jpg

5.6 时序约束向导分析出设计中的时钟,这里把“sys_clk_p”频率设置为200Mhz,然后点击“Skip to Finish”结束时序约束向导。

pIYBAGAJq4KARy0bAACJE0aCt3o867.jpg

5.7 弹出的窗口中点击“OK”

o4YBAGAJq8CAbN87AAA6aN0GyA4629.jpg

5.8 点击“Finish”

o4YBAGAJq_2AS2YuAAB6TkU7VpQ624.jpg

5.9 这个时候led.xdc文件已经更新,如果xdc文件已经打开,会提示“Reload”重新加载文件,并保存文件

o4YBAGAJrDuAG8LlAACGj-hIWSc473.jpg

6. 生成BIT文件

6.1 编译的过程可以细分为综合、布局布线、生成bit文件等,这里我们直接点击“Generate Bitstream”,直接生成bit文件。

pIYBAGAJrHmAa4NEAAED2dR1MOo749.jpg

6.2 在弹出的对话框中可以选择任务数量,这里和CPU核心数有关,一般数字越大,编译越快,点击“OK”

pIYBAGAJrLeAVbDwAABgkYhfkmk372.jpg

6.3 这个时候开始编译,可以看到右上角有个状态信息,在编译过程中可能会被杀毒软件、电脑管家拦截运行,导致无法编译或很长时间没有编译成功。

o4YBAGAJrPSAYsVxAAAqH0mD2vs937.jpg

6.4 编译中没有任何错误,编译完成,弹出一个对话框让我们选择后续操作,可以选择“Open Hardware Manger”,当然,也可以选择“Cancel”,我们这里选择 “Cancel”,先不下载

o4YBAGAJrTKAJdIAAABWHuvT9f8776.jpg

7. Vivado仿真

接下来我们不妨小试牛刀,利用Vivado自带的仿真工具来输出波形验证流水灯程序设计结果和我们的预想是否一致(注意:在生成bit文件之前也可以仿真)。具体步骤如下:

7.1 设置Vivado的仿真配置,右击SIMULATION中Simulation Settings。

o4YBAGAJrXCAbID7AAB8xurbPGU826.jpg

7.2 在Simulation Settings窗口中进行如下图来配置,这里设置成50ms(根据需要自行设定),其它按默认设置,单击OK完成。

o4YBAGAJra2ARL2KAAC6FKQZVLI242.jpg

7.3 添加激励测试文件,点击Project Manager下的Add Sources图标,按下图设置后单击Next。

pIYBAGAJreuAFw9kAAB4qg11gGw115.jpg

7.4 点击Create File生成仿真激励文件。

pIYBAGAJrimAaXgyAACebjLNPZM096.jpg

在弹出的对话框中输入激励文件的名字,这里我们输入名为vtf_led_test。

pIYBAGAJrmaAW5sAAAAnjE8JZKY226.jpg

7.5 点击Finish按钮返回。

o4YBAGAJrqSAKCNLAABy6HgQXT8513.jpg

这里我们先不添加IO Ports,点击OK。

pIYBAGAJruKAXQ-zAABQcHNpu5o684.jpg

在Simulation Sources目录下多了一个刚才添加的vtf_led_test文件。双击打开这个文件,可以看到里面只有module名的定义,其它都没有。

pIYBAGAJrx-AS43lAACrZ3bjA-k842.jpg

7.6 接下去我们需要编写这个vtf_led_test.v文件的内容。首先定义输入和输出信号,然后需要实例化led_test模块,让led_test程序作为本测试程序的一部分。再添加复位和时钟的激励。完成后的vtf_led_test.v文件如下:

`timescale1ns/1ps ////////////////////////////////////////////////////////////////////////////////// // Module Name: vtf_led_test ////////////////////////////////////////////////////////////////////////////////// module vtf_led_test; // Inputs reg sys_clk; reg rst_n ; // Outputs wire[3:0] led; // Instantiate the Unit Under Test (UUT) led uut ( .sys_clk(sys_clk), .rst_n(rst_n), .led(led) ); initial begin // Initialize Inputs sys_clk =0; rst_n =0; #1000; rst_n =1; end //Create clock always#20 sys_clk =~ sys_clk; endmodule

7.7 编写好后保存,vtf_led_test.v自动成了这个仿真Hierarchy的顶层了,它下面是设计文件led_test.v。

o4YBAGAJr12AN8vXAAA6E6rrCio021.jpg

7.8 点击Run Simulation按钮,再选择Run Behavioral Simulation。这里我们做一下行为级的仿真就可以了。

o4YBAGAJr5uAeRF7AADosGOIuJs926.jpg

如果没有错误,Vivado中的仿真软件开始工作了。

7.9 在弹出仿真界面后如下图,界面是仿真软件自动运行到仿真设置的50ms的波形。

o4YBAGAJr9iAQRBaAABmF9eiy4M818.jpg

由于LED[3:0]在程序中设计的状态变化时间长,而仿真又比较耗时,在这里观测timer[31:0]计数器变化。把它放到Wave中观察(点击Scope界面下的uut,再右键选择Objects界面下的timer,在弹出的下拉菜单里选择Add Wave Window)。

o4YBAGAJsBaAY5t6AABmabnaZLU609.jpg

添加后timer显示在Wave的波形界面上,如下图所示。

pIYBAGAJsFOAB8_5AABkhB17zUQ972.jpg

7.10 点击如下标注的Restart按钮复位一下,再点击Run All按钮。(需要耐心!!!),可以看到仿真波形与设计相符。(注意:仿真的时间越长,仿真的波形文件占用的磁盘空间越大,波形文件在工程目录的xx.sim文件夹)

o4YBAGAJsJGAFjV-AACQWnjMMWA850.jpg

o4YBAGAJsM-AI4H0AABnSoVsuFM060.jpg

我们可以看到led的信号会变成f,说明LED灯会由亮变灭。

8. 下载

8.1 连接好开发板的JTAG接口,给开发板上电

注意拔码开关要选择JTAG模式,也就是全部拔到”ON”,“ON”代表的值是0,不用JTAG模式,下载会报错。

8.2 在“HARDWARE MANAGER”界面点击“Auto Connect”,自动连接设备

o4YBAGAJsYiAN3FvAACF2ZmYsHc458.jpg

8.3 可以看到JTAG扫描到arm和FPGA内核

o4YBAGAJscWAZHItAACIsgdXwXM752.jpg

8.4 选择芯片,右键“Program Device...”

o4YBAGAJsgOANOh8AABtj6HTTnU920.jpg

8.5 在弹出窗口中点击“Program”

o4YBAGAJskCAJv9JAABOEhWeHNo394.jpg

8.6 等待下载

pIYBAGAJsn6AVGFQAAAtMqn6toc715.jpg

8.7 下载完成以后,我们可以看到PL LED开始每秒变化一次。到此为止Vivado简单流程体验完成。后面的章节会介绍如果把程序烧录到Flash,需要PS系统的配合才能完成,只有PL的工程不能直接烧写Flash。在”体验ARM,裸机输出”Hello World”一章的常见问题中有介绍。

9. 在线调试

前面介绍了仿真和下载,但仿真并不需要程序烧写到板子,是比较理想化的结果,下面介绍Vivado在线调试方法,观察内部信号的变化。Vivado有内嵌的逻辑分析仪,叫做ILA,可以用于在线观察内部信号的变化,对于调试有很大帮助。在本实验中我们观察timer_cnt和led的信号变化。

9.1 添加ILA IP核

9.1.1 点击IP Catalog,在搜索框中搜索ila,双击ILA的IP

pIYBAGAJsryAJNqXAACeaYxHOj8299.jpg

9.1.2 修改名称为ila,由于要采样两个信号,Probes的数量设置为2,Sample Data Depth指的是采样深度,设置的越高,采集的信号越多,同样消耗的资源也会越多。

pIYBAGAJsvmADxD6AACiF8uVjnw341.jpg

9.1.3 在Probe_Ports页面,设置Probe的宽度,设置PROBE0位宽为32,用于采样timer_cnt,设置PROBE1位宽为4,用于采样led。点击OK

o4YBAGAJszeABQNkAACHEGTbsLQ833.jpg

弹出界面,选择OK

pIYBAGAJs3SAT9eSAAAf6VhNL1c006.jpg

再如下设置,点击Generate

pIYBAGAJs7KAWoO6AABaNR6Mc2o342.jpg

9.1.4 在led.v中例化ila,并保存

o4YBAGAJs_CANlX4AABMf-226fo189.jpg

9.1.5 重新生成Bitstream

pIYBAGAJtC2ALN0XAAAY5c4je-w536.jpg

9.1.6 下载程序

o4YBAGAJsgOANOh8AABtj6HTTnU920.jpg

9.1.7 这时候看到有bit和ltx文件,点击program

pIYBAGAJtK2AATsMAABudoeOhpc332.jpg

9.1.8 此时弹出在线调试窗口,出现了我们添加的信号

o4YBAGAJtOuAIGpNAAC0331gJT8388.jpg

点击运行按钮,出现信号的数据

o4YBAGAJtSmAfbTCAABPtK-2NdM573.jpg

也可以触发采集,在Trigger Setup窗口点击“+”,深度选择timer_cnt信号

o4YBAGAJtWeAbPVRAAA2nehmlto702.jpg

将Radix改为U,也就是十进制,在Value中设置为24999999,也就是timer_cnt计数的最大值

pIYBAGAJtaSAXoqsAABUB_sQT18614.jpg

再次点击运行,即可以看到触发成功,此时timer_cnt显示为十六进制,而led也在此时翻转。

o4YBAGAJteKAEh4KAABQoAzTeH4524.jpg

9.2 MARK DEBUG

上面介绍了添加ILA IP的方式在线调试,下面介绍在代码中添加综合属性,实现在线调试。

9.2.1 首先打开led.v,将ila的例化部分注释掉

9.2.2 在led和timer_cnt的定义前面添加(* MARK_DEBUG=”true” *),保存文件。

o4YBAGAJth-AY3haAAAxGL2SoX8153.jpg

9.2.3 点击综合

pIYBAGAJtl2AFRptAAAPrQa4trs709.jpg

9.2.4 综合结束后,点击Set Up Debug

pIYBAGAJtpqATTkpAAAxW1GdL4Q890.jpg

9.2.5 弹出的窗口点击Next

o4YBAGAJttiAD-2KAACjh3tPbwY532.jpg

按照默认点击Next

pIYBAGAJtxaAJpfSAACFgyMIvgE098.jpg

采样深度窗口,选择Next

pIYBAGAJt1OAfP_hAABG8atU2nM930.jpg

点击Finish

o4YBAGAJt5GASLGmAABUvx1Nnkg641.jpg

点击保存

o4YBAGAJt86ARWiiAAAR7yyoW3E501.jpg

在xdc文件中即可看到添加的ila核约束

pIYBAGAJuAyADd3ZAACdFurcpcs455.jpg

9.2.6 重新生成bitstream

pIYBAGAJuEmAX84iAAAd27Uuuo8454.jpg

9.2.7 调试方法与前面一样,不再赘述。

10. 实验总结

本章节介绍了如何在PL端开发程序,包括工程建立,约束,仿真,在线调试等方法,在后续的代码开发方式中皆可参考此方法。

审核编辑:何安

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

    关注

    242

    文章

    23278

    浏览量

    660947
收藏 人收藏

    评论

    相关推荐

    何在TMS320DM643x器件上使用EDMA3驱动程序

    电子发烧友网站提供《如何在TMS320DM643x器件上使用EDMA3驱动程序.pdf》资料免费下载
    发表于 10-15 09:41 0次下载
    如<b class='flag-5'>何在</b>TMS320DM643x器件上使用EDMA3驱动<b class='flag-5'>程序</b>

    PICO-IMX8PL和SRG-IMX8PL:共创您的物联网集成网关

    凭借为工业物联网构建的平台,全新PICO-IMX8PL和SRG-IMX8PL将强大的物理硬件与精英开发工具相结合,使解决方案更易于推向市场。SRG-IMX8PL系统赋予用户制造高品质、
    的头像 发表于 10-12 08:01 456次阅读
    PICO-IMX8<b class='flag-5'>PL</b>和SRG-IMX8<b class='flag-5'>PL</b>:共创您的物联网集成网关

    开发板的PL有4片的DDR,怎么管理数据的传输

    各位大佬好, 我现在想在自己的开发板上面跑通正点原子的一个例程,这个例程是关于DDR的读写,将1024个数写入DDR,然后读出来进行对比,如果没有错误就点亮LED。 开发板的PL有4
    发表于 09-10 19:17

    复旦微PS+PL异构多核开发案例分享,基于FMQL20SM国产处理器平台

    本文主要介绍复旦微FMQL20S400M的PS + PL异构多核开发案例,开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bitPL
    发表于 08-22 14:04

    PL7518v1

    5V升压和9V降压输入的双节锂电池高效充电管理芯片PL7518PL7518是一款宽电压输入专门为双节锂电池充电的充电管理芯片,兼容5V,9V适配器。在5V供电的情况下,实现升压充电,电池最大
    发表于 08-12 13:09 0次下载

    FM20S用户手册-PS + PL异构多核案例开发手册

    (PS) + FPGA可编程逻辑资源(PL)异构多核SoC处理器设计的全国产工业评估板,PS主频高达1GHz。核心板CPU、ROM、RAM、电源、晶振、连接器等所有器件均采用国产
    发表于 07-25 16:14

    FM20S用户手册-PL案例开发手册

    评估板侧视图2 图 5 评估板侧视图3 图 6 评估板侧视图4 1 PL案例开发流程 本章节以产品资料“4-软件资料DemoFPGAHDL-demos”目录下的led_flash案例 为例
    发表于 07-25 16:12

    请问cmakelists中的变量如何在程序中使用?

    大家好, 我有个问题请教,cmakelists.txt中的变量如何在程序中使用?比如以下cmakelists.txt文件中的PROJECT_VER变量,我如何在c程序中使用?试了很多办
    发表于 06-11 07:34

    有关PL利用AXI总线控制PSDDR进行读写(从机wready信号一直不拉高)

    一直拉高的。这与写数据通道好像有点区别。 我不清楚PS 的DDR到底发生了什么,但是和MIG核就是有点不一样,通过仿真MIG核可以发现,PL的DDR是会先一直发出wready信号的。这个问题就是我
    发表于 05-31 12:04

    有一外设输出端口DOUT接到USART1的接收PA.9,请问如何在程序中定义?

    各位好,请问我有一外设输出端口DOUT接到USART1的接收PA.9,请问如何在程序中定义,谢谢
    发表于 05-17 07:42

    鸿蒙OpenHarmony【标准系统 编写“Hello World”程序】(基于RK3568开发板)

    下方将展示如何在单板上运行第一个应用程序,其中包括新建应用程序、编译、烧写、运行等步骤,最终输出“Hello World!”。
    的头像 发表于 05-09 17:58 890次阅读
    鸿蒙OpenHarmony【标准系统 编写“Hello World”<b class='flag-5'>程序</b>】(基于RK3568<b class='flag-5'>开发</b>板)

    AMD Versal AI Edge自适应计算加速平台之PL LED实验(3)

    对于Versal来说PL(FPGA)开发是至关重要的,这也是Versal比其他ARM的有优势的地方,可以定制化很多ARM的外设
    的头像 发表于 03-22 17:12 2407次阅读

    AMD Versal AI Edge自适应计算加速平台PL LED实验(3)

    对于Versal来说PL(FPGA)开发是至关重要的,这也是Versal比其他ARM的有优势的地方,可以定制化很多ARM的外设
    的头像 发表于 03-13 15:38 975次阅读
    AMD Versal AI Edge自适应计算加速平台<b class='flag-5'>PL</b> LED实验(3)

    FPGA的PL固化流程

    电子发烧友网站提供《FPGA的PL固化流程.pdf》资料免费下载
    发表于 03-07 14:48 8次下载

    【AWTK开源智能串口屏方案】HMI程序移植编译及运行

    是基于AWTK与AWTK-MVVM开发的低代码智能串口屏方案,本系列文章介绍如何从零开发HMI程序,包括搭建开发环境、创建HMI运行时工程、修改应用界面以及
    的头像 发表于 01-18 08:24 935次阅读
    【AWTK开源智能串口屏方案】HMI<b class='flag-5'>端</b><b class='flag-5'>程序</b>移植编译及运行