目录

  • 广州大彩串口屏与STM32F407通讯
    • 一、大彩串口屏介绍
    • 二、硬件连接
    • 三、程序移植
    • 四、触摸屏组态及函数调用
    • 五、最终效果
    • 结语

广州大彩串口屏与STM32F407通讯

之前一直用正点原子的LCD屏,但是占用太多GPIO引脚,所以打算换一块串口屏,某宝上看了一圈,看中了广州大彩的M系列8寸屏,厂家提供了单片机例程,但是芯片是F103的,而我的板子是ST的STM32F4DISCOVERY,需要进行移植,移植花了我半天时间,踩了不少坑,为了避免后来者少踩坑,所以决定写一下移植过程。其实之前有人写过怎么移植,个人觉得写得不够透彻,而且有些步骤多余,所以决定自己来。

一、大彩串口屏介绍

作为工控行业从业十年的工程师,接触过不少外国牌子的触摸屏,如西门子的TP1200\TP900,三菱的GOT1000、GOT2000,等等,还有台达的触摸屏。这回做项目开发,本着支持国产的初衷(省钱),在某宝选中了广州大彩的M系列串口屏,确实很惊艳,功能丝毫不逊色与一线品牌,全中文的组态软件也很友好。

我选的串口屏型号是DC80600M080AV_1111_0X(T/C/N) ,M系列8寸医用级,支持RS232/TTL串口通讯,带了个小喇叭,支持AV输入(可流畅播放外部视频),声音输出。其实不管F系列还是M系列,都可以参照我的方法移植。

二、硬件连接

先看一下触摸屏背部构成,看下图。

需要我们接线的主要在最下方的通信接口,这是一个8Pin的接口,局部图片如下:

  1. 8pin接口从左到右依次为VCC、VCC、NC、DOUT、DIN、DIN、GND、GND。
    其中VCC跟GND用于供电接入,支持4.5V-30V;而DOUT、DIN分为别触摸屏自身的串口TX、RX端口,接线连接如下:
    VCC-------+5V输入
    GND------0V输入/串口共地端
    DOUT-----接单片机USART_RX
    DIN-------接单片机USART_TX
    2.除了上面的连接外,请务必注意!!!因为我们单片机的USART只支持TTL电平,所以需要把串口屏背部的J5这里短接起来,自己拿电烙铁放焊锡把这两个点焊起来就OK了,不短接的话,大概率要烧掉你的单片机板子了,因为RS232输出的是15~24V的电平。
    3.当然,你也可以学我这么接。我利用厂家配的调试板,加了个6针的排针,这里要注意的是:板子上的TXD接单片机的TX,板子上的RXD接单片机的RX,最后把GND共地接起来。这样接的好处是可以直接利用厂家的AC220–DC5V的供电接口,改动小一些。

三、程序移植

