找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9331|回复: 5
收起左侧

stm32与hmi串口屏通信调试详解与源程序分享

  [复制链接]
ID:314035 发表于 2020-10-25 20:40 | 显示全部楼层 |阅读模式
关于陶晶池串口屏与 STM32F103 芯片的通信小工程

拿到串口屏,可能很多人都通过视频(本文件夹下”网络资料.txt”文件)搞懂了如何用上位 机下载程序。但空有表面花架却始终搞不懂它与各芯片之间是如何通过串口通信的。下面我 将为大家介绍它的通信规则。芯片以市场上用的最多的 STM32F103 为例。

一.准备工作:
前提:确定是陶晶池 USART HMI 串口屏,不确定可以对照屏幕编号百度或者对照淘宝网上 的图片看一下;安装上位机(压缩包里有);学会上位机的使用。
51hei.png 51hei.png
1.首先先搞懂如何用上位机给串口屏编辑屏幕的界面、下载程序以及用上位机软件给屏幕发 送指令。(具体请看视频,网址在“网络资料.txt”中有。特别是调试时发送的指令这一块。 指令集在压缩包“USARTHMI 屏幕资料.rar”里的“串口 HMI 指令集.pdf”

注意

2.如果下载时串口屏型号与例程型号不一致,可选择“设备 ID”修改(与“调试”同一行


的最右边按钮),但前提是是陶晶池 USART HMI 串口屏。

二.例程讲解 例程说明:
此例程由 ADC 实验改编而来,采集电压值显示。可以通过 TFT 液晶屏和串口屏数值进行比 较。
ADC 用的是引脚 PA1,串口屏的串口输出用的是 USART3:PB10(TX)              PB11(RX)(引脚是对应 STM32F103ZET6 芯片的,如果是 STM32F1 其它型号的芯片则需要在程序中自行修改引脚)。 本例程主要讲解上位机指令在程序中如何实现,从而达到程序指令与上位机调试指令一样的 效果。


1.编辑上位机。 在上位机上编辑自己想要的外观、指令数值输出口(如该例程的“n0,n1,n2,t2,t3”,即可以 修改的部分)等。

2.学会用调试窗口给串口屏发送指令,可以参照视频,还可以参照文件“串口 HMI 指令集.pdf”。 只有这个会用了才能进行下一步。


51hei.png 3.接下来看例程。打开我写的陶晶池串口程序,在例程中我将数据发送指令单独用放在了函
数“hmi.c”“hmi.h”中。主函数中直接调用那两个函数(数值发送函数和字符串发送函数) 就能实现给串口屏发送数据了。功能和上位机调试发送的指令是一样的。





4.在函数“hmi.c”中我已经说明了函数各参数的含义。总体思路是将上位机上的一条指令拆
成两部分-指令和数据。先发指令,再发数据。例如:将上位机上的调试指令“n0.val=2”拆 成指令“n0.val=”和数据“2”。后带的只是它们的长度“len”或位数“len2”。


5.接下来是以“数值发送函数”为例的详解,字符串发送也是一样的。

代码行 40:函数名(串口,指令,指令长度,数据,数据长度) 该函数的指令一般是“n_.val=”,指令长度是 7,具体是改哪个的值要与上位机
上设置的一致。 数据是自己想填入的值。如下面上位机上的数值“2”,数值位数“1” 如果要实现下图所示上位机指令只需在主函数中调用函数
HMI_SendNum(USART3,"n0.val=",7,2,1);


51hei.png 代码行 42-47:指令发送。
由于串口需要一个一个字符发送数据,所以我将“data[t]”(即函数中的“u8 *data”
或例程中的“n0.val=”)拆分成了单个字母一个一个发送给串口


代码行 48-54:数据发送。 将多位数的数值也拆分成单个数值一个一个发送。要注意的是所有的发送都是以
ASCII 码(单个字符)的形式发送的,所以数值要加字符‘0’。由于数值无法显示数字前位 零,所以我将例程的“电压值”部分拆成了四个单个数值显示

代码行 56-65:结束符发送。
这是陶晶池串口屏的数据发送格式。在文档“串口 HMI 指令集.pdf”中有重点提到。



5.字符串发送指令是类似的,在此不予赘述。主函数中只要在使能串口后调用该函数就能使
用了。

结束语:由于是例程,所以就只编写了两个函数。如果您还想调用其他函数可以自行查看文 档“串口HMI 指令集.pdf”,先用上位机调试一遍,成功后再在程序上编写添加相应程序, 通信方式和编码方式都是一样的。

stm32
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"         

#include "hmi.h"

u8 dat[] = "add 1,0,9 0xff,0xff,0xff";
int t=0;
u8 date[] = {0xff,0xff,0xff};

int main(void)
{         
        delay_init();                     //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(9600);                 //串口初始化为115200         
        uart3_init(9600);
         LED_Init();                             //LED端口初始化
         
        while(1)
        {
                for(t=0;t<56;t++)
        {        
            while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);
            USART_SendData(USART3,dat[t]);                                         
        }
                //                HMI_SendNum(USART3,"n0.val=",0,2,4);
//          HMI_SendNum(USART3,"n1.val=",7,(int)2,1);
//          HMI_SendNum(USART3,"n2.val=",7,((int)2)/100,1);
//          HMI_SendNum(USART3,"n3.val=",7,(((int)2)/10)%10,1);
//          HMI_SendNum(USART3,"n4.val=",7,((int)2)%10,1);
//               
//          HMI_SendText(USART3,"t2.txt=",7,"此处用以文本测试",16);        
                                                
                LED0=!LED0;
                delay_ms(250);        
        }
}

注意:串口屏用的开发软件自行搜索。

全部资料51hei下载地址:
自写的与STM32F1通信程序.7z (469.13 KB, 下载次数: 207)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:857251 发表于 2021-6-3 09:17 | 显示全部楼层
谢谢,请问串口屏用的开发软件名称?
回复

使用道具 举报

ID:233756 发表于 2021-9-9 20:21 | 显示全部楼层
无法使用
回复

使用道具 举报

ID:1005649 发表于 2022-2-18 11:21 | 显示全部楼层
正在学习HMI的通讯,谢谢
回复

使用道具 举报

ID:1006580 发表于 2022-2-24 12:12 | 显示全部楼层
陶晶池3.2寸停产了,只能换3.5,工作量很大
回复

使用道具 举报

ID:1053899 发表于 2022-11-29 22:56 | 显示全部楼层
HMI_Pow()函数是怎么定义的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表