23-STM32CubeMX系列教程23LCD触摸控制

合集下载

百为STM32开发板教程之六——触摸画板程序

百为STM32开发板教程之六——触摸画板程序

百为技术官方淘宝网店 技术支持论坛 平移:
百为技术官方淘宝网店 技术支持论坛 旋转:
因此,从上面的缩放,平移,旋转,可以得出 LCD 坐标和触摸屏坐标的计算 公式 XL=XT*A+XT*B+C YL=YT*D+YT*E+F 所以,只要计算出参数 A,B,C,D,E,F, 我们就可以将从触摸芯片(ADS7843/TSC2046/XPT2046)上读出的触摸屏坐标转 换成 LCD 坐标 2、我们采用 tslib 的五点校准算法, 其中触摸采样采用 tslib 里的排序取中间值, 另外加上阈值判断的滤波算法。 typedef struct { int x[5], xfb[5]; int y[5], yfb[5]; int a[7]; } calibration; 其中 xfb[5],yfb[5]存放预先设定的 5 个 LCD 坐标值。x[5],y[5]存放从触 摸 Y+上加电压时,从未加电压的 X+或 X-上可以读 出触摸点的电压。同样在 X-和 X+上加电压时,可以从 Y+或 Y-上读出另一个方向 的电压。
百为技术官方淘宝网店 技术支持论坛 3、触摸屏的排线引出有 4 个信号:XL,YD,XR,YU:
百为技术官方淘宝网店 技术支持论坛 函数 get_sample 调用 put_cross 输出田字形光标,并通过 getxy 采样触摸 坐标值
static void get_sample (calibration *cal, int index, int x, int y, char *name) { put_cross(x, y, 2 | XORMODE); //调用 getxy 将采样到的触摸坐标值存放在 x[],y[]数组里 while(!getxy (&cal->x [index], &cal->y [index])); put_cross(x, y, 2 | XORMODE); //将预先设定的 LCD 坐标值存放在 xfb[],yfb[]数组里 cal->xfb [index] = x; cal->yfb [index] = y; }

STM32触摸屏程序

STM32触摸屏程序

现在随着TFT屏的价格快速滑落,原来旧有的单色屏已经远远跟不上了发展的需要,加上触摸屏的成本也不是很高,因而无论在成本还是技术发展的优势上面,TFT屏发展已经获得了平分秋色的实力。

但是在传统意义上面来说,使用TFT 屏控制必然考虑到arm体现,因而,性价比较高的STM32就走上了台前。

我们现在使用的是一款STM32F103RBT6的芯片。

这个芯片具有很好的性价比:ARM Cortex-M3内核,128kB Flash,20KB RAM,最高工作时钟72MHz,64脚。

我们选用的是2.8寸的TFT屏,TFT屏的控制芯片是:ILI9325;其触摸屏控制芯片为ADS7843。

我们首先看到的是TFT屏和该芯片的接口,其接口定义如下:2.8寸彩色TFT屏模块接脚定义脚位功能描述脚位功能描述01脚3V3电源正17脚DB14数据线02脚GND电源负18脚DB15数据线03脚DB00数据线19脚CS屏片选,低有效04脚DB01数据线20脚RS寄存器选择05脚DB02数据线21脚WR写使能,低有效06脚DB03数据线22脚RD读使能,低有效07脚DB04数据线23脚RESET复位,低有效08脚DB05数据线24脚BACK_LIGHT背光控制,高有效09脚DB06数据线25脚MISO SPI主入从出10脚DB07数据线26脚INT触摸中断输出11脚DB08数据线27脚MOSI SPI主出从入12脚DB09数据线28脚BUSY触摸芯片忙检测13脚DB10数据线29脚SCLK SPI时钟14脚DB11数据线30脚SDA I2C数据线15脚DB12数据线31脚T_CS触摸芯片片选16脚DB13数据线32脚SCL I2C时钟线现在,我们使用IAR编译,然后通过JLINK下载一个程序进去,然后分析一下程序。

使用IAR的环境就不一一叙述了。

下面是ILI9325的控制程序的部分子程序以供参考。

详细程序见附件。

/****************************************************************函数名:Lcd配置函数功能:配置所有和Lcd相关的GPIO和时钟引脚分配为:PB8--PB15——16Bit数据总线低8位PC0--PC7——16Bit数据总线高8位PC8 ——Lcd_csPC9 ——Lcd_rs*PC10——Lcd_wrPC11——Lcd_rd*PC12——Lcd_rstPC13——Lcd_blaklight背光靠场效应管驱动背光模块*****************************************************************/void Lcd_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;/*开启相应时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC, ENABLE);/*所有Lcd引脚配置为推挽输出*//*16位数据低8位*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13| GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);/*16位数据高8位*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO _Pin_6|GPIO_Pin_7;GPIO_Init(GPIOC, &GPIO_InitStructure);/*控制脚*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;GPIO_Init(GPIOC, &GPIO_InitStructure);/*背光控制*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;GPIO_Init(GPIOC, &GPIO_InitStructure);}void DataToWrite(u16 data){u16 temp;temp = GPIO_ReadOutputData(GPIOB);GPIO_Write(GPIOB, (data<<8)|(temp&0x00ff));temp = GPIO_ReadOutputData(GPIOC);GPIO_Write(GPIOC, (data>>8)|(temp&0xff00));}/******************************************************************** *********名称:u16 CheckController(void)*功能:返回控制器代码*入口参数:无*出口参数:控制器型号*说明:调用后返回兼容型号的控制器型号*调用方法:code=CheckController();********************************************************************* *******/u16 CheckController(void){u16 tmp=0,tmp1=0,tmp2=0;GPIO_InitTypeDef GPIO_InitStructure;DataToWrite(0xffff);//数据线全高Set_Rst;Set_nWr;Set_Cs;Set_Rs;Set_nRd;Set_Rst;Delay_nms(1);Clr_Rst;Delay_nms(1);Set_Rst;Delay_nms(1);LCD_WR_REG(0x0000,0x0001); //start oscillationDelay_nms(1);GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13| GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);/*16位数据高8位*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO _Pin_6|GPIO_Pin_7;GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_ResetBits(GPIOC,GPIO_Pin_8);GPIO_SetBits(GPIOC,GPIO_Pin_9);GPIO_ResetBits(GPIOC,GPIO_Pin_11);tmp1 = GPIO_ReadInputData(GPIOB);tmp2 = GPIO_ReadInputData(GPIOC);tmp = (tmp1>>8) | (tmp2<<8);GPIO_SetBits(GPIOC,GPIO_Pin_11);GPIO_SetBits(GPIOC,GPIO_Pin_8);/*16位数据低8位*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13| GPIO_Pin_14|GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOB, &GPIO_InitStructure);/*16位数据高8位*/GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO _Pin_6|GPIO_Pin_7;GPIO_Init(GPIOC, &GPIO_InitStructure);return tmp;}/**********************************************函数名:Lcd初始化函数功能:初始化Lcd入口参数:无返回值:无***********************************************/void Lcd_Initialize(void){u16 i;Lcd_Light_ON;DataToWrite(0xffff);//数据线全高Set_Rst;Set_nWr;Set_Cs;Set_Rs;Set_nRd;Set_Rst;Delay_nms(1);Clr_Rst;Delay_nms(1);Set_Rst;Delay_nms(1);/*#ifdef ILI9325LCD_WR_REG(0x00e3,0x3008);LCD_WR_REG(0x00e7,0x0010);LCD_WR_REG(0x00ef,0x1231); //Set the internal vcore voltageLCD_WR_REG(0x0001,0x0100); //When SS = 0, the shift direction of outputs is from S1 to S720#endif //When SS = 1, the shift direction of outputs is from S720 to S1.#ifdef ILI9320LCD_WR_REG(0x00e5,0x8000);LCD_WR_REG(0x0000,0x0001);LCD_WR_REG(0x0001,0x0100);//SDelay_nms(10);#endifLCD_WR_REG(0x0002,0x0700);//Line inversion#if ID_AM==000LCD_WR_REG(0x0003,0x0000);//屏幕旋转控制TFM=0,TRI=0,SWAP=1,16 bits system interface swap RGB to BRG,此处ORG和HWM为0#elif ID_AM==001LCD_WR_REG(0x0003,0x0008);#elif ID_AM==010LCD_WR_REG(0x0003,0x0010);。

STM32微控制器触摸感应应用说明书

STM32微控制器触摸感应应用说明书

AN5105基于STM32微控制器的触摸感应控制入门引言本文档帮助客户快速找到基于STM32微控制器的触摸感应应用的相关信息。

本文档适用于STM32F0、STM32F3、STM32L0、STM32L1和STM32L4系列产品,列出了涉及触摸感应的所有现有的应用笔记和用户手册,并提供了触摸感应的关键信息的记录位置。

本文档还解释了如何使用STM32CubeMx图形界面在STM32L0538-DISCO和STM32F072B-DISCO探索板上构建触摸感应应用。

1概述本文档适用于基于Arm ®的器件。

提示Arm 是Arm Limited (或其子公司)在美国和/或其他地区的注册商标。

概述术语和原理2术语和原理2.1术语下面是与触摸感应有关的主要术语:•采集模式–CT:电荷转移采集原理。

此模式用在STM32微控制器上。

•触摸感应STM32外设–TSC:触摸感应控制器外设–组:同时采集的通道组–通道:基本采集项–组合:1-3个通道加上1个采样电容(Cs)•传感器–触摸键或TKey:单通道传感器–线性传感器:多通道传感器,电极排列成直线–旋转传感器:多通道传感器,电极排列成圆形–主动屏蔽:沿传感器走线和/或传感器本身布设的走线或其周围的铜层。

主动屏蔽的驱动方式与传感器类似。

可在不降低灵敏度的情况下改善抗噪性。

•STM32软件–TSL:触摸感应库–Delta:测量值与参考值之间的差值–测量值:在通道上测得的电流信号–参考值:基于测量值样本的平均值的参考信号–DTO:检测超时。

超时由TSLPRM_DTO定义。

参见tsl_conf.h文件中的TSLPRM_DTO。

–DXS:检测排除机制。

排除机制由TSLPRM_USE_DXS定义。

参见tsl_conf.h文件中的TSLPRM_USE_DXS。

–ECS:环境变化机制。

参见文件tsl_conf.h中的TSLPRM_ECS_DELAY。

•涉及的硬件–Cx:传感器电容(典型值为几pF)–Cp:寄生电容(典型值为几pF)–Ct:等效触摸电容–Cs/Cskey/Csshield:采样电容(典型值为2.2至100nF)–Rs/Rskey/Rsshield:串联电阻,ESD保护(典型值为100Ohms至10K)2.2原理STM32触摸感应特性以电荷转移为基础。

STM32CubeMx配置过程详解

STM32CubeMx配置过程详解

STM32CubeMx使用详解——cuyebiren——意法半导体STM32/STM8社区STM32CubeMx是STM32系列单片机初始化代码工程生成工具。

我们可以用它搜索选择满足我们需求的芯片,用它配置芯片外设引脚和功能,用它配置使用如LWIP、FAT32、FreeRTOS等第三方软件系统,还可以用它做功耗评估。

STM32CubeMx 不仅能生成初始化代码工程,也能生成引脚配置信息的pdf和txt文档,方便查阅和设计原理图。

——我相信STM32CubeMx的强大会使玩过它的人赞不绝口,毅然决然地放弃使用标准库,转而使用基于HAL库的它和HAL库。

下面就开始介绍STM32CubeMx的使用:一、打开软件后的界面,如下。

这里主要介绍“Help”菜单。

“Updater Setings”可以设置下载的固件库及其解压文件的存放位置,这样就可以找到软件下载的固件库到底存放到哪了。

“Install New Libraries”可以检查并下载固件库和软件更新情况,以及历史版本,也可以手动导入固件库。

二、点击“New Projet”进入芯片选择界面。

这里选择STM32F407ZGTx(因为我的开发板是这个型号)。

三、选择芯片型号双击或点“OK”,进入工程配置。

四、外设使能及引脚选择。

五、时钟配置。

六、外设及中间件参数配置。

七、工程设置。

八、生成Keil工程。

九、生成的Keil工程分析。

十、HAL库函数(API函数)查找方法。

解压Cube固件包,打开找到Drivers文件夹,再打开如下。

.chm 文件就是HAL 库的API速查手册。

方法如下:十一、学习HAL库的最好方法就是学习官方列程。

打开Cube 固件包,找到Projects 文件夹,里边有好多列程,都是官方出的开发板的HAL库列程,不过是手动建的工程,不是用 CubeMx 生成的。

十二、添加应用程序。

十三、串口打印效果。

十四、小结。

CubeMx 生成的 Keil 工程,可以像我们平时用标准库建的工程一样添加工程文件、工程文件夹和工程路径。

STM32CubeMX使用说明

STM32CubeMX使用说明

STM32CubeMX使用说明黄盈鑫目录安装软件 (1)安装固件包 (4)创建一个简单的工程 (8)安装软件●到ST的网站上下载最新版本的STM32CubeMX软件:/content/st_com/en/products/development-tools/software-development-too ls/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx. html●编写这份文档的时候最新版本是V4.17.0将下载后的压缩包解压,双击里面的SetupSTM32CubeMX-4.17.0.exe文件来安装软件,出现下图的界面的时候按Next按钮继续:●在下面的窗口中选择“I accept the terms of this license agreement”然后继续按Next按钮。

●下一个出现的窗口是选择软件安装的路径,默认安装路径是C:\Program Files(x86)\STMicroelectronics\STM32Cube\STM32CubeMX,可以根据实际需要选择别的路径,本次安装在D盘相同的路径上。

●按Next按钮后弹出一个确认窗口,按确定键确定。

●接着弹出下图的配置窗口,按原来默认的配置,按Next键继续。

●安装完后,按Next键继续。

●按Done键关闭下面的窗口,完成所有的安装。

安装固件包●点击桌面上的STM32CubeMX图标运行软件。

●先修改软件包的安装路径,点击help菜单选“Updater Settings”选项。

●软件包默认安装在C:/Users/XIN/STM32Cube/Repository/目录下,STM32Cube软件包比较大可以点击Browse按键修改安装的路径。

●修改完软件包的安装路径后开始安装STM32Cube软件包,点击help菜单选“Install newsoftware and/or firmware packages”选项。

STM32单片机LCD显示接口编程 及其应用

STM32单片机LCD显示接口编程 及其应用
main( ) { char *string=”I love Robot!”; printf("%s\n",string); }
任务三 用LCD来显示机器人运动状态
• C语言的编译预处理
–宏定义
即#define指令,具有如下形式: #define 名字 替换文本 它是一种最简单的宏替换。例如: #define LeftIR GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) #define RightIR GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
任务二 编写LCD模块驱动程序
• 在本任务中,你将通过编写程序来驱动LCD显示器,并显示你 的机器人所要显示的字符或字符串,这样你就可以不需要调 试终端的帮助而显示字符或者字符串。 源程序参考教材P203例程LCDdisplay.c
任务二 编写LCD模块驱动程序
• LCDdisplay.c是如何工作的?
• 例程:MoveWithLCDDisplay.c以例程 NavigationWithSwitch.c为模版,删除串口显示语句,添加 LCD显示部分。 • MoveWithLCDDisplay.c是如何工作的
– switch处理每个case之后,调用Display_List_Char( )函数在 LCD 的二行上显示了相关信息
任务一 认识LCD显示器
• 状态字说明
• 当前数据地址指针的数值,对应数据指针(地址)
LCD内部RAM地址映射图
任务一 认识LCD显示器
• 指令说明
• 显示开/关及光标设置
任务一 认识LCD显示器
• 其他指令
任务一 认识LCD显示器
• 初始化LCD

miniSTM32F103开发版LCD显示实验和触摸屏实验文档

miniSTM32F103开发版LCD显示实验和触摸屏实验文档

表 16.1.3 MY、MX、MV 设置与 LCD 扫描方向关系表 这样,我们在利用 ILI9341 显示内容的时候,就有很大灵活性了,比如显示 BMP 图片, BMP 解码数据,就是从图片的左下角开始,慢慢显示到右上角,如果设置 LCD 扫描方向为从 左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往 LCD 填充颜色数据即可, 这样可以大大提高显示速度。 接下来看指令:0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认) 下面,该指令用于设置横坐标(x 坐标) ,该指令如表 16.1.4 所示:
图 16.1.4 16 位数据与显存对应关系图 从图中可以看出,ILI9341 在 16 位模式下面,数据线有用的是:D17~D13 和 D11~D1,D0 和 D12 没有用到,实际上在我们 LCD 模块里面,ILI9341 的 D0 和 D12 压根就没有引出来,这 样,ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。 这样 MCU 的 16 位数据,最低 5 位代表蓝色,中间 6 位为绿色,最高 5 位为红色。数值越 大,表示该颜色越深。另外,特别注意 ILI9341 所有的指令都是 8 位的(高 8 位无效) ,且参数 除了读写 GRAM 的时候是 16 位,其他操作参数,都是 8 位的,这个和 ILI9320 等驱动器不一 样,必须加以注意。 接下来,我们介绍一下 ILI9341 的几个重要命令,因为 ILI9341 的命令很多,我们这里就 不全部介绍了,有兴趣的大家可以找到 ILI9341 的 datasheet 看看。里面对这些命令有详细的介 绍。我们将介绍:0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 条指令。 首先来看指令: 0XD3, 这个是读 ID4 指令, 用于读取 LCD 控制器的 ID, 该指令如表 16.1.1 所示: 顺序 指令 参数 1 参数 2 参数 3 参数 4 控制 RS 0 1 1 1 1 RD 1 ↑ ↑ ↑ ↑ WR ↑ 1 1 1 1 D15~D8 XX XX XX XX XX D7 1 X 0 1 0 1 X 0 0 1 各位描述 D6 D5 0 X 0 0 0 D4 1 X 0 1 0 D3 0 X 0 0 0 D2 0 X 0 0 0 D1 1 X 0 1 0 D0 1 X 0 1 1 HEX D3H X 00H 93H 41H

STM32的液晶与触摸屏显示

STM32的液晶与触摸屏显示

STM32的液晶与触摸屏显示TFT-LCD 英文全称为:Thim Film Transistor Liquid Crystal Display。

TFT即薄膜场效应管。

所谓薄膜晶体管,是指液晶显示器上的每一液晶像素点都是由集成在其后的薄膜晶体管来驱动。

从而可以做到高速度、高亮度、高对比度显示屏幕信息。

TFT-LCD 液晶显示屏是薄膜晶体管型液晶显示屏。

我们采用的3.5 寸液晶屏,它的控制芯片是ILI9488,触摸驱动芯片为TSC2046。

最大支持解析度为:HVGA,分辨率为480×320,接口可以为8位或者16位并口,我们这里是使用16 位并口,以发挥STM32的优势。

而背光则使用一个三极管驱动。

引脚电路图如下图:引脚介绍LCD_CS是TFTLCD的片选信号LCD_RS是命令和数据的标志(0,读写命令。

1是写命令)LCD_WR是向TFTLCD写入数据LCD_RD是从TFTLCD读取数据D[17-1]是数据16位双向数据线RST是硬复位的标志BL_CTR背光处理信号lT_MISO/T_MOSI/T_PEN/T_CS/T_CLK,触摸屏接口信号驱动时序图:驱动流程:RGB565格式说明(16色):指令集:0XD3指令:用于读取LCD控制器的ID0X36指令:用于控制读写方向0X2A指令:用于设置横坐标起始位置和终止位置(x坐标)0X2B指令:用于设置纵坐标起始位置和终止位置(y坐标)0X2C指令:用于写颜色数据0X2E指令:用于读颜色指令接线图:程序:#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"int main(void){u8 x=0;u8 lcd_id[12]; //存放LCD ID字符串delay_init(); //延时函数初始化uart_init(9600); //串口初始化为9600LED_Init(); //初始化与LED连接的硬件接口LCD_Init();POINT_COLOR=RED;sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。

STM32单片机对智能手机触摸屏的驱动

STM32单片机对智能手机触摸屏的驱动

STM32单片机对智能手机触摸屏的驱动由于智能手机的发展和大屏幕的兴起,触摸屏已经得到了广泛的应用。

触摸屏分为两种:电阻触屏俗称“软屏”;电容触屏俗称“硬屏”。

电阻触摸屏的屏体部分是一块多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的阻性材料组成的导电层(ITO膜),上面再盖有一层外表面经过硬化处理、光滑防刮的塑料层。

它的内表面也涂有一层ITO,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开。

当手指接触屏幕时,两层ITO发生接触,电阻发生变化,控制器根据检测到的电阻变化来计算接触点的坐标,再依照这个坐标来进行相应的操作,因此这种技术必须是要施力到屏幕上,才能获得触摸效果。

所有的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。

分压器是通过将两个电阻进行串联来实现的。

上面的电阻(R1)连接正参考电压(VREF),下面的电阻(R2)接地。

两个电阻连接点处的电压测量值与下面那个电阻的阻值成正比。

所以电阻屏的定位是通过AD采样获取电压,来确定点击位置的。

电容式触摸屏利用人体的电流感应进行工作,其触摸屏由一块四层复合玻璃屏构成。

当手指触摸在触摸屏上时,由于人体电场、用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。

这个电流分别从触摸屏四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置信息。

两种屏幕都有其优缺点。

电阻屏价格低廉,精度较高。

电容屏外层可以使用玻璃,抗损性好,不容易出现误操作,可以实现多点触控。

这里驱动的是驱动IC为XPT2046的4线电阻式触摸屏,触摸屏的控制芯片很多,包括ADS7843、ADS7846、TSC2046、AK4182等。

这几款芯片的驱动程序基本上都是一样的,而且封装也有一样的。

芯达STM32入门系列教程之十三《点亮LCD液晶屏》

芯达STM32入门系列教程之十三《点亮LCD液晶屏》

STM32入门系列教程点亮LCD液晶屏Revision 0.01( 2010-04-28 ) 原想把本期《点亮LCD液晶屏》教程放在《GPIO编程》之后,以提高大家的兴趣,但考虑到可能网友学习STM32,是想更多地了解STM32内部工作机制,因此在之前的教程,我们先介绍了串口、外部中断、定时器等最基本的外设模块,有了这些基础,相信您再来学习LCD液晶,已经很轻松了。

我们使用的是芯达STM32配套的2.4寸TFT液晶触摸屏,它是山寨手机上的触摸液晶屏,内部驱动IC为ILI9325。

我们操作LCD,实际上就是在操作ILI9325。

有关该芯片的资料,请参考如下两个网址:ILI9325英文datasheet:/read.php?tid=1979ILI9325指令说明(中文):/read.php?tid=1980考虑到“触摸”涉及到太多的原理,因此把触摸屏单独列出一期教程详细讲解。

这里只讲述如何去点亮LCD液晶屏,如果您看完本期教程,能理解LCD驱动过程,那么笔者心满意足。

要驱动LCD,分两个部分讲解:1、CPU内部模块支持的LCD接口(这里使用FSMC模块)2、LCD控制电路一、STM32的FSMC原理如果是单片机,相信大家再熟悉不过了,直接拿P0或者P1口用作LCD数据总线,再另外拿出几个IO口用作控制信号线——一个LCD控制电路完成了。

STM32相对于单片机,有啥过人之处呢?对于STM32系列的CPU来说,有两种方法给LCD总线赋值。

第一个方法,就是给对应的GPIOx_ODR寄存器赋值——这与单片机一样,单片机也是给P0-P3寄存器赋值,使得信号能从对应的IO端口输出。

而STM32的另一种方法就是使用FSMC。

FSMC全称“静态存储器控制器”。

使用FSMC控制器后,我们可以把FSMC提供的FSMC_A[25:0]作为地址线,而把FSMC 提供的FSMC_D[15:0]作为数据总线。

1、FSMC包括哪几个部分?FSMC包含以下四个模块:(1)AHB接口(包含FSMC配置寄存器)(2)NOR闪存和PSRAM控制器(3)NAND闪存和PC卡控制器(4)外部设备接口要注意的是,FSMC可以请求AHB进行数据宽度的操作。

第四章 STM32CubeMX软件的使用

第四章 STM32CubeMX软件的使用

换个角度认识和对待我们的事业第四章STM32CubeMX软件的使用—参加教育部第157期高校骨干辅导员培训班学习体本章内容HAL库的基本特点STM32CubeMX软件的使用步骤利用MDK软件编写应用程序教学目标了解HAL库的基本特点熟练掌握STM32CubeMX软件的使用流程熟练掌握MDK软件的程序编写和程序下载方法换个角度认识和对待我们的事业4.1 HAL库的基本特点—参加教育部第157期高校骨干辅导员培训班学习体基本流程MCU 固件包 1.例程2.中间件3.HAL 库HAL 库属于MCU固件包的一部分中国情怀学生管理工作HAL 库路径查找HAL 库存放路径的方法:①启动CubeMX 软件②Help -> Updater Settings默认HAL 库路径中国情怀学生管理工作MCU 固件包STM32Cube_FW_F4_1.24.2DocumentsDriversMiddlewareProjectsUtilitiesMCU 固件包文件结构关于MCU 固件包和HAL库使用的官方文档各类支撑文件,如字体文件和图形应用例程中使用的图片文件等中国情怀学生管理工作MCU 固件包DriversCMSISSTM32F4xx_HAL_Driver BSP由ARM 公司提供的Cortex 微控制器软件接口标准,包括Cortex 内核寄存器定义、启动文件等Drivers 文件夹基于HAL 库开发的官方开发板的板级支持包,提供指示灯、按键等外围电路的驱动程序STM32微控制器片内外设的HAL 库驱动文件stm32f4xx_hal_ppp.h stm32f4xx_hal_ppp.c课程核心MiddlewaresSTST emWin STM32_AudioSTM32_USB_Device_LibrarySTM32_USB_Host_LibraryThird PartyFatFS FreeRTOSLibJPEG LwIPPolarSSL中国情怀学生管理工作MCU固件包Middlewares文件夹ProjectsSTM32Fx-DiscoveryTemplates Examples Applications Demonstations三类官方开发板中国情怀学生管理工作MCU 固件包Projects 文件夹各集成开发环境的工程模板针对MCU 片内外设的简单例程,如GPIO 、UART 等针对单个中间件的应用例程针对多个中间件的综合应用例程中国情怀学生管理工作三种库比较ST 免费提供可移植性存储空间占用执行效率易用性完备性硬件覆盖范围标准外设库++++++++++++STM32CubeHAL++++++++++++++LL++++++++++++标准库、HAL 库和LL 库的对比中国情怀学生管理工作官方文档UM1718:STM32CubeMX 软件使用参考手册UM1725:STM32Cube 硬件抽象层驱动使用参考手册换个角度认识和对待我们的事业4.2 STM32CubeMX使用步骤—参加教育部第157期高校骨干辅导员培训班学习体2433图形化方式配置时钟、片内外设,自动生成初始化代码31自动生成工程框架,支持MDK 、EWARM 等多种开发环境集成MCU Finder 功能,便于用户进行芯片选型提高开发效率,聚焦业务层的设计基本特点使用步骤 1. 目标选择2. 引脚分配3. 外设配置4. 时钟配置5. 工程配置6. 程序编写在STM32CubeMX中完成在对应的IDE中完成2016年全国辅导员工作精品项目--南昌大学“卓越”辅导员培养工程建设中国情怀学生管理工作基本流程演示例程1例程目标掌握STM32CubeMX 软件使用步骤2例程内容控制Nucleo 开发板上的用户指示灯LD2每隔1s 闪烁演示例程:驱动指示灯2016年全国辅导员工作精品项目--南昌大学“卓越”辅导员培养工程建设中国情怀学生管理工作基本流程建议建议用户在桌面上新建一个名为CubeMX 的文件夹,用于存放本课程的例程代码。

stm32cubemx使用教程

stm32cubemx使用教程

stm32cubemx使用教程STMCubeMX 是STMicroelectronics官方提供的一款MCU配置工具,可以为 STM32 微控制器提供快速配置和初始化的功能。

以下是使用 STMCubeMX 的简单教程。

1. 安装 STMCubeMX- 从 STMicroelectronics 官方网站下载 STMCubeMX 的最新版本。

- 安装并启动 STMCubeMX。

2. 创建一个新项目- 启动 STMCubeMX 后,点击 "New Project" 创建一个新项目。

- 选择所需的 MCu 系列和型号。

- 在 "Project Name" 中输入项目名称,选择一个保存路径。

3. 配置时钟- 在 "Pinout & Configuration" 选项卡中,配置时钟源和时钟分频。

- 根据需要,可以选择外部晶振或内部时钟源。

- 设置主时钟频率和分频系数。

4. 配置引脚- 在 "Pinout & Configuration" 选项卡中,配置引脚功能。

- 根据需要,为每个引脚选择相应的功能(UART、SPI、I2C 等)。

5. 配置外设模块- 在 "Pinout & Configuration" 选项卡中,配置外设模块。

- 根据需要,打开或关闭相应的外设模块(USART、SPI、I2C 等)。

6. 生成代码- 点击 "Project" 菜单,选择 "Generate Code"。

- STMCubeMX 将自动生成初始化代码,并保存在所选路径下。

7. 导入代码到开发环境- 打开所选路径下的代码文件夹。

- 根据需要,将生成的代码导入到所用的开发环境中。

8. 在代码中添加功能- 在生成的代码的基础上,添加自定义的功能和逻辑。

- 可以使用 HAL 库提供的函数和宏来简化操作。

STM32的液晶与触摸屏显示

STM32的液晶与触摸屏显示

STM32的液晶与触摸屏显示TFT-LCD 英文全称为:Thim Film Transistor Liquid Crystal Display。

TFT即薄膜场效应管。

所谓薄膜晶体管,是指液晶显示器上的每一液晶像素点都是由集成在其后的薄膜晶体管来驱动。

从而可以做到高速度、高亮度、高对比度显示屏幕信息。

TFT-LCD 液晶显示屏是薄膜晶体管型液晶显示屏。

我们采用的3.5 寸液晶屏,它的控制芯片是ILI9488,触摸驱动芯片为TSC2046。

最大支持解析度为:HVGA,分辨率为480×320,接口可以为8位或者16位并口,我们这里是使用16 位并口,以发挥STM32的优势。

而背光则使用一个三极管驱动。

引脚电路图如下图:引脚介绍LCD_CS是TFTLCD的片选信号LCD_RS是命令和数据的标志(0,读写命令。

1是写命令)LCD_WR是向TFTLCD写入数据LCD_RD是从TFTLCD读取数据D[17-1]是数据16位双向数据线RST是硬复位的标志BL_CTR背光处理信号lT_MISO/T_MOSI/T_PEN/T_CS/T_CLK,触摸屏接口信号驱动时序图:驱动流程:RGB565格式说明(16色):指令集:0XD3指令:用于读取LCD控制器的ID0X36指令:用于控制读写方向0X2A指令:用于设置横坐标起始位置和终止位置(x坐标)0X2B指令:用于设置纵坐标起始位置和终止位置(y坐标)0X2C指令:用于写颜色数据0X2E指令:用于读颜色指令接线图:程序:#include "led.h"#include "delay.h"#include "sys.h"#include "usart.h"#include "lcd.h"int main(void){u8 x=0;u8 lcd_id[12]; //存放LCD ID字符串delay_init(); //延时函数初始化uart_init(9600); //串口初始化为9600LED_Init(); //初始化与LED连接的硬件接口LCD_Init();POINT_COLOR=RED;sprintf((char*)lcd_id,"LCD ID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。

stm32 cube programmer 使用说明(一)

stm32 cube programmer 使用说明(一)

- 简介- STM32 Cube Programmer 是一款用于STM32微控制器的烧录工具,能够提供直观的图形用户界面,支持多种烧录方式和调试功能。

- 环境准备- 在使用STM32 Cube Programmer之前,需要安装好ST-Link驱动程序,并且连接好目标芯片与烧录器。

- 下载安装- 在ST官网上下载最新版本的STM32 Cube Programmer安装包,双击运行安装程序,按照提示完成安装。

- 打开软件- 安装完成后,双击桌面图标或者在开始菜单中找到STM32 Cube Programmer并打开。

- 工程设置- 在打开的软件中,点击"File"菜单下的"New Project",选择目标芯片型号,配置相关参数并保存。

- 烧录操作- 连接好目标芯片和烧录器后,点击"Target"菜单下的"Connect",连接到目标芯片,然后选择烧录方式并点击"Start Programming"开始烧录。

- 调试功能- STM32 Cube Programmer还提供了丰富的调试功能,包括读取/写入寄存器值、查看内存内容、单步执行等功能,方便用户进行调试。

- 高级功能- 除了基本的烧录和调试功能,STM32 Cube Programmer还支持自定义脚本、批量烧录等高级功能,满足了更多复杂应用的需求。

- 常见问题解决- 在使用过程中,可能会遇到一些常见问题,比如连接失败、烧录失败等,可以参考官方文档或者在线帮助进行故障排除。

- 结语- STM32 Cube Programmer是一款功能强大的烧录工具,通过本文的介绍,相信读者已经对其有了初步的了解,希望能够在实际应用中发挥其价值。

stm32cubeide使用手册

stm32cubeide使用手册

一、介绍1.1 STM32CubeIDE的概念和作用 1.2 关于本手册的说明二、STM32CubeIDE安装与配置2.1 安装STM32CubeIDE2.1.1 下载安装包2.1.2 安装步骤2.2 配置开发环境2.2.1 配置编译器2.2.2 配置调试工具2.2.3 创建工程2.2.4 设置目标板参数三、STM32CubeIDE的基本功能3.1 工程管理3.1.1 新建工程3.1.2 导入现有工程3.1.3 工程的打开与保存3.2 编辑器功能3.2.1 代码编辑3.2.2 代码自动补全3.2.3 代码格式化3.3 编译与调试3.3.1 编译工程3.3.2 调试工具的使用3.3.3 调试器的设置四、STM32CubeIDE的高级功能4.1 外设配置4.1.1 GPIO配置4.1.2 定时器配置4.1.3 中断配置4.2 调试技巧4.2.1 断点设置与查看4.2.2 寄存器查看与修改4.2.3 性能分析工具的使用五、STM32CubeIDE的进阶应用5.1 高级调试功能5.1.1 实时变量跟踪5.1.2 快速表达式评估5.2 优化技巧5.2.1 代码优化5.2.2 系统优化5.3 多工程协作5.3.1 项目管理5.3.2 版本控制六、常见问题与解决6.1 STM32CubeIDE常见问题6.1.1 编译失败6.1.2 调试器连接问题6.2 解决方案6.2.1 常见问题解决方法6.2.2 常见错误代码解析七、总结与展望7.1 对STM32CubeIDE使用手册的总结 7.2 未来发展展望---以上是文章的大致框架,你可以根据每个小节逐一展开相关内容,这样能够更好地为读者提供全面的使用指南。

在撰写文章时,要注重语言的规范和流畅度,避免使用口语化的词汇和表达方式。

结合具体的使用案例和应用场景来丰富文章内容,让读者更容易理解和接受。

希望这篇文章能够对你有所帮助。

STM32CubeIDE是一款集成开发环境,主要用于开发STM32微控制器的应用程序。

STM32CUBEMX配置教程STM32的定时器触发的固定频率ADC采样

STM32CUBEMX配置教程STM32的定时器触发的固定频率ADC采样

教师师德师风自查报告模板(实用版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的实用范文,如工作计划、工作总结、演讲稿、合同范本、心得体会、条据文书、应急预案、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of practical sample essays for everyone, such as work plans, work summaries, speech drafts, contract templates, personal experiences, policy documents, emergency plans, teaching materials, complete essays, and other sample essays. If you want to learn about different formats and writing methods of sample essays, please stay tuned!教师师德师风自查报告模板教师师德师风自查报告模板(精选33篇)教师师德师风自查报告模板篇1为认真落实师德师风建设深化年活动,进一步加强我校教师师德师风建设,我校对开展师德师风建设情况进行了一次专项检查。

STM32触摸屏学习手记

STM32触摸屏学习手记

STM32触摸屏学习手记1、触摸屏结构和原理想驱动触摸屏首先要对触摸屏有一个深刻的了解和认识才行,必须要搞懂触摸屏的原理,才能去很好的驱动。

搜集了一些触摸屏资料,会在附件中列出。

这里只对原理进行讲解。

触摸屏的结构如下图1所示。

这里省略了屏的材质,网上有很多的介绍,但是个人觉得这些东西和驱动它没有什么本质的联系。

通过图1我们可以看到,触摸屏本质上就是两个电阻层。

只是在这两个电阻层之间夹杂了一些其他的材质,我们并不需要关心这个。

图1 触摸屏结构触摸屏工作时,两个电阻层的工作原理如下图2所示。

图2 电阻层工作原理当某一层电极加上电压时,会在该网络上形成电压梯度。

如有外力使得上下两层在某一点接触,则在未加电压的另一层可以测得接触点处的电压,从而知道接触点处的坐标。

比如,在顶层的电极(Y+,Y-)上加上电压,则会在顶层导体层上形成电压梯度,当有外力使得上下两层在某一点接触时,在底层X层就可以测得接触点处的电压,再根据该电压与电极(Y+)之间的距离关系,就可得到该处的Y坐标。

然后,将电压切换到底层电极(X+,X-)上,并在顶层Y层上测量接触点处的电压,从而得到X坐标。

2、控制芯片ADS78432.1 ADS7843引脚及功能描述在了解了触摸屏的原理之后会感觉驱动触摸屏其实很简单。

只需要在电阻层(X+,X-)上加上固定的电压,在(Y+,Y-)层读出触摸时电压值,根据比例换算就可知道笔在X方向的触摸位置了。

然后在电阻层(Y+,Y-)上加上固定的电压,在(X+,X-)层读出触摸时的电压值,再根据比例换算就可知道笔在Y方向的触摸位置了。

有了X,Y方向的位置,触摸点的位置就唯一确定了。

因此要想确定笔触摸时的位置,需要两次AD转换:X方向和Y方向,只是固定电压加给的电极要跟着切换而已。

这些事情现在很多专用的控制芯片都可以完成了,我们的MCU只需要控制这些芯片进行AD转换,并读出转换结果就可以了。

ADS7843是TI公司生产的4线电阻触摸屏转换接口芯片。

基于STM32的LCD操作

基于STM32的LCD操作

《嵌入式系统》课程报告基于STM32的LCD操作组长:曾昭智姓名组员:邓宁、张小扬、牛洪澄学院光电学院班级电信2班、3班完成日期2014.05.29目录1、原理方案(功能框图介绍) (1)2、电路连线及资源分配 (2)3、所用主要器件或模块说明 (3)4、程序流程图 (4)5、调试心得 (5)6、源代码 (6)1.TFT-LCD原理1.1 TFT-LCD简介TFT-LCD即薄膜晶体管液晶显示器。

其英文全称为:Thin Film Transistor-Liquid Crystal Display。

TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。

TFT-LCD也被叫做真彩液晶显示器。

上一节介绍了OLED模块,这一节,我们给大家介绍ALIENTEK TFTLCD模块,该模块有如下特点:1,2.4’/2.8’两种大小的屏幕可选。

2,320×240的分辨率。

3,16位真彩显示。

4,自带触摸屏,可以用来作为控制输入。

5,通用的接口,除了ALIENTEK MiniSTM32开发板,该液晶模块还可以使用在优异特、STMSKY、红牛等开发板上。

本节,我们以2.8寸的ALIENTEK TFTLCD模块为例介绍,该模块采用的是显尚光电的DST2001PH TFTLCD,DST2001PH的控制器为ILI9320,采用26万色的TFTLCD 屏,分辨率为320×240,采用16位的80并口。

1.2 80并口ALIENTEK TFTLCD模块采用80并口口方与外部链接,采用16位数据线(低了速度太慢,用彩色就没什么效果了)。

该模块的80并口有如下一些信号线:CS:TFTLCD片选信号。

WR:向TFTLCD写入数据。

RD:从TFTLCD读取数据。

STM32驱动触摸屏

STM32驱动触摸屏

STM32驱动触摸屏预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制STM32驱动触摸屏FSMC模块控制液晶控制器ILI9341,SPI模块控制触摸屏控制器TCS2046;//TFT数据总线PD14——FSMC-D0 ——LCD-DB0PD15——FSMC-D1 ——LCD-DB1PD0——FSMC-D2 ——LCD-DB2PD1——FSMC-D3 ——LCD-DB3PE7——FSMC-D4 ——LCD-DB4PE8——FSMC-D5 ——LCD-DB5PE9——FSMC-D6 ——LCD-DB6PE10——FSMC-D7 ——LCD-DB7PE11——FSMC-D8 ——LCD-DB8PE12——FSMC-D9 ——LCD-DB9PE13——FSMC-D10 ——LCD-DB10PE14——FSMC-D11 ——LCD-DB11PE15——FSMC-D12 ——LCD-DB12PD8——FSMC-D13 ——LCD-DB13PD9——FSMC-D14 ——LCD-DB14PD10——FSMC-D15 ——LCD-DB15//TFT控制总线PD4——FSMC-NOE ——LCD-RDPD5——FSMC-NEW ——LCD-RWPD7——FSMC-NE1 ——LCD-CSPD11——FSMC-A16 ——LCD-DCPE1——FSMC-NBL1 ——LCD-RESETPD13——FSMC-A18 ——LCD-BLACK-LIGHT//TCS2046控制总线PA5——SPI1-SCK ——TCS2046-SPI-SCKPA7——SPI1-MOSI ——TCS2046-SPI-MOSIPA6——SPI1-MISO ——TCS2046-SPI-MISOPB7——I2C1-SDA ——TCS2046-SPI_CSPB6——I2C1-SCL ——TCS2046-INT_IRQ需要的库文件:startup/start_stm32f10x_hd.sCMSIS/core_cm3.cCMSIS/system_stm32f10x.c我们用到的外设有GPIO、RCC、EXTI、SPI、FSMC,因此我们要把以下文件包含进来:stm32f10x_gpio.c、stm32f10x_rcc.c、stm32f10x_exti.c、stm32f10x_spi.c、stm32f10x_fsmc.c,;另外还使用了中断,因而需加上misc.c。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
供标准的I2C通信接口,由SCL和SDA与MCU进行通信,其最高通信速度为600K bps。 GT811 的从设备地址有三组可选,以方便主控调配。三组地址分别为:0xBA/0xBB、 0x6E/0x6F 和 0x28/0x29。即:0xBA——对 GT811 进行写操作;0xBB——对 GT811 进行读操作。
GT811有两组寄存器,一组为配置&功能设置寄存器,在初始化的时候配置。触摸屏配置参数由制造商 提供。我们只需了解下面这个四个寄存器即可,此处为设置显示屏的分辨率。
另一组为输出信息寄存器,读取这组寄存器既可以判断当前屏幕的触摸状态。TouchpointFlag寄存器存 储当前触摸的点数,tp0~tp4位触点状态标识为,当tp0置1时,即表示有触点0按下。 GT811最多支持5个触点,若刚开始一次由三个触点按下,tp0,tp1,tp2均置1,表示有三个触点。若此时 第二个触点释放,则tp1清零,只有tp0,tp2为1。当再次有触点按下时,则为tp1置1,最新按下的是触 点2,而不是触点3和触点4。
1/10
参考应用电路如下图,实际上我们在使用的时候只需关心四个引脚即可。I2C_SDA,I2C_SCL为I2C通 信引脚,/RSTB为系统复位引脚,INT为中断信号引脚,但有触摸时,INT输出触发信号,如果MCU对应 的管脚开启外部中断则会触发MCU进入外部中断。
2/10
二、 GT811控制方式
上图为主 CPU 对 GT811 进行的写操作流程图。首先主 CPU 产生一个起始信号, 然后发送地址信息及 读写位信息“0”表示写操作:0XBA。 在收到应答后,主 CPU 发送寄存器的 16 位地址,随后是 8 位要写 入到寄存器的 数据内容。 GT811 寄存器的地址指针会在写操作后自动加 1,所以当主 CPU 需要对连续 地 址的寄存器进行写操作时,可以在一次写操作中连续写入。写操作完成,主 CPU 发送停止信号结束 当前写操作。
//Data Addr high
//Data Addr low
}
/******************************************************************************* * Function Name : i2C_RD_Reg * Description : Writes to the selected register. * Input : - reg: address of the selected register. * - buf: Need to read the BUF pointer. * - len: The length of the array * Output : None * Return : None * Attention : None *******************************************************************************/ void I2C_ReadReg(uint8_t I2c_Addr,uint16_t reg,uint8_t *buf,uint8_t len) { uint8_t i; I2C_Start(); I2C_Send_Byte(I2c_Addr); I2C_Wait_Ack(); #ifdef I2C_MEMADD_16BIT I2C_Send_Byte(reg>>8); I2C_Wait_Ack(); #endif I2C_Send_Byte(reg&0xFF); I2C_Wait_Ack(); I2C_Stop(); I2C_Start(); I2C_Send_Byte(I2c_Addr+1); I2C_Wait_Ack(); for(i=0;i<len;i++) { buf[i]=I2C_Read_Byte(i==(len-1)?0:1); } I2C_Stop(); //Data Addr high
//Data Addr low
}
GT811.c为触摸芯片的驱动文件,下面简单介绍一下初始化函数和读取触摸状态函数。程序开始先拉低复位管 脚复位芯片,注意如果延时时间过短则会导致复位不成功。读取GT811的ID值判断通信是否正常。设置屏幕分辨 率并将配置参数写入到配置&功能寄存器组中。
6/10
/** * @brief Initialize the GT811 communication bus * from MCU to GT811 : ie I2C channel initialization (if required). * @retval None */ uint8_t GT811_Init(void) { I2C_Init(); /* reset GT811 */ HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin, GPIO_PIN_RESET); HAL_Delay(200); HAL_GPIO_WritePin(LCD_RST_GPIO_Port,LCD_RST_Pin, GPIO_PIN_SET); HAL_Delay(200); /* if Version is correct, send the configuration parameters */ if(GT811_ReadID() == GT811_VERSION_VALUE) { /* touch screen configuration parameter (touch screen manufacturers provide) */ uint8_t GTP_CFG_DATA[]= { 0x12,0x10,0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,0x00,0x05,0x55,0x15,0x55,0x25,0x55,0x35,0x55,0x45,0x55, 0x55,0x55,0x65,0x55,0x75,0x55,0x85,0x55,0x95,0x55,0xA5,0x55,0xB5,0x55,0xC5,0x55,0xD5,0x55,0xE5,0x55, 0xF5,0x55,0x1B,0x03,0x00,0x00,0x00,0x13,0x13,0x13,0x0F,0x0F,0x0A,0x50,0x30,0x05,0x03,0x64,0x05,0xe0, 0x01,0x20,0x03,0x00,0x00,0x32,0x2C,0x34,0x2E,0x00,0x00,0x04,0x14,0x22,0x04,0x00,0x00,0x00,0x00,0x00, 0x20,0x14,0xEC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0x25,0x28,0x14,0x00, 0x00,0x00,0x00,0x00,0x00,0x01, }; /* config */ GTP_CFG_DATA[62] GTP_CFG_DATA[61] GTP_CFG_DATA[60] GTP_CFG_DATA[59]
= = = =
GT811_MAX_WIDTH >> 8; GT811_MAX_WIDTH & 0xff; GT811_MAX_HEIGHT >> 8; GT811_MAX_HEIGHT & 0xff;
I2C_WriteReg(GT811_CMD_WR,GT811_CONFIG_REG,(uint8_t *)GTP_CFG_DATA,sizeof(GTP_CFG_DATA)); } return HAL_OK; }
三、新建工程
本章在前面显示字符个工程上修改, 复制刚才的的工程修改文件夹名。打开 Cube工程更加原理图重 新配置。 PD7设置为中断输入,本章采用模拟 I2C, PD12,PD13设置为 GPIO输出模式, PD11输出 GPIO 输出。并设置用户标签。
4/10
开启外部中断。
生成报告以及初始化代码,编译程序。若程序没有出错,下载下面的应用程序解压放在BSP文件里面并 添加进工程中。 BSP.zip
如下为读触摸状态函数,先通过I2C读去输出信息寄存器,判断TouchpointFlag寄存器的tp0~tp4是否置 1,即是否有触摸,若有则将寄存器的值转为坐标值,存储在TS_StateTypeDef 结构体的指针内存中。
7/10
void GT811_GetState(TS_StateTypeDef *TS_State) { uint8_t RegBuf[34]; /* Read touch message */ I2C_ReadReg(GT811_CMD_WR,GT811_READ_XY_REG,RegBuf,sizeof(RegBuf)); /* get touch massage */ TS_State->SensorId = RegBuf[0x00] >> 6; TS_State->touchDetected = RegBuf[0x00] & 0x1F; if(TS_State->touchDetected != 0) { //Touch point 1 coordinates TS_State->touchY[0] = GT811_MAX_HEIGHT - (((uint16_t)RegBuf[0x02] << 8) + RegBuf[0x03]); TS_State->touchX[0] = (((uint16_t)RegBuf[0x04] << 8) + RegBuf[0x05]); TS_State->touchWeight[0] = RegBuf[0x06]; //Touch point 2 coordinates TS_State->touchY[1] = GT811_MAX_HEIGHT - (((uint16_t)RegBuf[0x07] << 8) + RegBuf[0x08]); TS_State->touchX[1] = (((uint16_t)RegBuf[0x09] << 8) + RegBuf[0x0A]); TS_State->touchWeight[1] = RegBuf[0x0B]; //Touch point 3 coordinates TS_State->touchY[2] = GT811_MAX_HEIGHT - (((uint16_t)RegBuf[0x0C] << 8) + RegBuf[0x0D]); TS_State->touchX[2] = (((uint16_t)RegBuf[0x0E] << 8) + RegBuf[0x0F]); TS_State->touchWeight[2] = RegBuf[0x10]; //Touch point 4 coordinates TS_State->touchY[3] = GT811_MAX_HEIGHT - (((uint16_t)RegBuf[0x11] << 8) + RegBuf[0x18]); TS_State->touchX[3] = (((uint16_t)RegBuf[0x19] << 8) + RegBuf[0x1A]); TS_State->touchWeight[3] = RegBuf[0x1B]; //Touch point 5 coordinates TS_State->touchY[4] = GT811_MAX_HEIGHT - (((uint16_t)RegBuf[0x1C] << 8) + RegBuf[0x1D]); TS_State->touchX[4] = (((uint16_t)RegBuf[0x1E] << 8) + RegBuf[0x1F]); TS_State->touchWeight[4] = RegBuf[0x20]; } }
相关文档
最新文档