最近在用迪文的串口屏幕,第一次使用,记录下,希望能够帮助到一些初学者。由于是第一次使用
迪文屏幕,因此,我就边学习边做记录。
一、环境搭建
我的屏幕是DMT10600T070_A2WT,分辨率:1024*600,供电:7~36V(迪文官网可查)
硬件环境:
1、一个7~36V的直流电源适配器,我买的12V的;
2、这款屏幕有6个串口,其中UART2和UART3是RS232电平(板子上有UT3232),UART4~UART7是TTL电平;其中UART2是DEBUG口和DWIN OS程序下载口,其他口需要配置方可使用。因此至少需要一根U转串口线(RS232电平),其它的则根据你的项目准备;
3、SD卡一张,2~16G,不要用32G的;
手册资料:
1、由于我的是T5UID3平台,因此看《T5UID3应用指南_V24.pdf》;
2、《迪文DGUS屏开发指南_V43.pdf》;
3、《基于T5 CPU的DWIN OS程序开发指南V21.pdf》
4、《C编译器使用说明V1.5.pdf》
5、看官方的视频:http://www.dwin.com.cn/home/Index/download?cate_id=4
6、《T5UID3 DGUSII 应用开发指南20190906.pdf》:这个资料很重要,拿到屏幕第一天一定要和淘宝客服联系,要你的屏幕详细的开发手册。
官网资料下载地址:http://www.dwin.com.cn/service/ch/file/id/13
官方论坛:http://forum.dwin.com.cn/forum.php(从这几天使用来看,论坛回复效率还是很高的,基本问题都可以得到解决,点赞)
软件环境:
1、DGUS_V7383,这个是用于GUI开发的(再高的版本貌似是只适用于T5L平台);
2、ts3字库生成器,这个是用于生成一些字库的(迪文已经把ASCII码字库生成了,就是0号字库,0_DWIN_ASC.HZK);
3、PS软件(我用的Photoshop_CS6.3510481888);
如果通过串口控制屏幕,不进行二次开发,以上软件就够了,如果需要二次开发,则需要如下软件(二选一):
1、汇编环境:OSBuild3026
2、C 环 境:DWIN C Compiler 1(说明,需要平台支持,查看自己硬件平台是否支持,或者联系客服);
PS:可以去官网获得最新的软件,或者从我的网盘下载:
链接:https://pan.baidu.com/s/1FlZMbbWnzQQe_JVS9TIxqQ
提取码:urzp
(个人建议开发环境为win7-32位,然后低版本的DGUS工程,不要用高版本打开,可以重建工程)
二 、下载说明
看《迪文DGUS屏开发指南_V43.pdf》的第2.1节
说明:
1、SD卡2~16G(貌似32G不行);
2、必须用手册提供的命令行格式化SD卡,右键格式化无效;
以上是GUI下载,二次程序下载,可以通过串口,也可以和GUI一起打包下载:
请查阅《基于T5 CPU的DWIN OS程序开发指南V21.pdf》和《C编译器使用说明V1.5.pdf》
PS:如果学习当中遇到如何问题,记得及时联系迪文淘宝客服;
三、开始学习
首先用PS画一个界面,然后下载显示:
1、注意图片分辨率和屏幕相同;
2、PS生产的位图必须是BMP格式,24位;
3、命令格式必须从0开始,我开始想把0预留(做以后的开机动画),命名的1,结果不显示,改成0,显示;
然后在界面上显示出自己想要的字符串:
1、由于我要显示的数据带有单位,这个时候有两种解决方案,数显+文本显示或者纯文本显示(这里主要看你的屏幕能不能把要显示的字符串放下);由于我要显示的数据是科学计数法,因此我全部用文本显示;
2、由于我只显示ASCII码,没有汉字,因此用0号字库就够了,无需新添加字库;这里注意如下:
1)字体的大小通过设置点阵的X和Y来确定;(我开始以为要和字库取模时候的点阵大小对应,这里留下疑问?)
2)字的点阵大小一定不能超过文本显示区大小,否则不能显示;(我在这里折腾了好久,才发现是这个问题)
3、绑定变量:
PS:
(1)注意变量地址范围:0x1000-0xFFFF;
(2)注意变量地址必须是偶数;(吐槽下,这两个点在不同的手册,真乱)
4、说明他们关联的含义:
其实就是把一个屏幕的显示区域与一个数组关联起来,同时指定显示字体编码方式。
也就是说,当你用这个字符显示时候,与下一个变量地址之间要留有你要的数组长度;
当显示遇到0结束符或者无法显示的字符,则显示结束(手册这么说的,我试验了下,感觉不对,遗留疑问2?)。
5、改变显示数据,有两种方法:
(1)通过串口发送命令:
通过这些命令,就可以改变某个数组的数据,迪文屏幕会自动把数组数据刷新到屏幕上显示;
(2)通过二次开发
通过迪文提供的官方库接口,很方便就可以操作这些数组(你知道地址啊);
PS:请认真查看《C编译器使用说明V1.5.pdf》
这里说下我的疑问3:
看到没有,这里明确说了,用户程序不能有死循环,否则看门狗复位;
但是官方给的手册里面,汇编的main函数,是死循环的,再看C例子
看到么有,C例子是返回了的,难道main里面不能有while(1);
于是我进行了试验:
1、main里面加while(1),并没有导致看门狗复位;
2、main函数如果return,还是会被系统再次调用,但是定义的所有的全局变量都初始化了;
3、因此个人认为,这里应该是如下格式:
4、我发现我的屏幕有时候需要通过串口下载两遍程序,才能运行,不知道原因;
5、注意不要频繁读取变量:
<----------------------------------------------------2019.11.04--------------------------------------------------------------->
首先,需要了解如下两点,再进行详细叙述。
1. DGUS II本身采用的主芯片是双核的T5 CPU,这个双核芯片的两个核分工不同,分别运行DGUS程序和DWIN OS程序。
2. 为了方便开发者的使用,在DGUS II产品的硬件上定义好了COM2和COM4的接口,COM2和COM4分别连接到运行DGUS的核和运行DWIN OS的核。
下面进行详细的说明:
1. T5 CPU中运行DGUS程序的核主要功能是从FLASH和SDRAM中读取文件和数据,并按照控件中封装好的功能和数据正确的显示在用户界面上。
2. T5 CPU中运行DWIN OS程序的核主要功能是运行开发者编译好的程序,通过逻辑判断和算法运算来实现更加复杂的控制功能,或者通过协议解析实现与客户端设备的正常通讯。
3. 由于运行DGUS的核需要不断的去读取文件和数据才能保证用户界面的正常显示,因此,系统定义了固定的DGUS运行周期:40ms(毫秒)。也就是说,CPU中的这个核每隔40ms就要将所有控件中的内容全部重新读取一遍。
4. DWIN OS是通过DWIN OS汇编语言编译的程序,只需按照程序顺序运行即可,没有固定的运行周期。
由此也可以看出,T5 CPU的两个核的运行是完全相互独立的,互相不会占用对方CPU的资源、不影响对方CPU的性能。通常用户只需使用DGUS II来开发人机交互的用户界面,因此只需使用COM2即可,如果有需要时,可选择使用COM4。
DWIN OS自己编的程序不是按运行周期循环运行的?只执行一次?
还是只要cpu有空闲就不断运行?那不是浪费功耗?
答:以前DGUS1的os是利用屏的一个内核,刷新gui和os程序。现在T5系列是双核的,OS专门一个核在运行,轮询的,功耗方面不用担心这个问题,本身T5芯片整体功耗就很低 。
<----------------------------------------------------2019.11.06--------------------------------------------------------------->
DWIN_OS 平台采用类似汇编程序的编写规范,在 DGUS 稳定的 GUI 平台下,方便用户针对自己的特殊需求快速,可靠地进行二次开发。 随着迪文CPU主芯片更新,DWIN_OS随着不同开发平台版本不同有更新。所以各个平台设计的参考文档不同,请用户根据自己屏的型号进行文档的不同参考: 1、T02 ASIC平台(K600+模组,DGUS开发模式): ①、《迪文DGUS屏开发指南_V43.pdf》中的“5 DWIN OS用户程序设计(19-25页)” ②、《基于DWIN_OS指令的理解与应用.pdf 》是对文档①的OS指令详细用法说明文档,适合新用户去学习参考。 对应编程软件:DWIN_OS_Builder.exe (V1.6) OS运行模式:80\120\200ms 周期刷新运行 2、T5 ASIC平台(DGUS II平台,T5UID1,T5UID2,T5UID3), ③、《基于T5 CPU的DWIN OS程序开发指南V21.pdf》 ④、《基于迪文T5_OS汇编指令详解.pdf》是对文档③的OS指令详细用法说明文档,适合新用户去学习参考。 对应编程软件版本:OSBuild3.0.2.6 OS运行模式:实时运行(1 个 8051 核运行 GUI,1 个 8051 核在 DWIN OS 平台运行用户代码。 ) 3、T5L ASIC平台(DGUS II平台) ⑤、《基于T5L CPU的DWIN OS程序开发指南V10.pdf》 ⑥、《基于迪文T5L_OS汇编指令详解.pdf》是对文档⑤的OS指令详细用法说明文档,适合新用户去学习参考。 对应编程软件版本:OSBuild3.0.2.6 OS运行模式:实时运行(1 个 8051 核运行 GUI,1 个 8051 核在 DWIN OS 平台运行用户代码。 ) 上述介绍中的“2”和“3”中,T5L_OS汇编文档和T5_OS大部分一样,主要区别:串口波特率计算的os指令不一样 2019/09.17更新记录说明: 《基于迪文T5L/T5_OS汇编指令详解.pdf》将《基于T5L/T5 CPU的DWIN OS程序开发指南》中的一些DGUSII寄存器、存储器等说明全部编入到了后面章节,用户无需再使用两个文档进行切换查看。 |
<----------------------------------------------------2019.11.08--------------------------------------------------------------->
解开了我的疑惑1,OS程序架构为:
int main(void)
{
//初始化
。。。。。。
//
while(1){
}
}
RAM地址分配:
PS:地址不必对其到word,每个地址两个字节;
解决疑问二:字体大小确实和取模时候字体大小有关,只不过0号字体已经包括了大部分点阵字体;
变量地址和描述地址:
说的很清楚了,我们可以通过改变显示控件的描述符,去动态改变我们要实现的效果(当描述指针为0xFFFF,则表示描述符存在FLASH里面,没有复制到RAM中,因为我们不需要动态改变描述符,减少RAM使用)。