本文着重讲述大彩串口屏与单片机的联机使用,大彩串口屏的前期学习可以参考学习笔记——大彩串口屏“常识”和大彩串口屏速通笔记一。
指令格式
观察指令助手中生成的指令可以发现指令有明显的规律,那么只需要抓住规律就可以根据参数自行编写指令生成函数,所以在正式开始学习联机之前,我们有必要了解一下指令的组成方式。
这是官方资料对指令格式的解释,可以看到指令有固定的帧头和帧尾,就像是对指令内容进行了“打包”,将需要传递的信息包裹在中间。指令的帧形式的完整性可以作为指令的有效性的判断,当然对于我们在短距离和不算太高的波特率的使用场景下,并不是刚需,包括表二中的CRC校验也是同理,所以我们直接使用表一中无校验位的形式即可。
看完指令的组成,相信大部分同学们还是一脸懵,但是没关系,我们接下来根据具体的指令进行逐一分析。
以按键按下串口屏发出的指令为例,我们可以通过指令助手得到下面这一串指令
可以看到开头的EE 和结尾的 FF FC FF FF就是帧头与帧尾,并无实际意义,那么掐头去尾就剩下了B1 10 00 00 00 01 01,从指令助手的可调参数上不难看出中间部分与画面ID,控件ID和按键状态有关,那么我们试着改变这些参数观察指令的变化
根据换算可得十六进制0101即是十进制的257,十六进制的0102即是十进制的258,所以不难看出中间四个数字即为画面ID+控件ID,且都为两个字节的长度。那么再次对照指令格式就能够得出 B1 10为"指令",即标识了该指令的作用,串口屏的指令非常多,根据需要查阅指令助手并能够运用即可。
同理也可通过此方法了解其他控件的指令组成。
程序编写
终于到了敲代码部分了,我们本次演示的内容是实现文本控件的内容的改变,首先当然是根据上述方法去了解更改内容的指令的组成部分,此处不再赘述,我们直接进入单片机程序的编写阶段。本次演示使用的单片机型号为STM32G431,使用CubeMX配置单片机外设,HAL库进行开发编写,演示内容对单片机并无要求,读者根据自己的习惯与手头的资源进行选择即可。要使用串口屏那肯定需要打开单片机的串口功能,配置上建议使用打开接收中断并使用IDLE的方式进行接收数据,因为串口屏的指令是不定长的,单本次实验不涉及接收,所以不需要打开串口中断功能,贴一张我的配置图,注意串口的波特率要和串口屏的保持一致。
接下去就是代码的编写了,根据得到的文本控件指令的规则,不难写出以下的代码
随后在主函数中调用即可。
、
为了验证代码的正确性,我们先使用USB转TTL连接电脑与单片机,查看串口发出的代码,并与指令助手生成的指令相对比
对比可得两者完全相同,接下去就是连接单片机与串口屏了,连接完成后按下单片机的复位按键,可以观察到文本的内容变成了事先在代码中设定好的内容。
至此,串口屏的基本应用方法已经明了,读者可以使用指令助手通过分解指令的方法寻找规则,再以此规则进行代码的编写达到双向的控制。但是串口屏有非常多的控件,每个控件又有不少可控制的属性,全都依靠自己编写明显不切实际,但是可以注意到官方资料中是有代码例程的,但那时基于标准库编写的,所以我们接下来需要做的就是将官方提供的文件一直到HAL库工程中,具体一直方法后续会持续更新。