stm32f4移植ucgui

本文详细介绍了如何在STM32F4上移植UCGUI,包括配置LCDConf.h和GUIConf.h文件,修改LCDDriver以及touch.c文件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录下stm32f4移植ucgui的过程!

移植步骤:

第一步:首先,得把你的TFT底层驱动写好。(为了方便,我直接用写好液晶屏的工程作为模板,在此基础上移植ucgui)

第二步:加入UCGUI程序包

第三步:配置UCGUI的文件

        

工程结构如下图:


配置LCDConf.h文件如下:

#ifndef LCDCONF_H 
#define LCDCONF_H 
#define LCD_XSIZE           (320)    //配置TFT的水平分辨率 
#define LCD_YSIZE           (240)    //配置TFT的垂直分辨率 
#define LCD_CONTROLLER    (9320) //TFT控制器的名称 
#define LCD_BITSPERPIXEL    (16)     //每个像素的位数 
#define LCD_FIXEDPALETTE    (565)    //调色板格式 
#define LCD_SWAP_RB         (1)      //红蓝反色交换 
#define LCD_INIT_CONTROLLER()    TFT_Init() ;         //此处需要定义的是你的TFT初始化函数 
#endif /* LCDCONF_H */ 

配置GUIConf.h文件如下:

#ifndef GUICONF_H 
#define GUICONF_H 

#define GUI_OS                  (1)   //多任务 
#define GUI_SUPPORT_TOUCH       (1)   //触摸 
#define GUI_SUPPORT_UNICODE     (1)   //Unicode支持 
#define GUI_DEFAULT_FONT         &GUI_Font6x8   //GUI默认字体 
#define GUI_ALLOC_SIZE           5000   //动态内存的大小 
#define GUI_WINSUPPORT           1   //窗口控件支持 
#define GUI_SUPPORT_MEMDEV       1   //支持内存设备 
#define GUI_SUPPORT_AA           1   /* Anti aliasing available */ 


第四步:让GUI能够找到你的LCD驱动,修改LCDDriver。

         在编写你的TFT底层驱动程序的时候,这两个函数:设置一个像素和获取一个像素的颜色

void LCD_SetPixel(unsigned short x,unsigned short y, unsigned short color){

….

unsigned short LCD_GetPixel(unsigned shortx, unsigned short y){


这两个函数写好,并测试可以正常显示后,接下来需要修改TFT与UCGUI关联的函数(在一个C文件下(我的是ili9320_ucgui.c)

int LCD_L0_Init(void) 
{   
   TFT_Init(); 
   return 0; 
} 
//这个函数,是GCGUI初始化TFT需要调用的,里面的函数就是你TFT底层驱动的初始化函数。 
void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) 
{ 
   LCD_SetPixel(x,y,PixelIndex); 
} 
unsigned int LCD_L0_GetPixelIndex(int x, int y) 
{ 
   return LCD_GetPixel(x,y); 
} 

上面两个函数是其他函数的最基本元素,其他函数比如画线、点、圆都需要调用改函数。里面的LCD_SetPixel(x,y,PixelIndex)、LCD_GetPixel(x,y);就是你TFT底层驱动设置像素和获取像素的两个函数。


最后说下touch.c的修改:

void Touch_Init(void)
{
  	GPIO_InitTypeDef GPIO_InitStructure;

  	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//pen_int:PD6   
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  	GPIO_Init(GPIOD, &GPIO_InitStructure);		   
	SPI1_Init();
	CSPin_init();
	GUI_TOUCH_Calibrate(0,0,319,1855,90);//X轴校准
	GUI_TOUCH_Calibrate(1,0,239,80,1895);//Y轴校准
}

void GUI_TOUCH_X_ActivateX(void){}
void GUI_TOUCH_X_ActivateY(void){}

int  GUI_TOUCH_X_MeasureX(void) 
{
	unsigned char t=0,t1,count=0;
	unsigned short int databuffer[10]={5,7,9,3,2,6,4,0,3,1};//数据组
	unsigned short temp=0,X=0;
		 	
	while(count<10)//循环读数10次
	{	   	  
		databuffer[count]=ADS_Read(CMD_RDX);
		count++; 
	}  
	if(count==10)//一定要读到10次数据,否则丢弃
	{  
	    do//将数据X升序排列
		{	
			t1=0;		  
			for(t=0;t<count-1;t++)
			{
				if(databuffer[t]>databuffer[t+1])//升序排列
				{
					temp=databuffer[t+1];
					databuffer[t+1]=databuffer[t];
					databuffer[t]=temp;
					t1=1; 
				}  
			}
		}while(t1); 	    		 	 		  
		X=(databuffer[3]+databuffer[4]+databuffer[5])/3;	  
	}
	return(X);  
}

int  GUI_TOUCH_X_MeasureY(void)
{
  	unsigned char t=0,t1,count=0;
	unsigned short int databuffer[10]={5,7,9,3,2,6,4,0,3,1};//数据组
	unsigned short temp=0,Y=0;	
 
    while(count<10)	//循环读数10次
	{	   	  
		databuffer[count]=ADS_Read(CMD_RDY);
		count++;  
	}  
	if(count==10)//一定要读到10次数据,否则丢弃
	{  
	    do//将数据X升序排列
		{	
			t1=0;		  
			for(t=0;t<count-1;t++)
			{
				if(databuffer[t]>databuffer[t+1])//升序排列
				{
					temp=databuffer[t+1];
					databuffer[t+1]=databuffer[t];
					databuffer[t]=temp;
					t1=1; 
				}  
			}
		}while(t1); 	    		 	 		  
		Y=(databuffer[3]+databuffer[4]+databuffer[5])/3;	  
	}
	return(Y); 
}




评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值