大家好,我是『芯知识学堂』的SingleYork,
今天笔者要跟大家分享的是淘晶驰串口屏串口通讯是如何实现。
通常,我们在新建完HMI工程后,Program.s文件中的内容默认如下图所示:
串口通讯协议默认是“字符串指令协议”,波特率默认是9600,
笔者要给大家分享的是“主动解析协议”,波特率使用的是115200,
至于默认的屏上电输出信息到串口,笔者也是没有用到,所以直接屏蔽了:
接下来,我们在Y0输出的按键弹起事件中添加如下代码,
改代码的作用就是当Y0上的控件b0按下并弹起后,
通过串口发送一串十六进制数:5A A5 06 83 00 20 01 00 01。
关于这一串数据的含义如下:
5A A5 -- 帧头 06 -- 数据长度(从该位开始到最后所有数据字节数,不包含该位) 83 -- 功能码 00 20 -- 寄存器起始地址 01 -- 寄存器个数 00 01 -- 寄存器值
关于printh的作用如下:
按照同样的方式,添加b1-b5这五个控件用于控制Y1-Y5的输出,
只是每个控件通过串口发送的数据要做一些区分,最后一个字节分别为:02、03、04、05、06,即:
控制Y1发送:5A A5 06 83 00 20 01 00 02 控制Y2发送:5A A5 06 83 00 20 01 00 03 控制Y3发送:5A A5 06 83 00 20 01 00 04 控制Y4发送:5A A5 06 83 00 20 01 00 05 控制Y5发送:5A A5 06 83 00 20 01 00 06
接下来,我们放置一个定时器控件,设置定时的时间为200ms,
在定时器时间当中添加代码:printh 5A A5 06 83 00 00 01 00 01,
即:每200ms发送一串十六进制数:5A A5 06 83 00 00 01 00 01。
接下来,我们解锁一下之前添加的数字键盘:
我什么要解锁这个数字键盘呢,是因为笔者想在按下键盘的OK键(即键盘输入完成)时,
将修改过的数字控件n0(定时闪烁)的值通过串口发送给单片机,之前笔者也提到,
想要实现这个功能其实是有很多方式,笔者使用的只是其中之一,也许大家会有更好的方式来实现。
这里又用到了另外一个新的指令“prints”,关于该指令的用法如下:
接下来,我们再放置一个定时器,设置定时时间为50ms,用来接收并解析串口屏收到的串口数据:
在Program.s文件中,我们再添加如下一些变量,在串口数据解析时需要用到:
接下来,我们在定时器1的中断事件中添加如下一些代码,
实现数据帧头的校验、数据长度校验、以及数据解析等。
代码1:上述绿色部分主要是对串口数据收发帧格式的说明
代码2:帧头5A A5校验、数据长度校验、和校验、数据解析
代码3:输入状态按位解析数据及图标显示处理
代码4:输入状态图标显示处理
代码5:输出状态按位解析数据及图标显示处理
代码6:输出状态图标显示处理
至此,数据收发部分的功能我们都实现了,我们可以用模拟器来调试,
根据协议来收发数据,看试下是否能按照我们的设定的功能来实现。
在调试模式下,笔者是通过虚拟串口及串口助手来收发数据,
当然咯,大家也可以直接在模拟器的指令输入框中输出Hex格式的指令,
笔者之所以使用串口助手,是因为在串口助手中计算和校验是比较方便的。
如上图所示,在进入调试模式时,
模拟器定时200ms向串口助手发送一串指令:5A A5 06 83 00 00 01 00 01,
按照通讯协议,通过串口助手发送一串16进制数:5A A5 0A 82 00 0F 00 0F 00 0F FF FF B6,
可以看到模拟上输入输出状态及其他几个参数也都能显示成功,说明我们的通讯是OK的。
接下来我们在测试一下修改参数“定时闪烁”的值,看下是否能正常:
可以看到,当我们将“定时闪烁”的值设定为100时,
模拟器给串口助手下发的值是0x6400,是不是感觉有点不对劲?
难道不应该是0x0064吗?这里就需要特别注意一下“prints”这个指令了,
它在发送数值型变量的时候,数据是小端模式,即:低字节在前。
模拟调试没问题后,我们就可以输出生产文件,然后通过TF卡下载到屏中了:
所使用的TF卡最大不要超过32G,且需要将TF卡格式化为FAT32格式:
另外,TF卡中最好不要有其他的文件,
只保留我们需要用于下载到屏中的文件“单片机与淘晶驰串口屏通讯例程.tft”,
然后在屏未上电的情况下,将TF卡先插入屏的TF卡槽,
然后给屏上电,就可以开始给屏下载工程了。
至此,关于HMI工程的数据处理部分就介绍完了,
使用模拟器调试也是非常的方便,感兴趣的小伙伴们可以自己动手去试下,
下一讲笔者将给大家分享一下单片机部分的代码,即:STC单片机与淘晶驰串口屏通讯例程之03【单片机程序解析】。
|