1424|3

44

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

【STM32L476RG】第三节——基于TJC的串口屏的串口基本使用 [复制链接]

本帖最后由 Zhao_kar 于 2023-10-5 18:18 编辑

STM32L476RG第三节——基于TJC的串口屏的串口基本使用

闲聊:上一期讲了串口,然后接下来就讲解串口屏的使用,这边使用的是TJC的串口屏,然后需要下载一下他们家的UI设计软件USART HMI,方便后续开发,这一节没有什么理论,只讲怎么使用这个软件和如何使用stm32的串口去驱动屏幕。

上一期的补充:上一期我没有提到RXTX这个,单片机串口和ch340的连接是这么个顺序,单片机的RX连接ch340的TX,TX连接ch340的RX。

这一期的补充:本次需要两个CH340模块,因为需要依赖HMI软件的一个串口功能方便开发,免得连线连来连去的。

此外备注:本次只是简单讲讲使用,后续项目中,实际上用的到的可能只有文本显示,也就是变量显示功能,然后本篇报告因为展示,会使用上一期没讲到的串口接收函数。本次实验实现功能为

  • 串口屏的HMI自带仿真调试
  • 按键组件和文本组件的使用
  • 按键按下控制单片机LED亮灭
  • 按键按下控制单片机向串口屏发送信息使得文本显示

一、硬件连接

本次实验实际需要串口屏一个,两个ch340,一个stm32l4单片机,具体连线为,串口屏的5V和GND供电交给第一个ch340模块,RX与TX与ch340的相反连接,第二个ch340用于和单片机连接。如下图1

二、HMI的配置和使用

1、首先下载HMI的软件,打开界面,然后新建文件不讲解了,选对型号就行,根据自己的屏幕型号选择

2、添加控件,如下,两个按钮,四个文本控件,其中两个用于接收单片机发送的数据,从而显示,如下图2

3、添加字库,字库和文件建立这里不说了,自己可以摸索,值得注意的是字库要用gb123,别用utf8,这样子默认的会出错,导致串口屏下载的时候无法下载

4、编写函数

 

  • 在主背景添加
    baud=115200
  • 按钮一添加
    printh 01

     

  • 按钮二添加
    printh 02

5、改变组件的TXT显示,只需要在这个位置更改就行

6、注释:这里不用管,因为就一个字库

  • 按键使用,字库font选择,这个需要选择一个字库去显示文字
  • txt_maxl——字符最大长度,这个用于分配内存空间

7、串口屏配置完成,进行下载,可以看到下载成功后如下图

三、cubemx的配置和keil的编写

1、跟上一篇一样,usart的配置和其他的不变,唯一需要添加到是中断,需要勾选usart1的中断,以及为了点灯,把GPIO的PA5配置一下就行了。

2、函数和代码块的解释

  • uint8_t Rx;   //定义一个RX,用于单片机的接收,即为,在单片机的中断处,使用RX来接受外部串口设备的值 
  • uint16_t TX1=01;//定义两个变量,一个用于发送到串口屏的文本一
  • uint16_t TX2=02;//发送到文本二
  • HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx, 1);//上一篇讲过了,就是一个接收函数,这里用于接收RX的值(PS:我的RX的x小写了,不用管,按照自己的写就行)
  • void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
         if(huart == &huart1)
    	{
    			switch(Rx)
    		{
    			case 0x01:
        {
            HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
    //				printf("01");
    				printf("t2.txt=\"%u \"\xff\xff\xff", TX1); 
        }							break;
    			case 0x02:
        {
            HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);			
    //				printf("02");
    				printf("t3.txt=\"%u \"\xff\xff\xff", TX2); 
        }							break;                    
    		}		
    				HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx,     1);//循环使能,才能不断接政
        }
    }

    重点解释这部分,这个是用于单片机的串口中断函数的,如果单片机的串口检测到接收到了数据,进入中断,然后使用switch判断,如果RX的值是1,则关闭LED,如果RX的值是2,则打开LED,同时,向文本组件发送数据。

  • printf("t2.txt=\"%u \"\xff\xff\xff", TX1); //这是文本显示部分,用于单片机向串口组件发送数据,其中t2是对应组件的标签,后面的不用管,知道是16进制的就行,TX1就是我们要发送的。

