USART HMI串口屏+单片机通讯上手体验

这篇具有很好参考价值的文章主要介绍了USART HMI串口屏+单片机通讯上手体验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

USART HMI串口屏+单片机通讯上手体验


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

🌼模拟类似于通过电脑上位机串口调试助手,打印调试信息的效果。由于所使用的模块不带RTC,不然可以将接收数据的时间信息也可以添加上去。

  • 🌿串口屏相关资料下载:http://wiki.tjc1688.com/download/index.html

串口协议解析方式

  • 🚩串口协议模式:0-代表字符串指令协议;1-代表主动解析协议。
    串口屏与单片机通信,DIY,串口屏使用
    • 🌿字符串指令协议接收数据格式:t10.txt=\"数据内容\r\n\"\xff\xff\xff
    • 🌿主动解析协议接收数据格式:"数据内容\r\n\",(至于数据内容赋值给哪个对象,根据个人开发而定),该种解析方式,可以参考官方的《解析不定长字符串(以回车换行结尾)》来实现。

📑串口屏幕显示开发简介

  • 🌿依托上位机软件USART HMI来完成开发,以及模拟和程序下载。软件开发界面比较简单,以功能控件作为基础+逻辑表达来实现所需的功能。
    串口屏与单片机通信,DIY,串口屏使用
  • 🔧作为串口调试信息显示,我主要是使用了文本控件+组织的逻辑代码来实现的。
    串口屏与单片机通信,DIY,串口屏使用
  • 🌿逻辑代码的组织,只需要有一点C语言基础的都可以上手,按照官方提供基本逻辑表达式语法即可实现,所需要使用到的关键字比C语言少的多。
  • 🌿接线方式,仅需5V供电线和串口线,4条线即可,如果只做单向通讯显示,屏幕和单片机之间,3条线就可以了。
  • 🌿单片机和屏幕通过串口通讯,波特率一定要匹配,如果两者都是采用独立独立供电方式,那么还需要需要共GND处理。

📓文本控件功能介绍

  • 📌官方介绍:http://wiki.tjc1688.com/widgets/Text.html
  • 单片机如何对文本控件赋值
  1. 在上位机工程新建一个文本控件,假设为t0,将程序下载到串口屏上,
  2. 串口屏串口与单片机串口连接,两者波特率应一致,单片机RX接串口屏TX,单片机TX接串口屏RX。
  3. 发送指令:单片机串口通过字符串模式发送t0.txt=”六六六”

//注意arduino需要注意编码,因为arduino的默认编码是utf-8,串口屏默认编码是gb2312,请保证单片机与串口屏的编码相同,否则串口屏会显示乱码,或者不显示

  1. 发送结束符:单片机通过HEX模式发送0xff 0xff 0xff
  2. 此时屏幕上的t0控件内的文字变为“六六六”
  • 📜文本控件-如何换行
    如果是上位机软件中直接使用多行编辑,直接按回车可以换行.
    在控件的事件中给文本赋值时用\r,例如t0.txt=”123\r456”
    单片机通过串口发送给屏幕时用\r\n,例如printf(t0.txt=”123\r\n456”)

  • 📋文本数据-显示不完全文章来源地址https://www.toymoban.com/news/detail-777280.html

  1. 文本数据长度不够(检查txt_maxl属性,即划给文本控件的字节长度)GB2312编码下,一个英文或者数字占1个字节,一个中文占2个字节;utf-8编码下,一个英文或者数字占1个字节,一个中文占3个字节
  • 🔨解决方法:将控件txt_maxl改大。
  1. 字库中没有某些字,双击相应的字库可以预览字库,显示字库中有哪些字
  2. 控件属性w,h设置过小导致没办法显示全。
    解决方法:将控件属性w,h改大。
  3. 控件调用字库字符编码和工程设备字符编码不一致。
    解决方法:将工程设备字符编码设置和控件调用的字库字符编码一致。
  4. 字符编码不支持这个字。
    解决方法:p图片来显示这个字。

⛳作为串口数据显示实时性实现

  • ✨让接收到的串口数据按照先后顺序,实时显示,需要用到定时器控件,来实现对已接收到的数据进行处理。
  • 🌿串口文本显示界面,定时器实现页面内所有文本控件内容的更新显示,定时器逻辑实现:
