USART HMI串口屏+单片机通讯上手体验
USART HMI串口屏+单片机通讯上手体验
- 🔖本文采用淘晶驰4.3寸IPS串口屏实物验证,HMI串口屏经简单配置即可快速实现,串口通讯效果。串口屏上手简单,有独立的开发套件,容易上手,驱动显示和功能代码独立。本文仅针对串口调试信息显示实现做介绍,不涉及复杂功能实现。
- 🎞打印输出效果:


🌼模拟类似于通过电脑上位机串口调试助手,打印调试信息的效果。由于所使用的模块不带RTC,不然可以将接收数据的时间信息也可以添加上去。
- 🌿串口屏相关资料下载:
http://wiki.tjc1688.com/download/index.html
串口协议解析方式
- 🚩串口协议模式:0-代表字符串指令协议;1-代表主动解析协议。

-
- 🌿字符串指令协议接收数据格式:
t10.txt=\"数据内容\r\n\"\xff\xff\xff
- 🌿字符串指令协议接收数据格式:
-
- 🌿主动解析协议接收数据格式:
"数据内容\r\n\",(至于数据内容赋值给哪个对象,根据个人开发而定),该种解析方式,可以参考官方的《解析不定长字符串(以回车换行结尾)》来实现。
- 🌿主动解析协议接收数据格式:
📑串口屏幕显示开发简介
- 🌿依托上位机软件USART HMI来完成开发,以及模拟和程序下载。软件开发界面比较简单,以功能控件作为基础+逻辑表达来实现所需的功能。

- 🔧作为串口调试信息显示,我主要是使用了文本控件+组织的逻辑代码来实现的。