3、keil的编写

  • cubemx跟第二节一样,没什么变动,所以接下来直接讲keil如何操作,且HMI已经配置成功
  • 首先要配置printf函数,跟第二节一样,usart.c配置一下就行了,且勾选mircousb的选项
  • 然后包含#include<stdio.h>
  • 然后定义变量,如前面提到的三个,rx,tx1,tx2
    uint8_t Rx;	
    uint16_t TX1=01;
    uint16_t TX2=02;

     

  • 然后在主函数的begin2处添加接收函数
      /* USER CODE BEGIN 2 */
    	HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx, 1);
      /* USER CODE END 2 */

     

  • 接下来在begin4添加中断函数
    /* USER CODE BEGIN 4 */
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
         if(huart == &huart1)
    	{
    			switch(Rx)
    		{
    			case 0x01:
        {
            HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
    //				printf("01");
    				printf("t2.txt=\"%u \"\xff\xff\xff", TX1); 
        }							break;
    			case 0x02:
        {
            HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);			
    //				printf("02");
    				printf("t3.txt=\"%u \"\xff\xff\xff", TX2); 
        }							break;                    
    		}		
    				HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx,     1);//循环使能,才能不断接政
        }
    }
    /* USER CODE END 4 */

基本上代码就完成了,前面也大概解释了,按照操作来,HMI串口屏还有很多功能,想学习的话去找官网资料,这边不引流不打广告,TJC搜一下就可以找资料了。

四、实际操作

1、首先打开HMI的调试,经过前面的配置,调试端口,可以看到按下按钮1,会显示01,按下按钮2会显示02(这是HMI的虚拟调试,如下图)

2、打开VOFA,此时按下实物的按钮1,串口接受到01,按下2同理


video1

 

3、关闭vofa免得冲突,1和2的实验中,之所以两个文本没接受到数据,很简单,因为此时串口屏只作为发送端,而没有接收数据,所以到了单片机的部分

 

4、打开仿真调试,使用MCU输入,选择前面stm32对应的ch340串口端口,然后按下按钮1,再按下按钮2,可以看到如下情况(放视频)

  • 单片机led没亮
  • 仿真中可以看到串口屏发送了01,然后文本框1的0变成了1
  • 按下2之后,led点亮,文本框2的文本变成了2
这个仿真要连接stm32的ch340串口
video2

 

5、因为是测试,而且由于仿真软件的问题,实际上串口1没有发送数据,我们同时可以打开vofa检测串口的实际发出,实际上,仿真软件只是向单片机的串口发送了数据,并且接受到了数据,我们可以按下实物,其实是没反应的,但是打开VOFA检测实际,还是可以看到两个按钮的输出。01和02(实物没反应视频如下)

video3

 

6、仿真完毕,确认没问题后,我们可以直接实物连接了,把串口屏和单片机连到一起,就可以看到如下的情况了。(直接串口屏连接单片机实物视频)

video4

 

五、最后补充

总结,本次报告重点介绍了串口屏的基本使用,关键在于如何接收单片机发送的数据并显示,以及单片机如何接收串口屏的数据,并且利用中断回调函数来实现了开关灯的简单操作。

下一期第四节,讲HC05的使用。

此帖出自stm32/stm8论坛

最新回复

串口屏的UI设计相比用单片机本身要方便一些  详情 回复 发表于 2023-10-6 09:42
点赞 关注
 

回复
举报

1705

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

串口屏的5V和GND供电交给第一个ch340模块,RX与TX与ch340的相反连接,这个连接线可得注意啦,别接反了

此帖出自stm32/stm8论坛
 
 

回复

6998

帖子

11

TA的资源

版主

板凳
 
串口屏的UI设计相比用单片机本身要方便一些
此帖出自stm32/stm8论坛
 
 

回复

44

帖子

2

TA的资源

一粒金砂(高级)

4
 
文章开头就提到了硬件连接,可能排版问题导致大家没看到,这里谢谢两位在回复区的补充
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表