购买串口屏,厂家提供了相应的例程,但是例程是基于F103开发的,在厂家官网可以下载。而当你用的是别的MCU的时候,就比较头疼了。并且最苦恼的是什么?这个例程是基于标准库函数写的,而现在大部分项目都用HAL库函数写,导致很多地方不可以直接复制粘贴,要针对性地修改!直接拷贝过去的话,error大概有45条,warming大概200多条! 是不是很麻烦?
把厂家的例程下下来之后,打开这个例程项目。

  1. 打开项目文件夹的以下路径:keil5_STM32\STM32\DCDEMO7\src,把cmd_queue.c、hmi_driver.c,两个C文件复制到你的项目里;再打开:keil5_STM32\STM32\DCDEMO7\inc,把cmd_process.h、cmd_queue.h、hmi_driver.h,三个头文件复制到你的项目里。至于怎么添加C文件、头文件,这个不用我教了吧。。。


    这里说一下这两个C文件有啥用,cmd_queue.c文件其实就是个自己写的FIFO函数,包括清除缓存、取缓存数据。而hmi_driver.c文件里存放了所有跟串口屏数据交互的函数,例如画面切换、控件数值更新等等,全在这里面。
  2. 修改cmd_queue.c,把19行这一句注释掉,这个ulitity.h没啥用,其对应的C文件里面重新定义了delay函数,你自己项目里有,没必要用他的,所以注释掉。
  3. 修改hmi_driver.c、hmi_driver.h,把这两个文件里面的串口头文件改成你自己的串口,比如我项目,用USART3来连接串口屏,那么就是#include “usart3.h”
  4. 打开厂家例程里的hmi_user_uart.h,把这几行复制到你自己的串口头文件里(如usart3.h),这里面要注意,那句#include "stm32F10x_it.h"不要,宏定义全部都挪过去,串口初始化函数改成你自己的(比如void usart3_init),最下面那个senchar函数,千万不要改函数名,下一步讲一下这个函数怎么修改。
  5. 接第4部分,讲一下void SenChar(uchar t) 函数怎么修改,这个函数的作用是发送一个字节到串口屏。原函数是这样

    这里分两种情况,如果你的项目用标准库函数开发的,那么只需要把USART1改成你对应的串口就行了;如果你用HAL库函数开发的,就需要重写这个函数,不然会报错,我用的是USART3,像我这样改写即可,在usart的头文件跟C文件中,把t重新定义成uint8_t:有人会问为什么我不直接用HAL库的串口发送函数HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)?你们可以仔细看,这个HAL库函数里传入的不是你要发送的数据,而是数据的指针首地址,而senchar函数的目的是只发送一个字节,所以我直接把传输的对象赋值给数据寄存器,达到我们的目的。贴上代码:
void  SendChar(uint8_t t)
{USART3->DR=t; while((USART3->SR&0X40)==0);//等待发送结束 等待发送结束
}
  1. main.c文件修改,对于主C文件,我们需要把例程main.c里面的头文件引用、变量声明、函数,都拷贝到新项目里,其中变量如果没用到的,最后再删掉,避免浪费内存,如下:



    其中头文件只需要拷贝三个;而变量声明则全部拷贝过去,最后用不上再删除;而函数则从上图的位置开始,一直拷贝到main.c的最底端;以上挪到自己项目的main.c文件中。至此,项目移植基本完了。

四、触摸屏组态及函数调用

官网有出厂工程文件,直接下载下来根据自己需求修改就行,背景图片可以用photoshop之类的软件修改,大家可以看看我修改后的主画面内容。

效果还行吧,毕竟是基于官方的工程修改的。以主画面里面的状态指示画面为例,讲述如何实现程序设计及调用。

  1. 设置好画面的背景图片,然后在每个数据显示的位置方式文本控件(不明白的建议最好自己学学触摸屏的组态教程),文本控件属性设置为用户主机输入,设置好后编译触摸屏,得到该画面ID、控件ID
  2. 主函数main.c调用串口屏函数,主函数的while(1)循环里添加以下函数调用,代码如下。
while(1)
{size = queue_find_cmd(cmd_buffer,CMD_MAX_SIZE);                              //从缓冲区中获取一条指令if(size>0&&cmd_buffer[1]!=0x07)                                              //接收到指令 ,及判断是否为开机提示{                                                                           ProcessMessage((PCTRL_MSG)cmd_buffer, size);                             //指令处理  }  if(time%20==0) {UpdateUI();}
}

第一个if的作用是接收缓存区的第一条指令,判定如果非开机提示,则调用ProcessMessage()函数,解析串口屏发过来的指令集,以我上面的状态指示画面为例,当解析到串口屏发过来的画面切换指令时,将自动调用NotifyScreen()函数,判定切换到了哪个画面,然后在对应if(screen_id == X)的条件语句中写入自己需要执行的动作函数,比如我需要在状态指示画面的文本控件2上显示左轮速度(整数),在文本控件4上显示航向角(浮点数),则调用的函数如下:

