STM32L476应用开发之四:触摸屏驱动与数据交互
数据交互可以说是任何一台仪器都需要的功能。我们的便携式气体分析仪,需要人来操作和配置,所以触摸屏就是我们必然的一个选择。本次我们计划采用3.5寸显示屏,串口通讯。
1、硬件设计
前面我们实验了串行通讯,这次来使用屏实现显示。这次我们计划使用的3.5寸触摸屏采用RS232串行通讯接口,其接口排布如下:

对于RS232接口我们采用了周立功RSM232模块来做实验,其推荐的连接方式如下图:

在实验过程中我们不需要这些保护措施,根据以上的分析我们可以对串口通讯做如下设计。RS232接口原理图如下:

2、软件设计
首先对串口部分做参数配置,波特率、数据位、停止位、奇偶校验等按要求配置好。接下来编写测试代码。
static void LCD_UART_Configuration(void)
{
huart1.Instance = USART1; huart1.Init.BaudRate = ; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
这次我们使用的屏串行通讯的协议是厂家自己定义的,不过数据帧结构较为简单,如下图所示:

而且功能也比较简单,只有5中功能码:访问寄存器的0x80和0x81、访问变量存储器的0x82和0x83以及访问曲线缓冲区的0x84,具体描述如下图所示:

根据以上描述我们可以编写对应不同对象访问的程序了。
(1)、写数据变量存储器
void WriteDataToLCD(uint16_t startAddress,uint8_t txData[],uint16_t length)
{
/*命令的长度由帧头(2个字节)+数据长度(1个字节)+指令(1个字节)+起始地址(2个字节)+数据(长度为length)*/ uint16_t cmd_Length=length+; uint8_t cmd_VAR_Write[WriteDataCommandLength]; cmd_VAR_Write[]=0x5A; cmd_VAR_Write[]=0xA5; cmd_VAR_Write[]=(uint8_t)(length+); cmd_VAR_Write[]= FC_VAR_Write; cmd_VAR_Write[]=(uint8_t)(startAddress>>);//起始地址 cmd_VAR_Write[]=(uint8_t)startAddress;//起始地址 for(int dataIndex=;dataIndex<length;dataIndex++)
{
cmd_VAR_Write[dataIndex+]=txData[dataIndex];
}
SendData(cmd_VAR_Write,cmd_Length);
}
(2)、读变量存储器数据
void ReadDataFromLCD(uint16_t startAddress,uint8_t readWordLength)
{
//命令的长度由帧头(2个字节)+数据长度(1个字节)+指令(1个字节)+起始地址(2个字节)+读取的字长度(1个字节) uint16_t cmd_Length=; uint8_t cmd_VAR_Read[]={0x5A,0xA5,0x04,FC_VAR_Read,0x00,0x00,0x00};//读数据命令 cmd_VAR_Read[]=(uint8_t)(startAddress>>);//起始地址 cmd_VAR_Read[]=(uint8_t)startAddress;//起始地址 cmd_VAR_Read[]=readWordLength;//读取长度 SendData(cmd_VAR_Read,cmd_Length);
}
(3)、写曲线缓冲区
void WriteCurveToLCD(uint8_t txData[],uint16_t length,uint8_t channelMode)
{
//命令的长度由帧头(2个字节)+数据长度(1个字节)+指令(1个字节)+通道模式(1个字节)+数据(length,最多8个字) uint16_t cmd_Length=length+; uint8_t cmd_Curve_Write[WriteCurveCommandLength];//写曲线缓冲区命令 cmd_Curve_Write[]=0x5A; cmd_Curve_Write[]=0xA5; cmd_Curve_Write[]=(uint8_t)(length+); cmd_Curve_Write[]= FC_Curve_Write; cmd_Curve_Write[]=channelMode; for(int dataIndex=;dataIndex<length;dataIndex++)
{
cmd_Curve_Write[dataIndex+]=txData[dataIndex];
} SendData(cmd_Curve_Write,cmd_Length);
}
(4)、写寄存器数据
void SetRegisterData(uint8_t regAddress,uint8_t txData[],uint16_t length)
{
//命令的长度由帧头(2个字节)+数据长度(1个字节)+指令(1个字节)+寄存器地址(1个字节)+写的数据 uint16_t cmd_Length=length+; uint8_t cmd_Reg_Write[WriteCurveCommandLength];//写曲线缓冲区命令 cmd_Reg_Write[]=0x5A; cmd_Reg_Write[]=0xA5; cmd_Reg_Write[]=(uint8_t)(length+); cmd_Reg_Write[]= FC_REG_Write; cmd_Reg_Write[]=regAddress; for(int dataIndex=;dataIndex<length;dataIndex++)
{
cmd_Reg_Write[dataIndex+]=txData[dataIndex];
} SendData(cmd_Reg_Write,cmd_Length);
}
(5)、读寄存器数据
void GetRegisterData(uint8_t regAddress,uint8_t readByteLength)
{
//命令的长度由帧头(2个字节)+数据长度(1个字节)+指令(1个字节)+寄存器地址(1个字节)+读取寄存器的字节长度(1个字节) uint16_t cmd_Length=; uint8_t cmd_Reg_Read[]={0x5A,0xA5,0x03,FC_REG_Read,0x00,0x00};//读数据命令 cmd_Reg_Read[]=regAddress; cmd_Reg_Read[]=readByteLength; SendData(cmd_Reg_Read,cmd_Length);
}
3、测试结果
完成上述编写后,接上显示屏下装,我们来查看显示效果:

STM32L476应用开发之四:触摸屏驱动与数据交互的更多相关文章
- UWP开发:APP之间的数据交互(以微信为例)
目录 说明 UWP应用唤醒方式 跟微信APP交互数据 APP之间交互数据的前提 说明 我们经常看到,在手机上不需要退到桌面,APP之间就可以相互切换,并且可以传递数据.比如我在使用知乎APP的时候,需 ...
- 使用JSP/Servlet技术开发新闻发布系统---JSP数据交互(二)
JSP内置对象application application对象 JSP常用的内置对象 对象的作用域 作用的分类 对象的作用域 page作用域 实例 //页面1 <% String name = ...
- Android开发学习——android与服务器端数据交互
1.首先搭建服务器端. 使用MyEclipse开发工具 public class MyServlet extends HttpServlet { @Override protected void do ...
- 使用JSP/Servalet技术开发新闻发布系统------JSP数据交互一
什么是内置对象 JSP内置对象是 Web 容器创建的一组对象,不用通过手动new就可以使用 JSP中的九大内存对象 request 请求对象 response 响应对象 out 输出对象 ...
- Phonegap开发的前后台数据交互
在用Phonegap开发时,需要进行前后台数据交互,在网上找资料,很多东西让人一头雾水,最后借鉴了下面的博客: http://blog.sina.com.cn/s/blog_681929ae01017 ...
- S3C2440触摸屏驱动实例开发讲解
出处:http://www.embeddedlinux.org.cn/html/yingjianqudong/ 一.开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--6 ...
- 基于设备树的TQ2440触摸屏驱动移植
平台 开发板:tq2440 内核:Linux-4.9 u-boot:u-boot-2015.04 概述 之前移植了LCD驱动,下面继续移植触摸屏驱动,然后将tslib也移植上去. 正文 一.移植触 ...
- 【转】树莓派3代3.5寸触摸屏驱动的安装(通过ssh安装)
这是用到的配件的树莓派3代 烧录好系统后,启动的树莓派,我的树莓派已经在一开始通过路由器和局域网,登陆了ssh,设置好了开机就能自动连接到电脑的360wifi,所以无论到哪 里,只要自己的笔记本电脑还 ...
- MVC5 网站开发之四 业务逻辑层的架构和基本功能
业务逻辑层在Ninesky.Core中实现,主要功能封装一些方法通过调用数据存储层,向界面层提供服务. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 ...
随机推荐
- C# WinForm多线程(一)----- Thread类库
Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括 ...
- 【codeforces 870F】Paths
Description You are given a positive integer n. Let's build a graph on vertices 1, 2, ..., n in such ...
- Javascript面向对象特性实现封装、继承、接口详细案例
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- luogu P3175 [HAOI2015]按位或
传送门 如果每个位置上的数字的意义是这个位置被加进集合的最早时间,那么我们要求的就是集合中最大数的期望,使用Min-Max容斥,\(E(max(S))=\sum_{T\subset S}(-1)^{| ...
- easyui 进阶之tree的常见操作
前言 easyui是一种基于jQuery的用户界面插件集合,它为创建现代化,互动,JavaScript应用程序,提供必要的功能,完美支持HTML5网页的完整框架,节省网页开发的时间和规模.非常的简单易 ...
- Python 12 - Mysql & ORM
本节内容 1.数据库介绍 2.mysql数据库安装使用 3.mysql数据库基础 4.mysql命令 5.事务 6.索引 7.Python操作mysql 8.ORM sqlalchemy了解 数据库介 ...
- scrapy基础 之 爬虫入门:先用urllib2来跑几个爬虫
1,爬取糗事百科 概况:糗事百科是html网页,支持直接抓取html字符然后用正则过滤 爬取糗事百科需要同时发送代理信息,即user-agent import urllib2,re def pacho ...
- 使用ENCKEYS方法加密数据
要使用这种数据加密方法,您需要配置Oracle GoldenGate以生成加密密钥并将密钥存储在本地ENCKEYS文件中.此方法使用的永久密钥只能通过根据使用加密密钥填充ENCKEYS文件中的说明重新 ...
- 为什么python运行的慢
最近在leetcode刷题,明显的注意到同样的算法,python运行的要慢的多,查资料得到python运行的慢主要原因如下: 一.动态类型导致运行速度慢,在北邮人论坛里面的这篇帖子中有较为详细的解释, ...
- PHP连接MySQL查询中文时显示Notice: Trying to get property of non-object
1.保证MySQL和PHP的编码一致 MySQL 修改整个数据库的编码格式 注意:如果数据不重要的话,可以直接使用更改数据库的编码格式,再重新建表即可.(此例中的数据库是test) alter ...