银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-10-16 | gingko | 初次建立 |
1.在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 3.配置RCC,使用外部时钟源 4.时基源选择SysTick 5.将PA10,PB7,PB8,PI1,PI2,PI3设置为GPIO_Output 6.引脚模式配置 7.配置定时器 定时器分配引脚如下所示 8.配置FMC 9.配置SDMMC 10.配置LTDC 11.配置CRC 12.配置FATFS 13.时钟源设置,选择外部高速时钟源,配置为最大主频。 14.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK V5.27 15.点击Code Generator,进行进一步配置
创建成功,打开工程。
int main(void) { FATFS fatfs; HAL_Init(); SystemClock_Config(); i2c.initialize(); axp152.initialize(); axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER] axp152.set_dcdc2(1200);//[FPGA INT & PLL D] axp152.set_aldo1(2500);//[FPGA PLL A] axp152.set_dcdc4(3300);//[POWER_OUTPUT] axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable] axp152.set_aldo2(3300);//[FPGA BK3][Adjustable] axp152.set_dldo1(3300);//[FPGA BK7][Adjustable] axp152.set_dldo2(3300);//[FPGA BK5][Adjustable] MX_GPIO_Init(); MX_CRC_Init(); MX_LTDC_Init(); MX_TIM12_Init(); MX_SDMMC1_SD_Init(); MX_FATFS_Init(); MX_FMC_Init(); BSP_SDRAM_Init(); lcd.initialize(); HAL_TIM_PWM_Start(&htim12,TIM_CHANNEL_1); LED_ON; GUI_Init(); GUI_SetBkColor(GUI_BLACK); GUI_Clear(); LCD_ON; frame.process(); //界面处理
typedef struct { uint32_t HSPolarity; uint32_t VSPolarity; uint32_t DEPolarity; uint32_t PCPolarity; uint32_t HorizontalSync; uint32_tVerticalSync; uint32_t AccumulatedHBP; uint32_t AccumulatedVBP; uint32_t AccumulatedActiveW; uint32_t AccumulatedActiveH; uint32_t TotalWidth; uint32_t TotalHeigh; LTDC_ColorTypeDef Backcolor; } LTDC_InitTypeDef;
此参数用于设置水平同步信号极性,具体支持的参数如下: #define LTDC_HSPOLARITY_AL (0x00000000U) 水平同步极性低电平有效 #define LTDC_HSPOLARITY_AH LTDC_GCR_HSPOL 水平同步极性高电平有效
此参数用于设置垂直同步信号极性,具体支持的参数如下 #define LTDC_VSPOLARITY_AL (0x00000000U) /* 垂直同步极性低电平有效 #define LTDC_VSPOLARITY_AH LTDC_GCR_VSPOL /* 垂直同步极性高电平有效
此参数用于设置数据使能极性,具体支持的参数如下: #define LTDC_DEPOLARITY_AL (0x00000000U) /* 数据使能极性低电平有效 #define LTDC_DEPOLARITY_AH LTDC_GCR_DEPOL /* 数据使能极性高电平有效
此参数用于设置像素时钟极性,具体支持的参数如下: #define LTDC_PCPOLARITY_IPC (0x00000000U) 像素时钟极性低电平有效 #define LTDC_PCPOLARITY_IIPC LTDC_GCR_PCPOL 像素时钟极性高电平有效
此参数用于设置水平同步宽度,范围 0 x 000 0xFFF 单位像素时钟个数 。
此参数用于设置垂直同步宽度,范围 0 x 000 0x 7 FF 单位像素时钟个数。
此参数用于设置 HSYNC水平同步宽度+ HBP水平后沿之和,范围HSYNC水平同步宽度到0 xFFF,单位像素时钟个数。
此参数用于设置VSYNC垂直同步宽度+ VBP垂直后沿之和,范围VSYNC垂直同步宽度到0x7FF,单位像素时钟个数。
此参数用于设置HSYNC水平同步宽度+ HBP水平后沿+ 有效宽度之和,范围AccumulatedHBP到0xFFF,单位像素时钟个数。
此参数用于设置VSYNC垂直同步宽度+ VBP垂直后沿+ 有效高度之和,范围AccumulatedVBP到0x7FF,单位像素时钟个数。
此参数用于设置HSYNC水平同步宽度+ HBP水平后沿+ 有效宽度+ HFP水平前沿之和,范围AccumulatedActiveW到0xFFF,单位像素时钟个数。
此参数用于设置VSYNC垂直同步宽度+ VBP垂直后沿+ 有效高度+VFP垂直前沿之和,范围AccumulatedActiveH到0x7FF,单位像素时钟个数。
此参数用于设置背景层颜色,结构体LTDC_ColorTypeDef的定义如下:
typedef struct { uint8_t Blue; uint8_t Green; uint8_t Red; uint8_t Reserved; } LTDC_ColorTypeDef;
static void frame_process(void) { gt911.initialize(); GUI_CURSOR_Show(); WM_SetCreateFlags(WM_CF_MEMDEV); GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0); while(1){ if(systick._20ms_flag == 1){ systick._20ms_flag = 0; GUI_TOUCH_Exec(); GUI_Exec(); } if(touch_flag == 1){ touch_flag = 0; EDIT_SetValue(h_edit_0,gt911.x[0]); EDIT_SetValue(h_edit_1,gt911.y[0]); GUI_Exec(); } GUI_Exec(); } }
static int gui_frame(int startx,int starty,int endx,int endy) { GUI_SetColor(GUI_GRAY); GUI_DrawRect(startx,starty,endx,endy); GUI_SetColor(GUI_WHITE); GUI_DrawHLine(starty + 1,startx + 1,endx - 1); GUI_DrawHLine(endy + 1,startx,endx + 1); GUI_DrawVLine(startx + 1,starty + 1,endy - 1); GUI_DrawVLine(endx + 1,starty,endy + 1); return 0; }
unsigned char GT911_WR_Reg(unsigned short int reg,unsigned char *buf,unsigned char len) { unsigned char i; unsigned char ret=0; i2c_touch.IIC_Start(); i2c_touch.IIC_Send_Byte(GT_CMD_WR); i2c_touch.IIC_Wait_Ack(); i2c_touch.IIC_Send_Byte(reg>>8); i2c_touch.IIC_Wait_Ack(); i2c_touch.IIC_Send_Byte(reg&0XFF); i2c_touch.IIC_Wait_Ack(); for(i=0;i<len;i++) { i2c_touch.IIC_Send_Byte(buf[i]); ret=i2c_touch.IIC_Wait_Ack(); if(ret)break; } i2c_touch.IIC_Stop(); return ret; }
void GT911_RD_Reg(unsigned short int reg,unsigned char *buf,unsigned char len) { unsigned char i; i2c_touch.IIC_Start(); i2c_touch.IIC_Send_Byte(GT_CMD_WR); i2c_touch.IIC_Wait_Ack(); i2c_touch.IIC_Send_Byte(reg>>8); i2c_touch.IIC_Wait_Ack(); i2c_touch.IIC_Send_Byte(reg&0XFF); i2c_touch.IIC_Wait_Ack(); i2c_touch.IIC_Start(); i2c_touch.IIC_Send_Byte(GT_CMD_RD); i2c_touch.IIC_Wait_Ack(); for(i=0;i<len;i++) { buf[i]=i2c_touch.IIC_Read_Byte(i==(len-1)?0:1); } i2c_touch.IIC_Stop(); //产生一个停止条件
int scan(unsigned char mode) { unsigned char buf[4]; unsigned char i=0; unsigned char temp; GT911_RD_Reg(GT_GSTID_REG,&mode,1);//读取触摸点的状态 if(mode&0X80&&((mode&0XF)<6)) { temp=0; GT911_WR_Reg(GT_GSTID_REG,&temp,1);//清标志 } if((mode&0XF)&&((mode&0XF)<6)) { temp=0XFF<<(mode&0XF);//将点的个数转换为1的位数,匹配tp_dev.sta定义 gt911.sta=(~temp); for(i=0;i<5;i++) { if(gt911.sta&(1<<i)) { GT911_RD_Reg(GT911_TPX_TBL[i],buf,4);//读取XY坐标值 gt911.x[i]=(((unsigned short int)buf[1]<<8)+buf[0]); gt911.y[i]=(((unsigned short int)buf[3]<<8)+buf[2]); } } }else{//设置XY坐标默认值 gt911.x[0]=480; gt911.y[0]=272; gt911.x[1]=480; gt911.y[1]=272; gt911.x[2]=480; gt911.y[2]=272; gt911.x[3]=480; gt911.y[3]=272; gt911.x[4]=480; gt911.y[4]=272; } return 0; }
触摸iCore4T(4.3寸TFT_LCD)液晶屏即显示当前触摸位置的坐标值。