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

这篇具有很好参考价值的文章主要介绍了STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

串口屏

串口屏是一个集成了单片机的屏幕模块,采用的是TTL串口协议,可以直接通过对应指令控制屏幕,
本文采用的串口屏是陶晶驰T0系列的基本型,目的是通过单片机的串口来控制串口屏
stm32f103c8t6控制串口屏,STM32专栏,电子模块测试,stm32,单片机,arm

基础指令集

stm32f103c8t6控制串口屏,STM32专栏,电子模块测试,stm32,单片机,arm
上面仅是一部分常用的基础指令,更多更仔细的指令或者函数可以访问陶晶驰资料官网。

硬件和接线

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

接线

串口屏 STM32
+5V 5V
TX PA10
RX PA9
GND GND

实验前准备

准备前需要下载出厂标准样例,一般出厂自带的,不需要下载,需要下载的可以参考以前的文章: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 ;

	 } 
} 

实验现象

现象是红绿蓝黑各显示一秒,最后去除原来工程里面春风不度玉门关的背景色
stm32f103c8t6控制串口屏,STM32专栏,电子模块测试,stm32,单片机,arm

总结

串口屏的驱动只需要配置好单片机的串口就行,其他的就是发送函数的代码,还是老样子需要整理好的代码可以在评论区留言或私信邮箱!文章来源地址https://www.toymoban.com/news/detail-542084.html

到了这里,关于STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32F103C8T6的USART串口通信及中断

    一、串口通信 (一)串口协议和RS-232标准 1.串口通信协议 串口通信是指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。 串口通信协议是指规定了数据包的内容,内容包含了起始位、主体

    2024年02月02日
    浏览(81)
  • STM32F103C8T6(HAL库)驱动舵机

    常见的舵机分为360°和180°两种,本次对180°舵机进行驱动,舵机驱动需要通过PWM信号进行驱动。本文通过定时器中的PWM信号设定使得SG90舵机进行不同角度的转动。 对于舵机的驱动,需要20ms的脉冲,高电平时间在0.5ms-2.5ms区间即可控制舵机在0-180°角度进行转动。常见角度对应

    2024年02月05日
    浏览(42)
  • STM32F103C8T6继电器驱动篇

    由于设计的东西是一个电机,但是stm32端口输出电流太小,所以采用继电器控制,通过实际接线测试发现,单片机的IO口驱动不了继电器,当继电器接到IO口上时,端口电压会将至2.2V左右,更加驱动不了继电器了。 所以,为了可以驱动继电器,重新设计了电路,通过三极管来

    2024年02月12日
    浏览(49)
  • STM32F103C8T6 驱动 oled 4针篇

    大部分买的STM32F103C8T6属于国产的,会导致程序烧录报错,如果出现问题参考另一篇STM32F103C8T6程序烧录方法_流浪法师解剖鱼的博客-CSDN博客 环境配置好后,编写程序烧录就可以了。 测试了增加上拉电阻不行。测试了厂家给的程序还是不行。查看器件参数,写的3.3-6V供电,当时

    2024年02月07日
    浏览(40)
  • STM32F103C8T6驱动LCD1602液晶篇

    1 电路连接 LCD1602有5V供电和3.3V供电,此次采用3.3V供电。 LCD1602共有16个引脚,不做一一介绍,其中主要的是第3引脚,3.3V背光电源供电时,接100-1K电阻,5V供电时,接2k-4.7k电阻。其余正常连接就行。 2 遇到的问题 2.1 液晶不显示 仿真验证时可以显示的,但是实物连接后还是不

    2024年02月07日
    浏览(40)
  • 使用串口烧写程序到STM32F103C8T6最小板(CH340)

    商家没给ST‐LINK V2下载器,故使用串口将程序烧录到最小板,使用仿真软件Flymcu进行。(默认安装过CH340的驱动) 联机下载时的程序文件:编译生成的.hex文件; 编程前重装文件:当选中该项后,flymcu会在每次编程之前将Hex文件重新装载一遍,这对于代码调试的时候比较有用

    2024年02月01日
    浏览(51)
  • Qt实现安卓手机蓝牙通信并控制stm32f103c8t6驱动VFD屏

    Qt具有跨平台的特性所以非常适合写通信的demo,但是在这个例程中Qt蓝牙部分不支持Windows平台,安卓平台使用没问题。 Qt蓝牙主要涉及到三个类的使用: QBluetoothDeviceDiscoveryAgent //扫描周围蓝牙设备 QBluetoothLocalDevice //扫描本地蓝牙 QBluetoothSocket //建立蓝牙的socket读写 安卓不支

    2024年02月08日
    浏览(52)
  • 直流减速编码电机的使用(STM32f103c8t6)L298N电机驱动模块

    直接减速电机就是在直流电机上加上霍尔编码器,霍尔编码器可用于电机转动的测速,A、B相会产生相位相差90°的方波信号。stm32可以使用硬件资源或者软件模拟来捕获编码器信号。这里我介绍的是stm32自带的编码器模式来使用直流减速电机。 以下是直流减速电机的商品图 ​

    2024年02月13日
    浏览(59)
  • 功耗测评 | STM32F103C8T6

    STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,外接丰富的传感器、功能模块、通信模块、显示存储等可以形成各种可样的产品项目应用。对于功耗要求比较高的产品,一般会选择STM32L系列的MCU,但是从功耗的评测角度,逻辑上是基本相似的。 在很多应用场合中都对

    2024年02月07日
    浏览(41)
  • STM32F103C8T6系统板

    1.电源部分 2.复位 3.晶振 4. 电源电路——防反接 有关二极管 漫谈二极管防电源反接电路 本次采用上图右下角的NMOS防反接电路。 电源电路——电源芯片 AMS1117是AMS公司的 ,LM1117是NS(美国国家半导体)的,LM1117要贵很多,所以一般的用AMS1117就可以了。 (以下分析参考STM32F10

    2024年02月02日
    浏览(69)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包