外设驱动库开发笔记35:迪文触摸屏驱动

迪文串口屏驱动设计与实现
本文详细介绍了如何设计和实现迪文串口屏的驱动程序,包括迪文串口屏的通讯协议、功能概述、驱动设计与实现。通过5个基本指令(写寄存器、读寄存器、写存储器、读存储器、写曲线缓冲区)进行操作,并提供了相应的操作函数。最后展示了驱动在实际应用中的效果,证实了驱动的正确性和实用性。

  有些时候嵌入式系统也需要显示更为复杂的图形,需要更丰富的数据展示。为此,我们需要更大,色彩更丰富,带触屏的显示屏,当然性价比更高就最好了。在我们的项目中遇到此类需求,我们有时会选择DWIN触摸屏。在本篇中,我们就来设计并实现DWIN触摸屏的驱动。

1、功能概述

  我们这里所说的是迪文的串口屏,该屏有多种接口类型,有使用RS485接口的屏,也有可通过跳线实现TTL接口或RS232接口的屏。但不论什么接口均采用相同的通讯协议。迪文串口屏采用的通讯协议的完整指令结构如下图所示:

  其中,CRC校验不包括帧头和数据长度,仅针对指令和数据进行校验。CRC 校验采用 ANSI CRC-16 (X16+X15+X2+1)格式。当启用 CRC 帧校验并开启自动应答功能后(R2.4=1,RC.3=1),DGUS 屏会在 CRC 校验完成后自动应答校验情况,返回指令结构如下:

帧头**+02+****(DGUS 屏接收的)指令+数据(0xFF 表示 CRC **校验正确,0x00 表示 CRC **校验错误)+CRC。**

  迪文的DGUS 把用户图形界面的每一个页面分解成多个控件变量,即 DGUS 屏采用变量驱动模式工作,屏的工作模式和GUI的状态完全由数据变量来控制。因此,串口指令也只需要对变量进行读、写即可,指令集非常简单,一共只有5条指令。读写指令集如下图所示:

  配置寄存器空间是用于存放指令状态的,比如RTC(实时时间)、背光亮度等实时的状态。了解寄存器的地址以及各寄存器的功能,就可以通过串口指令来实现上位机与DGUS屏信息传输及控制。寄存器地址0x00~0xFF,具体功能查看迪文寄存器功能说明。

2、驱动设计与实现

  已经了解了迪文屏的通讯协议,我们就可以据此编写迪文屏的驱动程序。我们知道迪文屏的通讯协议有5个指令,我们的驱动就是通过这5个指令操作迪文屏。

2.1、对象定义

  我们们依然采用基于对象的操作方式来实现,所以首先我们依然是定义迪文屏的对象类型。具体定义如下:

/* 定义迪文串口屏对象类型 */
typedef struct DwinObject {

     DwinCheckCodeType checkMode;       //校验方式
     void (*SendData)(uint8_t *txData,uint16_t length);   //发送数据
     void (*GetRegister)(struct DwinObject *dwin,uint8_t regAddress,uint8_t readByteLength);
     void (*SetRegister)(struct DwinObject *dwin,uint8_t regAddress,uint8_t *txData,uint16_t length);
}DwinObjectType;

  迪文屏对象类型我们并没有抽象出太多属性,因为屏作为从设备并没有返回太多信息,也没有什么选择特性。考虑到通讯信息的校验可以选择是否启用,所以我们将其抽象为属性以区别于不同的情况。

  在对象使用之前同样需要对其初始化,所以我们需要对

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值