- 🌿逻辑代码的组织,只需要有一点C语言基础的都可以上手,按照官方提供基本逻辑表达式语法即可实现,所需要使用到的关键字比C语言少的多。
- 🌿接线方式,仅需5V供电线和串口线,4条线即可,如果只做单向通讯显示,屏幕和单片机之间,3条线就可以了。
- 🌿单片机和屏幕通过串口通讯,波特率一定要匹配,如果两者都是采用独立独立供电方式,那么还需要需要共GND处理。
📓文本控件功能介绍
- 📌官方介绍:
http://wiki.tjc1688.com/widgets/Text.html - 单片机如何对文本控件赋值
- 在上位机工程新建一个文本控件,假设为t0,将程序下载到串口屏上,
- 串口屏串口与单片机串口连接,两者波特率应一致,单片机RX接串口屏TX,单片机TX接串口屏RX。
- 发送指令:单片机串口通过字符串模式发送t0.txt=”六六六”
//注意arduino需要注意编码,因为arduino的默认编码是utf-8,串口屏默认编码是gb2312,请保证单片机与串口屏的编码相同,否则串口屏会显示乱码,或者不显示
- 发送结束符:单片机通过HEX模式发送0xff 0xff 0xff
- 此时屏幕上的t0控件内的文字变为“六六六”
-
📜文本控件-如何换行
如果是上位机软件中直接使用多行编辑,直接按回车可以换行.
在控件的事件中给文本赋值时用\r,例如t0.txt=”123\r456”
单片机通过串口发送给屏幕时用\r\n,例如printf(t0.txt=”123\r\n456”) -
📋文本数据-显示不完全
- 文本数据长度不够(检查txt_maxl属性,即划给文本控件的字节长度)GB2312编码下,一个英文或者数字占1个字节,一个中文占2个字节;utf-8编码下,一个英文或者数字占1个字节,一个中文占3个字节
- 🔨解决方法:将控件txt_maxl改大。
- 字库中没有某些字,双击相应的字库可以预览字库,显示字库中有哪些字
- 控件属性w,h设置过小导致没办法显示全。
解决方法:将控件属性w,h改大。 - 控件调用字库字符编码和工程设备字符编码不一致。
解决方法:将工程设备字符编码设置和控件调用的字库字符编码一致。 - 字符编码不支持这个字。
解决方法:p图片来显示这个字。
⛳作为串口数据显示实时性实现
- ✨让接收到的串口数据按照先后顺序,实时显示,需要用到定时器控件,来实现对已接收到的数据进行处理。
- 🌿串口文本显示界面,定时器实现页面内所有文本控件内容的更新显示,定时器逻辑实现:
btlen t10.txt,n1.val//获取当前接收到的数据长度
if(n1.val>1)
{n1.val=0if(n2.val==0){t0.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==1){t2.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==2){t3.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==3){t4.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==4){t5.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==5){t6.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==6){t7.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==7){t8.txt=t10.txt//将文本赋值为空t10.txt=""}if(n2.val==8){t9.txt=t10.txt//将文本赋值为空t10.txt=""}n2.val+=1if(n2.val==10){// substr t0.txt,t0.txt,n0.val,sys0-n0.val//清空文本内容n2.val=1t0.txt=t10.txtt10.txt=""t2.txt=""t3.txt=""t4.txt=""t5.txt=""t6.txt=""t7.txt=""t8.txt=""t9.txt=""}
}
🏳🌈单片机端串口数据打印格式
- 🌿基于stm32单片机,Keil开发环境:
printf("t10.txt+=\"STM32F303 SysClk:%u\r\n\"\xff\xff\xff", SysClk);printf("t10.txt+=\"Hello World%d\r\n\"\xff\xff\xff", cnt);
int main(void)
{/* USER CODE BEGIN 1 */uint16_t cnt = 0;uint32_t TimerUART;char str[32];/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */uint32_t SysClk = HAL_RCC_GetSysClockFreq();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if((HAL_GetTick() - TimerUART) > 1000){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
// HAL_Delay(1000);printf("t10.txt+=\"STM32F303 SysClk:%u\r\n\"\xff\xff\xff", SysClk);HAL_Delay(500);cnt++;printf("t10.txt+=\"Hello World%d\r\n\"\xff\xff\xff", cnt);
// sprintf(str, "t10.txt+=\"Hello World%d\r\n\"\xff\xff\xff", cnt);
// printf("%s", str);
// memset(str, 0, 32);TimerUART = HAL_GetTick();}}/* USER CODE END 3 */
}
- 🌿基于Arduino平台
Serial.print("t10.txt+=\"from Arduino UNO\r\n\"\xff\xff\xff");
- 测试程序:
#include <SoftwareSerial.h>
SoftwareSerial TJC(8,9);//8:RxD,9:TxD
//unsigned long nowtime;
unsigned int cnt;
void setup() {// put your setup code here, to run once:Serial.begin(9600);//初始化串口TJC.begin(9600);pinMode(LED_BUILTIN, OUTPUT);//因为串口屏开机会发送88 ff ff ff,所以要清空串口缓冲区while (TJC.read() >= 0); //清空串口缓冲区
//nowtime = millis(); //获取当前已经运行的时间
}void loop() {char str[32];cnt++;sprintf(str, "t10.txt+=\"Hello World%d\r\n\"\xff\xff\xff", cnt);// put your main code here, to run repeatedly:digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));delay(1000);TJC.print(str);delay(1000);
// Serial.print("t10.txt+=\"from Arduino UNO\r\n\"\xff\xff\xff");
TJC.print("t10.txt+=\"from Arduino UNO\r\n\"\xff\xff\xff");}相关文章:
USART HMI串口屏+单片机通讯上手体验
USART HMI串口屏单片机通讯上手体验 🔖本文采用淘晶驰4.3寸IPS串口屏实物验证,HMI串口屏经简单配置即可快速实现,串口通讯效果。串口屏上手简单,有独立的开发套件,容易上手,驱动显示和功能代码独立。本文仅…...
Linux进程概念(1)
📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容为进程的概念做铺垫,主要介绍冯诺依曼体系结…...
uniapp 查看安卓第三方插件抛出的异常
0.安装好andriod studio 和hbuilder 1.配置环境变量 鼠标右键此电脑-》设置》关于》高级系统设置》环境变量》系统变量》path中加入 具体的hbuildr adb目录看个人 2.在cmd中输入命令adb version 查看是否配置成功 出现版本号就是配置成功了 3.去hbuilder中,导航栏运…...
美妆造型教培服务预约小程序的作用是什么
美业市场规模很高,细分类目更是比较广,而美妆造型就是其中的一类,从业者也比较多,除了学校科目外,美妆造型教培机构也有生意。 对机构来说主要目的是拓客引流-转化及赋能,而想要完善路径却是不太容易&…...
Pytorch常用函数
Pytorch 1 一些操作含义2 常用函数torch.squeezetorch.unsqueezetorch.transpose随机数生成Tensor详细内容 1 一些操作含义 下划线后缀含义: 在touch中函数后面加下划线代表是原位(In-place)操作,也就是内存的位置不变化,比如torch.add(valu…...
如何利用python连接讯飞的星火大语言模型
星火大模型是科大讯飞推出的一款人工智能语言模型,它采用了华为的昇腾910 AI处理器。这款处理器是一款人工智能处理器,具有强大的计算能力和高效的能耗控制能力。 华为昇腾910 AI处理器采用了创新的Da Vinci架构,这种架构在设计上充分考虑了…...
【Kubernetes 基本概念】Kubernetes 的架构和核心概念
目录 一、Kurbernetes1.1 简介1.2 为什么要用K8s?1.3 K8s的特性 二、Kurbernetes集群架构与组件三、Kurbernetes的核心组件3.1 Master组件3.1.1 Kube-apiserver3.1.2 Kube-controller-manager3.1.3 Kube-scheduler 3.2 配置存储中心——etcd3.3 Node组件3.3.1 Kubelet3.3.2 Ku…...
Docker安装部署Elasticsearch+Kibana+IK分词器
Docker安装部署ElasticsearchKibanaIK分词器 Docker安装部署elasticsearch拉取镜像创建数据卷创建网络elasticsearch容器,启动! Docker安装部署Kibana拉取镜像Kibana容器,启动! 安装IK分词器安装方式一:直接从github上…...
PCL setCameraPosition 参数讲解
setCameraPosition 的原型如下void setCameraPosition (double pos_x, double pos_y, double pos_z,double view_x, double view_y, double view_z,double up_x, double up_y, double up_z, int viewport 0);pos_x pos_y pos_z为相机所在的位置view_x view_y view_z 是焦点所…...
有关YOLOV5在测试时,图片大小被调整的问题
执行detect.py文件,在运行栏中出现以下: detect: weightsyolov5s.pt, sourcedata\images, datadata\coco128.yaml, imgsz[640, 640], conf_thres0.25, iou_thres0.45, max_det1000, device, view_imgFalse, save_txtFalse, save_confFalse, save_cropFa…...
【机器学习】四、计算学习理论
1 基础知识 计算学习理论(computational learning theory):关于通过“计算”来进行“学习”的理论,即关于机器学习的理论基础,其目的是分析学习任务的困难本质,为学习算法体统理论保证,并根据结…...
spring解决后端显示时区的问题
spring解决后端显示时区的问题 出现的问题: 数据库中的数据: 解决方法 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: Asia/Shanghai...
大模型冷思考:企业“可控”价值创造空间还有多少?
文 | 智能相对论 作者 | 叶远风 毫无疑问,大模型热潮正一浪高过一浪。 在发展进程上,从最开始的技术比拼到现在已开始全面强调商业价值变现,百度、科大讯飞等厂商都喊出类似“不能落地的大模型没有意义”等口号。 在模型类型上࿰…...
ctfshow-web入门37-52
include($c);表达式包含并运行指定文件。 使用data伪协议 ?cdata://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg 是<?php system(cat flag.php);?> base64加密 源代码查看得到flag 38 多禁用了ph…...
前端项目部署后,需要刷新页面才能看到更新内容
问题背景 前端项目部署更新后,通知业务验证,业务点击收藏的标签,打开网页后没有看到修改的内容,每次都需要手动刷新,用户体验非常不好。 问题原因:缓存未过期,浏览器直接读取本地缓存…...
android 13 write javaBean error at *** 错误
报错代码:红框处。 注意:android10 不会报错,运行正常。android13就报错 错误原因:对象中VerifyDownloadEntity,有个Bitmap成员变量 public class VerifyDownloadEntity {private Bitmap bitmap;private String cooki…...
Only fullscreen opaque activities can request orientation
出现Only fullscreen opaque activities can request orientation是谷歌爸爸在安卓8.0版本时为了支持全面屏,增加了一个限制:如果是透明的Activity,则不能固定它的方向,因为它的方向其实是依赖其父Activity的(因为透明…...
前端实验(一)单页面应用的创建
实验目的 掌握使用vite创建vue3单页面程序命令熟悉所创建程序的组织结构熟悉单页面程序运行原理能够编写简单的单页面程序 实验内容 创建一个名为vue-demo的单页面程序编写简单的单页面程序页面运行单页面程序 实验步骤 使用vite创建单页面程序 创建项目名为目录vue-demo的…...
数字人小灿:始于火山语音,发于 B 端百业
火爆的数字人市场又有新消息来袭:火山语音的数字人小灿来了! 数字人小灿首曝视频 今年以来,在生成式AI浪潮的助推下,大量企业争相布局数字人赛道。市场之所以如此火热,是因为AI数字人已被视为人工智能时代智能交互的入…...
蓝桥杯刷题
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 👉🏻最大降雨量 原题链接࿱…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
