STM32 发送字符串至淘晶驰串口屏显示到txt控件——避坑

简介

        最近开发一款基于STM32检测时钟芯片的测试台,需要将时钟芯片的实时时间显示出来。设计过程中,考虑到方便使用,需要使用一款屏幕用于显示时间。前期项目剩余一些淘晶驰串口屏(前任工程师选屏剩余未使用),就拿来用到了这次的测试台上。淘晶驰官方网站提供了UI设计软件,且哔哩哔哩上有教程视频,此处不做过多说明。

项目说明

        测试台主要用于时钟芯片精度检测,项目中需要将多个时钟芯片时间显示到串口屏上,预留串口用于时钟同步。

帮助手册避坑

        对于串口屏,初步学习了下官方手册上如何将图片转换成UI界面,如何对txt控件进行赋值,没用进行深入学习。

        先附图USART HMI软件上帮助文件如何赋值txt控件:

 根据手册1.1文本控件显示说明,在t0处显示时间信息串口发送格式为:

uint8_t ucHMIEnd[3] = {0xFF,0xFF,0xFF};    // 结束符
aStrT0 = "t0.txt";                  // txt字符串指令
aStrTim = "2022/11/22 21:30:30";    // 时间信息字符串
printf("%s="%s"",aStrT0,aStrTim);   // 串口输出时间信息 
HAL_UART_Transmit(&huartHMI,ucHMIEnd,(uint8_t)3,200);    // 发送结束符

        此处这种编写格式,keil中会报错,无法识别到%s。

        继续往下查看手册查找原因,在1.3中给出了发送变量到串口屏例程,然后套用发送例程第三个格式继续调试。

uint8_t ucHMIEnd[3] = {0xFF,0xFF,0xFF};    // 结束符
aStrT0 = "t0.txt";                  // txt字符串指令
aStrTim = "2022/11/22 21:30:30";    // 时间信息字符串
printf("%s=%s",aStrT0,aStrTim);     // 串口输出时间信息 
HAL_UART_Transmit(&huartHMI,ucHMIEnd,(uint8_t)3,200);    // 发送结束符

        调试后串口助手可接收到规定格式字符串,但是txt控件依旧无法改变值。因为前面加双引号格式不被识别,然后就在此格式字符串输出上各种尝试......

 官方单片机输出例程

        根据帮助手册,自己实在无法解决时间信息输出问题,又回到官方网站,查找问题解决方法,最终在官方网站查到了单片机工程文件。此处仅截取txt控件赋值格式。

//-----------------------------发送变化的字符开始--------------------------------
		
		//定义一个字符串数组
		char tjcstr[100];
		
		/********示例1:给文本控件赋值**********
		用sprintf来格式化字符串,给t0的txt属性赋值,
		给控件的文本属性赋值时,内容需要用成对的 \" \" 包裹住,
		当格式化的参数为字符串时,请保证字符串以\0结尾
		*****************************************/
		sprintf(tjcstr, "t1.txt=\"现在是%d\"", a);

		//把字符串发送出去
		HMISends(tjcstr);

		//发送结束符
		HMISendb(0xff);

        官方工程给出的示例代码中,要求将txt文本属性赋值时的内容使用成对的\" \"包裹住。然后根据示例代码修改工程代码:

uint8_t ucHMIEnd[3] = {0xFF,0xFF,0xFF};    // 结束符
aStrT0 = "t0.txt";                  // txt字符串指令
aStrTim = "2022/11/22 21:30:30";    // 时间信息字符串
printf("%s=\"%s\"",aStrT0,aStrTim); // 串口输出时间信息 
HAL_UART_Transmit(&huartHMI,ucHMIEnd,(uint8_t)3,200);    // 发送结束符

        再次编译工程,成了!卡住两天无进展,各种扒帮助手册、官方文件、博文,最终还是靠官方例程解决了,我觉得官方帮助手册可以给出各控件的示例代码,毕竟很多人还是靠看手册来开发的。

转义字符的使用

        那么问题来了,为何需要加成对的\" \"包裹才能赋值。在前面贴出的帮助手册1.3下面有一行标注内容:若不明白“\”使用法,自行百度“C语言转义字符”

         百度到一份C语言常见转义字符,直接拉过来。由表格可以看到,字符串中使用双引号时,需要在前面加转义字符,才能表示为字符型双引号。

        最终总结一点,C语言基础该补补了!

猜你喜欢

转载自blog.csdn.net/cc891/article/details/127990027