资讯详情

STM32F427V系列的触摸屏驱动

STM32F427V触摸屏驱动系列

提示:本程序主控为STM32F427VGT6, LCD驱动为ILI9341 触摸驱动为2046


文章目录

  • STM32F427V触摸屏驱动系列
  • 前言
  • 一、STM32CubeMX LCD配置
    • 1,配置FMC
      • a,选择FMC
      • b,配置为LCD模式
      • c,配置时钟
    • 2,配置TIM作为LCD专用延迟函数
    • 3,LCD程序
  • 二、STM32CubeMX LCD触摸屏配置
    • 1,配置相关IO
      • a,接口的原理图
      • b,IO配置
    • 2,程序
      • a,部分API
      • 2,使用说明
  • 三、程序下载链接


前言

一、STM32CubeMX LCD配置

1,配置FMC

a,选择FMC

在这里插入图片描述

b,配置为LCD模式

注:LCD Register Select根据硬件设计选择选择,以下是本例程LCD接口原理图

c,配置时钟

注:上述数据可达到最大刷新率

2,配置TIM作为LCD专用延迟函数

如果在程序中没有添加滴答时钟的延迟函数,则可以根据以下配置

3,LCD程序

到此,LCD配置结束,生成工程,添加lcd.clcd.h,直接调用相关信息API即可。

部分API函数: void LCD_Init(void);                 //初始化 void LCD_DisplayOn(void);             //开显示 void LCD_DisplayOff(void);            //关显示 void LCD_Clear(uint16_t Color);           //清屏 void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos);          //设置光标 void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t RGB_Code) ;    //画点
void LCD_Fast_DrawPoint(uint16_t x,uint16_t y,uint16_t color);			//快速画点
uint16_t  LCD_ReadPoint(uint16_t x,uint16_t y); 										//读点 
void Draw_Circle(uint16_t x0,uint16_t y0,uint8_t r, uint16_t RGB_Code);					//画圆
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,uint16_t RGB_Code);			//画线
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t RGB_Code);		   	//画矩形
void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color);		   				//填充单色
void LCD_Color_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t *color);				//填充指定颜色
void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t size, uint16_t RGB_Code ,uint16_t back_color);						//显示一个字符
void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size ,uint16_t RGB_Code,uint16_t back_color); //显示一个数字
void LCD_ShowxNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size, uint16_t RGB_Code,uint16_t back_color);//显示 数字

提示:相关代码在后续附件中

二、STM32CubeMX LCD触摸屏配置

1,配置相关IO

a,原理图的接口

b,IO配置

T_MISOT_PEN 配置为输入模式 T_MOSIT_CST_SCK配置为输出模式

2,程序

添加 到本工程中 stmflash.c用于储存触摸的校验数据

a,部分API

void TP_Write_Byte(uint8_t num);						//向控制芯片写入一个数据
uint16_t TP_Read_AD(uint8_t CMD);							//读取AD转换值
uint16_t TP_Read_XOY(uint8_t xy);							//带滤波的坐标读取(X/Y)
uint8_t TP_Read_XY(uint16_t *x,uint16_t *y);					//双方向读取(X+Y)
uint8_t TP_Read_XY2(uint16_t *x,uint16_t *y);					//带加强滤波的双方向坐标读取
void TP_Drow_Touch_Point(uint16_t x,uint16_t y,uint16_t color);//画一个坐标校准点
void TP_Draw_Big_Point(uint16_t x,uint16_t y,uint16_t color);	//画一个大点
void TP_Save_Adjdata(void);						//保存校准参数
uint8_t TP_Get_Adjdata(void);						//读取校准参数
void TP_Adjust(void);							//触摸屏校准
void TP_Adj_Info_Show(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2,uint16_t x3,uint16_t y3,uint16_t fac);//显示校准信息
//电阻屏/电容屏 共用函数
uint8_t TP_Scan(uint8_t tp);								//扫描
uint8_t TP_Init(void);								//初始化

void Load_Drow_Dialog(void);	//清空屏幕并在右上角显示"Clear"
void rtp_test(void);		//电阻触摸屏测试函数

2,使用说明

在LCD初始化后调用tp_dev.init(); 触摸初始化,然后可以试用rtp_test()触摸测试函数。 也可编写自己的触摸功能函数 例子:

tp_dev.scan(0);			//触摸扫描
if(tp_dev.sta&TP_PRES_DOWN)			//触摸屏被按下
{ 
        	
	if(tp_dev.x[0]<lcd_Width&&tp_dev.y[0]<lcd_height)	//判断按下区域是否在显示屏内
	{ 
        
		if(tp_dev.x[0] > x1 && tp_dev.x[0] < x2 && tp_dev.y[0] > y1 && tp_dev.y[0] < y2)		//判断按下的坐标与目标坐标是否相等
		{ 
        
			//然后执行相应功能即可
		}
	}
}

三、程序下载链接

触摸屏程序

标签: v电容触摸屏

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台