0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏

jf_88434166 来源:jf_88434166 作者:jf_88434166 2026-02-10 17:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

串口屏

串口屏是一个集成了单片机的屏幕模块,采用的是TTL串口协议,可以直接通过对应指令控制屏幕,
本文采用的串口屏是陶晶驰T0系列的基本型,目的是通过单片机的串口来控制串口屏。
1-主图.png

基础指令集

2-指令集.png

上面仅是一部分常用的基础指令,更多更仔细的指令或者函数可以访问陶晶驰资料官网。

硬件和接线

硬件需要一块STM32F103C8T6的开发板,杜邦线诺干,2.4寸串口屏一块

接线

串口屏STM32
+5V5V
TXPA10
RXPA9
GNDGND

实验前准备

准备前需要下载出厂标准样例,一般出厂自带的,不需要下载,需要下载的可以参考以前的文章:[51单片机驱动HMI串口屏,串口屏的下载方式]

STM32程序

串口程序

串口配置

void uart_init(u32 bound){
    //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟
 	USART_DeInit(USART1);  //复位串口1
	 //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9
   
    //USART1_RX	  PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA10

   //Usart1 NVIC 配置

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
  
   //USART 初始化设置

	USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

    USART_Init(USART1, &USART_InitStructure); //初始化串口
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断
    USART_Cmd(USART1, ENABLE);                    //使能串口 

}

中断服务程序

