如何做网站服务器,附近装修工人电话,宠物网站建设理念,网站模版 源码之家USART HMI串口屏单片机通讯上手体验 #x1f516;本文采用淘晶驰4.3寸IPS串口屏实物验证#xff0c;HMI串口屏经简单配置即可快速实现#xff0c;串口通讯效果。串口屏上手简单#xff0c;有独立的开发套件#xff0c;容易上手#xff0c;驱动显示和功能代码独立。本文仅… 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改大。
字库中没有某些字双击相应的字库可以预览字库显示字库中有哪些字控件属性wh设置过小导致没办法显示全。 解决方法将控件属性wh改大。控件调用字库字符编码和工程设备字符编码不一致。 解决方法将工程设备字符编码设置和控件调用的字库字符编码一致。字符编码不支持这个字。 解决方法p图片来显示这个字。
⛳作为串口数据显示实时性实现
✨让接收到的串口数据按照先后顺序实时显示需要用到定时器控件来实现对已接收到的数据进行处理。串口文本显示界面定时器实现页面内所有文本控件内容的更新显示定时器逻辑实现
btlen t10.txt,n1.val//获取当前接收到的数据长度
if(n1.val1)
{n1.val0if(n2.val0){t0.txtt10.txt//将文本赋值为空t10.txt}if(n2.val1){t2.txtt10.txt//将文本赋值为空t10.txt}if(n2.val2){t3.txtt10.txt//将文本赋值为空t10.txt}if(n2.val3){t4.txtt10.txt//将文本赋值为空t10.txt}if(n2.val4){t5.txtt10.txt//将文本赋值为空t10.txt}if(n2.val5){t6.txtt10.txt//将文本赋值为空t10.txt}if(n2.val6){t7.txtt10.txt//将文本赋值为空t10.txt}if(n2.val7){t8.txtt10.txt//将文本赋值为空t10.txt}if(n2.val8){t9.txtt10.txt//将文本赋值为空t10.txt}n2.val1if(n2.val10){// substr t0.txt,t0.txt,n0.val,sys0-n0.val//清空文本内容n2.val1t0.txtt10.txtt10.txtt2.txtt3.txtt4.txtt5.txtt6.txtt7.txtt8.txtt9.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);}