btlen t10.txt,n1.val//获取当前接收到的数据长度
if(n1.val>1)
{
  n1.val=0
  if(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+=1
  if(n2.val==10)
  {
    // substr t0.txt,t0.txt,n0.val,sys0-n0.val//清空文本内容
    n2.val=1
    t0.txt=t10.txt
    t10.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串口屏+单片机通讯上手体验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STC15系列单片机学习4:串口通讯

    在使用单片机的串口前,得先知道所使用的单片机有几个串口,再结合你的硬件电路图来使用哪个串口。 以下是STC15各系列单片机的串口数量,STC15W4K32S4系列有4个串口 工作模式0:同步移位寄存器(官方建议初学者不学) 工作模式1:8位串口,波特率可变 工作模式2:9位串口

    2024年04月13日
    浏览(33)
  • Proteus8仿真:51单片机使用串口进行双机通讯

    元器件 名称 电阻 RES 51单片机 AT89C51 电容 CAP 晶振 CRYSTAL BCD数码管 7SEG-BCD 串口初始化: 首先根据相关的串口寄存器编写对应的初始化代码: STC89C51单片机设有两个定时器/计数器,因定时器1有4种工作方式,而常选用定时器1的工作方式2(8位自动重装)作为波特率的溢出率。 串口

    2024年02月04日
    浏览(34)
  • APM32F072单片机进入STOP模式,并通过RTC Wakeup Timer和USART1串口接收事件唤醒

    串口初始化(注意USART1时钟源要选择HSI): 使用power_init函数初始化RTC,然后调用power_enter_stop_mode(n)函数进入STOP模式,n秒后自动唤醒,或由USART1接收唤醒:

    2024年02月13日
    浏览(40)
  • STM32G0+EMW3080+阿里云实现单片机WiFi智能联网功能(一)EMW3080实现和PC之间的串口通讯

    项目描述:该系列记录了STM32G0+EMW3080实现单片机智能联网功能项目的从零开始一步步的实现过程; 硬件环境:单片机为STM32G030C8T6;物联网模块为EMW3080V2-P;网联网模块的开发板为MXKit开发套件,具体型号为XCHIP MXKit-Base V2.2; 软件环境:STM32需要的软件有STM32CubeMX和STM32CubeIDE;

    2024年02月10日
    浏览(52)
  • 串口屏(USART HMI)与STM32

    目录 一、前期准备 二、串口屏上位机 三、STM32软件编程 1.STM32单片机 2.HMI USART串口屏 本人使用使用的是陶晶驰的串口屏。型号为TJC4832T135_011 3.USB转TTL串口模块电源板(CP2102芯片)(CH340也可以) 官网资料:USART HMI 资料中心 可拖动左侧工具箱进行界面设计,常用文本、按钮、

    2024年02月05日
    浏览(41)
  • AVR128单片机 USART通信控制发光二极管显示

    一、系统方案 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void port_init(void) { PORTA = 0xFF; DDRA = 0x00;//输入 PORTB = 0xFF;//低电平 DDRB = 0x00;//输入 PORTC = 0xFF;//低电平 DDRC = 0xFF;//输出 PORTE = 0xFF; DDRE = 0xfE;//输出 PORTD = 0xff; DDRD = 0xFB;//输出 PORTD = 0xff; PORTF = 0xFF

    2024年02月10日
    浏览(28)
  • 【单片机】51单片机串口的收发实验,串口程序

    这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能: 引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。 定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。 定义了一个发送数据的函数send,该函数将数据发送到串口,等待数据

    2024年02月14日
    浏览(37)
  • 新手如何快速上手学习单片机?

    读者朋友能容我,不使博文负真心 新开专栏,期待与诸君共享精彩 个人主页: 17_Kevin-CSDN博客 专栏:《单片机》   学习单片机是一个有趣且有挑战性的过程。单片机是一种微控制器,广泛应用于各种电子设备和嵌入式系统中。在这篇博客中,我将分享一些学习单片机的方法

    2024年03月13日
    浏览(43)
  • 【51单片机系列】proteus仿真单片机的串口通信

    本文参考:https://zhuanlan.zhihu.com/p/425809292。 在proteus之外使用串口软件和单片机通信。通过在proteus设计一个单片机接收PC发送的数据,并将接收的数据发送出去,利用软件【Configure Virtual Serial Port Driver】创建一对虚拟串口,利用软件【串口助手】向单片机发送数据。 proteus仿真

    2024年01月17日
    浏览(43)
  • AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)

     说一下功能:客户机发送0x01到服务机 2服务单片机应答0xf2到客户机 3客户机接收到0xf2,发送信息153432这6个数字到服务机 4client发送完信息后发送0xaa结束通信 5server接收到0xaa后回复0xaa结束通信,从此老死不相往来 看代码: 服务端代码:    

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包