void NotifyScreen(uint16 screen_id)
{//TODO: 添加用户代码current_screen_id = screen_id;                                                   //在工程配置中开启画面切换通知,记录当前画面ID//进到画面1亮if(screen_id == 1)   //判断如果是画面1,则操作以下控件更新数据显示{AnimationPlayFrame(1,9,0);SetTextInt32(1,2,Left_val,0,1);     //更新画面ID=1,控件ID=2上的数据,其中Left_val为你需要传入的数据,整数型SetTextInt32(1,3,Right_val,0,1);SetTextFloat(1,4,attitude.yaw,1,1);  //更新画面ID=1,控件ID=4上的数据,其中attitude.yaw为你需要传入的数据,浮点型SetTextInt32(1,5,mag_letf_sensor,0,1);SetTextInt32(1,6,mag_right_sensor,0,1);}}

显示整数需要调用SetTextInt32(),显示浮点数需要调用SetTextFloat(),所有需要执行动作的指令函数,都在hmi_driver.c文件里可以找到,你想实现什么功能就相应地调用哪个函数。此外我在UpdateUI()函数里也添加了同样的判定语句,只要检测到画面切换到1,那么就更新文本控件内的数据。大家可以看我的主循环while(1)里,UpdateUI()函数并不是每次都调用,而是有一定的间隔时间,大家注意一定不要频繁调用,因为厂家建议10~100ms往屏写一次数据比较好,避免内存溢出,我是间隔200ms发一次。

void UpdateUI()
{//文本设置和显示  定时20ms刷新一次if(current_screen_id==1)                //判断如果是画面1,则操作以下控件更新数据显示                              {AnimationPlayFrame(1,9,0);SetTextInt32(1,2,Left_val,0,1);SetTextInt32(1,3,Right_val,0,1);SetTextFloat(1,4,attitude.yaw,2,1);SetTextInt32(1,5,mag_letf_sensor,0,1);SetTextInt32(1,6,mag_right_sensor,0,1);                                                                            }
}

五、最终效果

最后贴一个我移植成功后的效果图吧,画面ID=1时,各个控件每200ms刷新一次数据,效果图如下:

结语

经过一番操作,相信你已经成功移植串口屏例程到自己项目里面了,如果有问题,可以私信我,文章转载,请注明作者跟出处哦。

广州大彩串口屏与STM32F407通讯相关推荐

  1. 大彩串口屏与STM32G070CBT6通讯调试

    大彩串口屏与STM32G070CBT6通讯调试 1 大彩串口屏 1.1 指令格式和指令集 1.2 硬件连接与程序下载 2 串口屏例程移植到STM32G070CBT6 2.1 STM32CubeMX生成 ...

  2. 计算机串口标准尺寸图,广州大彩串口屏—基本型产品选型和外观尺寸图.pdf

    基本型产品选型和外观尺寸图 1 基本型产品外观尺寸图 1 1 3 5 寸基本型 RS232 系列外观尺寸图 1 2 4 3 寸 RS232 RS485 带外壳系列外观尺寸图 1 3 5 0 寸基本型 ...

  3. 大彩串口屏如何实现定时和计时的操作功能

    一.概述 本文主要阐述的是广州大彩串口屏如何使用lua脚本实现定时和计时的操作功能,目前这两个应用在工业上或者生活中都有广泛应用.大彩屏定时功能是设置一个具体的时间,然后时间到了用户设定的时间之后,对 ...

  4. 串口屏应用案例_大彩串口屏在高拍仪上的应用方案

    一.概况 高拍仪也有人称为速拍仪,或有的教育机构称之为备课王.一般来说,我们称之为高拍仪.是最新研发出来的一款超便携低碳办公用品,也是一款办公领域革新性产品,它具有折叠式的超便捷设计,能完成一秒钟高速 ...

  5. 串口屏应用案例_大彩串口屏在呼吸机上的应用方案

    一.产品概况 呼吸机是一种能够起到预防和治疗呼吸衰竭,减少并发症,挽救及延长病人生命的至关重要的医疗设备.在现代临床医学中,它作为一项能人工替代自主通气功能的有效手段,已普遍用于各种原因所致的呼吸衰竭 ...

  6. 学习笔记——大彩串口屏“常识”

    文章目录 大彩串口屏常识 关于rs232与ttl选择 配套软件VisualTFT 调试版 串口屏与单片机的连接 大彩串口屏常识 关于rs232与ttl选择 一般情况下,你会在买到手的大彩串口屏背后发现 ...

  7. 大彩串口屏物联型EW10.1寸可配置以太网通信,实现物联网远程升级功能

    大彩串口屏物联型EW10.1寸新品发布!该产品拥有10.1寸液晶屏,分辨率有1024*600,支持电容触摸.电阻触摸.拥有炫酷的动画效果,页面切换流畅.使用立体声喇叭,可以播放语音.视频:可配置以太网 ...

  8. 串口屏应用案例_大彩串口屏在节水灌溉设备行业的应用方案

    一.节水灌溉设备产品概述 节水灌溉设备是指具有节水功能用于灌溉的机械设备的统称.其种类主要有喷灌式.微灌式.全塑节水灌溉系统(又包括:软管三通阀,低压出地阀,半固定式喷灌与移动式).农业作为国家的经济 ...

  9. stm32cubeMX学习六、Freertos配置综合实践(移植大彩串口屏程序框架)

    一节入门了stm32cubeMX SPI 0.96 OLED的配置,这节我们来学习下如何配置freertos,并驱动大彩串口屏. 本程序编写基于秉火霸道STM32F103ZET6运行环境. 一.配置时 ...

  10. 大彩串口屏医用级首款圆形UI界面2.1寸串口屏新品正式发布!

    一.产品介绍 大彩串口屏医用级首款圆形UI界面2.1寸串口屏新品正式发布! 型号:DC48480KM021_1001_1C 该产品是一款2.1寸分辨率为 480480的医用级工业组态串口屏.拥有2.1 ...

最新文章

  1. ios学习笔记-数据持久化
  2. Vulnhub靶机渗透之 RAVEN: 1
  3. VTK:图表之EdgeListIterator
  4. Hazelcast入门指南第2部分
  5. 两个队列实现一个栈思路c语言,两个栈实现队列功能C语言实现能运行!
  6. type与instance区别
  7. Linux内核源码阅读之系统调用mmap()
  8. Neo4j ---windows下载安装neo4j
  9. 沉睡者 - 抖音中视频计划横版16:9视频制作教程
  10. 苏秋贵:你为什么放弃了多年坚持的制造业?
  11. 进化树软件ete3报错记录
  12. php挂机源码,织音QQ助手QQ互赞挂机开源版源码
  13. 一个XSS靶场练习记录
  14. ARM学习系列 ---- RISC和CISC概述
  15. 一个可以扩容C盘的第三方免费软件
  16. php支持postgresql,php支持postgresql
  17. Visio二次开发(二)----Shape的添加和连接
  18. GIS就业参考系列之技术篇——七种武器
  19. 如何设计出留住买家的B2C网站
  20. 2021字节跳动春招技术面试题:mysql间隙锁触发条件

热门文章

  1. php formdata 解析,系统学习前端之FormData详解
  2. python迭代遍历目录下所以文件(Iterating through directories with Python)
  3. 单主机多git账户多rsa密钥+根据私钥生成公钥+knownhosts+.git/config相关配置
  4. 在Qtopia中添加国际化支持
  5. python中合法命名的变量名_「变量名」python中变量的命名以及使用 - 金橙教程网...
  6. 计算机专业西交大和哈工大,本科毕业打算深造,西交、北邮、哈工大学计算机选哪所?北邮更好...
  7. Linux kali2021 密码学PBC库安装
  8. IaaS基础架构云 —— 云网络
  9. linux中fish脚本,FISH:Linux 下的一个智能易用的 Shell
  10. cflow——C语言函数调用关系生成器