void USART1_IRQHandler(void)                	//串口1中断服务程序
	{
	u8 Res;
#ifdef OS_TICKS_PER_SEC	 	//如果时钟节拍数定义了,说明要使用ucosII了.
	OSIntEnter();    
#endif
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
		{
		Res =USART_ReceiveData(USART1);//(USART1- >DR);	//读取接收到的数据	
		if((USART_RX_STA&0x8000)==0)//接收未完成
			{
			if(USART_RX_STA&0x4000)//接收到了0x0d
				{
				if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
				else USART_RX_STA|=0x8000;	//接收完成了 
				}
			else //还没收到0X0D
				{	
				if(Res==0x0d)USART_RX_STA|=0x4000;
				else
					{
					USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
					USART_RX_STA++;
					if(USART_RX_STA >(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收	  
					}		 
				}  	
			}  
				 
     }

主函数

主函数

int main(void)
 {	   	 
	delay_init();	    	 //延时函数初始化	  
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	uart_init(9600);	  	 //串口初始化为9600
	HMISendstart();          //为确保串口HMI正常通信
	{ 
		HMISends("cls RED");  //发送串口指令
		HMISendb(0xff);		  //发送结束符 0XFF 0XFF 0XFF
		delay_ms(1000);
    	HMISends("cls GREEN");
		HMISendb(0xff);
    	delay_ms(1000);
    	HMISends("cls BLUE");
		HMISendb(0xff);
		delay_ms(1000);
		HMISends("cls BLACK");
		HMISendb(0xff); 
		delay_ms(1000);
		HMISends("page 4");
		HMISendb(0xff);
		HMISends("t0.txt="春风不度玉门关"");
		HMISendb(0xff);	
	}
	while(1);
}

字符串发送函数

void HMISends(char *buf1)		  //字符串发送函数
{
	u8 i=0;
	while(1)
	{
	 if(buf1[i]!=0)
	 	{
			USART_SendData(USART1,buf1[i]);  //发送一个字节
			while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待发送结束
		 	i++;
		}
	 else 
	 return ;

		}
	}```
字节发送函数

```c
void HMISendb(u8 k)		         //字节发送函数
{		 
	u8 i;
	 for(i=0;i< 3;i++)
	 {
	 if(k!=0)
	 	{
			USART_SendData(USART1,k);  //发送一个字节
			while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET){};//等待发送结束
		}
	 else 
	 return ;

	 } 
}

实验现象

现象是红绿蓝黑各显示一秒,最后去除原来工程里面春风不度玉门关的背景色
请添加图片描述

总结

串口屏的驱动只需要配置好单片机的串口就行,其他的就是发送函数的代码,还是老样子需要整理好的代码可以在评论区留言或私信邮箱!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2313

    文章

    11206

    浏览量

    375246
  • 串口屏
    +关注

    关注

    8

    文章

    627

    浏览量

    39762
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ESP32驱动YX5300/6300串口MP3音乐播放模块

    本文介绍了YX5300串口MP3音乐播放模块的基本特点,以及用ESP32开发板驱动YX5300模块播放音乐。
    的头像 发表于 05-23 09:41 31次阅读
    ESP32<b class='flag-5'>驱动</b>YX5300/6300<b class='flag-5'>串口</b>MP3音乐播放模块

    基于STM32+机智云的花园4G远程控制器开发全教程

    220V信号的开关控制,从而实现对交流接触器的通断控制。硬件组装实物参考图:硬件说明:1、单片机采用STM32F103C8T6核心板一块2、带机智云gagent固
    的头像 发表于 04-23 18:41 206次阅读
    基于<b class='flag-5'>STM32</b>+机智云的花园4G远程<b class='flag-5'>控制</b>器开发全教程

    乐升新推出低成本串口控制芯片 - LT163

    LT163 是一颗低成本高效能的Uart串口控制芯片,其内部采用32bit RISC V 核心架构,主要的功能就是提供Uart 串口通讯,让主控端MCU透过简单的通讯
    的头像 发表于 03-20 16:30 269次阅读
    乐升新推出低成本<b class='flag-5'>串口</b><b class='flag-5'>屏</b><b class='flag-5'>控制</b>芯片 - LT163

    51单片机驱动HMI串口串口的下载方式

    串口 串口是一个集成了单片机的屏幕模块,采用的是TTL串口协议,可以直接通过对应指令
    的头像 发表于 03-17 11:44 433次阅读
    51单片机<b class='flag-5'>驱动</b><b class='flag-5'>HMI</b><b class='flag-5'>串口</b><b class='flag-5'>屏</b>,<b class='flag-5'>串口</b><b class='flag-5'>屏</b>的下载方式

    乐升串口芯片应用案例#芯片 #产品方案 #国产芯片

    串口
    qunqun012
    发布于 :2026年02月06日 18:21:45

    乐升LT7589串口芯片驱动10.1寸 1280*800显示和10.1寸 1024*600显示

    串口
    qunqun012
    发布于 :2026年02月04日 17:58:39

    就各位大神点拨一下串口通信

    我现在用的STM32F103C8T6通过串口度读取西曼传感的SDAM模块。附件有他的产品手册,我通过串口读数据需要怎么写状态机?还有就是只能通过中断来获取数据么?我用的标准库*附件:SDAM产品手册.pdf
    发表于 01-30 15:17

    串口调试步骤(适合免驱动的232串口设备)

    密码切换到root超级管理下 apt update 更新插件 apt-get install cutecom 安装系统自带的串口调试工具 cutecom 输入串口测试的指令会弹出一个图形界面如下图 32
    的头像 发表于 12-17 17:23 1727次阅读
    <b class='flag-5'>串口</b>调试步骤(适合免<b class='flag-5'>驱动</b>的232<b class='flag-5'>串口</b>设备)

    UWB650串口测距通信定位模块规格书

    UWB650串口测距通信定位模块规格书
    发表于 11-03 17:40 3次下载

    f103c8t6使用adc采样时程序无法正常工作怎么解决?

    我在学习使用stm32f103c8t6的adc的使用时遇到了这个问题。 是按照教程一步一步操作的:这是教程地址:https://blog.csdn.net/WTF___000/article
    发表于 10-13 07:25

    关于stm32f4zgt6和mspm0g3507串口通信问题

    本人在使用stm32f4zgt6和mspm0g3507串口通信时出现问题,情况如下: m0芯片使用软件超时解析进行数据接收,使用标准库的transmit函数进行数据发送stm32使
    发表于 09-01 11:11

    STM32串口发送数据,USART_FLAG_TC无法置位怎么解决?

    STM32串口发送数据,在经过一段时间的数据发送,大概200ms发送一下,一次发送大概二三十个字
    发表于 07-29 11:44

    STM32F103c8上做DLQR最优控制算法的C编程资料

    这是我近期做的一个项目--基于STM32F103c8的DLQR控制算法的C编程,涉及DLQR最优控制算法、嵌入式STM32F103编程、CM
    发表于 07-23 15:30 0次下载

    CH32F103C8T6核心板三种程序下载方式简介

    CH32F103C8T6核心板,通过USB转串口方式、USB直连方式、SWD方式下载应用程序
    的头像 发表于 06-09 09:38 1370次阅读
    CH32<b class='flag-5'>F103C8T6</b>核心板三种程序下载方式简介