战舰STM32F103开发版LCD显示实验和触摸屏实验文档
第54章 战舰STM32开发板综合实验
632
图 54.2.1.2 目标文件和文本阅读 上图左侧显示了当前文件夹下面的目标文件(即电子图书支持的文件,包括.txt/.h/.c/.lrc 等 格式,其中.txt/.h/.c 文件共用 1 个图标,.lrc 文件单独一个图标) 。另外,如果文件名太长,在 我们选中该文件名后,系统会以走字的形式,显示整个文件名。 我们打开一个 lrc 文件,开始文本阅读,如图右侧的图片所示,同样我们可以通过滚动条/ 拖动的方式来浏览,图中我们还看到有一个光标,触摸屏点到哪,它就在哪里闪烁,可以方便 大家阅读。 当我们想退出文本阅读的时候,通过按 TPAD 触摸按键实现,按一下 TPAD,则又回到查 找目标文件状态(左侧图) ,按返回按钮可以返回上一层目录,如果再按一次 TPAD 则直接返 回主界面。 54.2.2 数码相框 双击主界面的数码相框图标,进入文件浏览界面,这个和 54.2.1 节差不多,我们找到存放 图片的文件夹,如图 54.2.2.1 所示:
图 54.2.1 综合实验启动界面 注意:综合实验支持屏幕截图(通过 USMART 控制,波特率为 115200) ,本章所有图片均 来自屏幕截图! 上图显示了综合实验的详细启动过程, 首先显示了版权信息, 软硬件版本, 接着显示了 LCD 驱动器的型号(LCD ID) ,然后显示 CPU 和内存信息,之后显示 SPI FLASH 的大小,接着开 始初始化文件系统(FATFS) ,然后显示 SD 卡容量和 FLASH Disk 容量(注意 FLASH Disk 就 是指 SPI FLASH, 因为我们划分了 6M 空间给 FATFS 管理, 所以 FLASH Disk 的容量为 6124KB) 。 接着,就是硬件检测,完了之后检测字库和系统文件,再初始化触摸屏, 加载系统参数 (参 数保存在 24C02 里面) ,最后启动系统。在加载过冲中,任何一个地方出错,都会显示相应的 提示信息,请在检查无误后,按复位重启。 这里有几个注意的地方: ① 如果没插入 SD 卡,会显示 SD Card ERROR,不过系统还是会继续启动,因为没有 SD
STM32f103的触摸屏的设置与使用
STM32f103的触摸屏的设置与使用多功能采集显示平台的人机交互采用的触屏方案。
触屏功能主要是依赖电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、在他们之间有许多细小的(小于 1/1000 英寸)的透明隔离点把两层导电层隔开绝缘。
当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在 X 和 Y 两个方向上产生信号,然后送触摸屏控制器。
控制器侦测到这一接触并计算出(X,Y)的位置,再根据获得的位置模拟鼠标的方式运作。
这就是电阻技术触摸屏的最基本的原理。
电阻触摸屏的优点:精度高、价格便宜、抗干扰能力强、稳定性好。
电阻触摸屏的缺点:容易被划伤、透光性不太好、不支持多点触摸。
多功能采集显示平台采用了触摸屏控制芯片为 XPT2046。
XPT2046 是一款 4 导线制触摸屏控制器,内含 12 位分辨率 125KHz 转换速率逐步逼近型 A/D 转换器。
XPT2046 支持从 1.5V到 5.25V 的低电压 I/O 接口。
XPT2046 能通过执行两次 A/D 转换查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。
硬件设计方面,多功能采集显示平台采用SPI的方式读取XPT2046所存储的XY的逻辑电压值,同时采用了外部中断的方式响应电阻触摸屏的点击事件。
SPI接口使用片上资源的SPI2,占用PB 13~15,片选信号线占用IO口PB12,触摸响应信号线占用PG7,使用外部中断模式,并且中断级别高于显示刷新定时中断。
软件设计方面有以下3点第一,初始化XPT2046芯片,初始化SPI功能,并设置外部中断事件,同时使能XPT2046芯片和IO内部时钟。
第二,电阻触摸屏的点击中断事件,编写中断服务函数,进行对点击的位置的获取,并且根据获取的位置进行区域判定,经行相应的操作。
STM32F103ZE学习笔记(通过FSMC总线控制LCD)
STM32F103ZE学习笔记(通过FSMC总线控制LCD)实验内容:通过FSMC总线来操作LCD屏的显示实验目的:掌握FSMC总线的操作使用方法,为下一步操作触摸屏提前做好准备。
关于FSMC总线的介绍前面已经略有介绍,在此不作赘述。
只是简单说一下其配置过程既需要注意的几点问题:一、 FSMC内部结构和映射地址空间FSMC包含AHB接口、NOR Flash和PSRAM控制器、NANDflash和PC卡控制器、外部设备接口4个主要模块。
在ST吗内部,FSMC的一端通过内部高速总线AHB连接内核,另一端则是面向扩展存储器的外部总线。
内核对外部存储器的访问信号发送到AHB 总线后,经过FSMC转换为符合外部存储器规约的信号,送到外部存储器响应的管脚,视线内河鱼数据交换。
FSMC起到了桥梁的作用,既能够进行信号类型的转换,有能够进行信号宽度和时序的调整,屏蔽掉不同存储器之间的差异。
FSMC内部包含NOR Flash和NAND /PC Card两个控制器,可以分别支持两种截然不同的存储器访问方式,本实验选用的是前者。
FSMC管理1GB的映射地址空间。
该空间氛围4个大小256k d 的bank ,每个bank又分为4个大小为64K的子bank 。
这个问题牵扯到缩扩展的外部存储器的地址问题,务必要注意仔细选择。
各bank 相互独立,均拥有独立的片选线和控制器。
二、FSMC总线配置步骤(1)确定映射地址空间:本例程选用的是bank1 的第四个子bank ,前面也提到过,选择的BANK不同则外设对应的地址不同:我们选择的是BANK1,NE4对应的两个地址为:LCD_REG寄存器地址:0x6C00 0000 ;LCD_Data数据地址:0x6C00 0000 | (1《《(n+1))。
将AFIO的A0接至LCD的C/D(Command/data)脚就自动切换了命令和数据。
如果RS接到地址线的A0上,当RS为0时对应寄存器地址0x6C00 0000;当RS为1时,对应数据地址0x6C00 0002;若选择的的是bank1的NE1,则寄存器地址0x6000 0000;数据地址:0x6000 0002.(2)确定扩展使用的映射地址空间后进而:1、确定硬件电路中用于选中该存储器的片选线FSMC_NEx,2、FSMC配置中用于配置该外部存储器的特殊功能寄存器号,(3) 配置存储器基本特征根据选用的存储器芯片确定需要配置的存储器特征:1确定存储器类型(SRAM)2确定存储器芯片的数据和地址引脚是否复用,3确定存储器芯片的数据线宽度,4对于NOR Flash,确定是否采用同步突发访问方式,5对于NOR Flash,NWIT信号的特性说明,6对于该存储器芯片的读写操作,确定是否采用相同的时许参数来确定时序关系。
stm32f103中文资料
数据手册参照2009年4月 STM32F103x8B 数据手册 英文第10版 (本译文仅供参考,如有翻译错误,请以英文原稿为准) 1/62STM32F103x8 STM32F103xB中等容量增强型,32位基于ARM 核心的带64或128K 字节闪存的微控制器USB 、CAN 、7个定时器、2个ADC 、9个通信接口功能■ 内核:ARM 32位的Cortex™-M3 CPU− 最高72MHz 工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz(Dhrystone 2.1)− 单周期乘法和硬件除法 ■ 存储器− 从64K 或128K 字节的闪存程序存储器 − 高达20K 字节的SRAM ■ 时钟、复位和电源管理− 2.0~3.6伏供电和I/O 引脚 − 上电/断电复位(POR/PDR)、可编程电压监测器(PVD)− 4~16MHz 晶体振荡器− 内嵌经出厂调校的8MHz 的RC 振荡器 − 内嵌带校准的40kHz 的RC 振荡器 − 产生CPU 时钟的PLL− 带校准功能的32kHz RTC 振荡器 ■ 低功耗− 睡眠、停机和待机模式− V BAT 为RTC 和后备寄存器供电■ 2个12位模数转换器,1μs 转换时间(多达16个输入通道)− 转换范围:0至3.6V − 双采样和保持功能 − 温度传感器 ■ DMA :− 7通道DMA 控制器− 支持的外设:定时器、ADC 、SPI 、I 2C 和USART ■ 多达80个快速I/O 端口− 26/37/51/80个I/O 口,所有I/O 口可以映像到16个外部中断;几乎所有端口均可容忍5V 信号■ 调试模式− 串行单线调试(SWD)和JTAG 接口■ 多达7个定时器− 3个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM 或脉冲计数的通道和增量编码器输入− 1个16位带死区控制和紧急刹车,用于电机控制的PWM 高级控制定时器− 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器:24位自减型计数器 ■ 多达9个通信接口− 多达2个I 2C 接口(支持SMBus/PMBus) − 多达3个USART 接口(支持ISO7816接口,LIN ,IrDA 接口和调制解调控制) − 多达2个SPI 接口(18M 位/秒) − CAN 接口(2.0B 主动) − USB 2.0全速接口 ■ CRC 计算单元,96位的芯片唯一代码 ■ ECOPACK ®封装 表1 器件列表参 考 基本型号STM32F103x8STM32F103C8、STM32F103R8、STM32F103V8、STM32F103T8 STM32F103xBSTM32F103RB 、STM32F103VB 、STM32F103TB本文档英文原文下载地址: /stonline/products/literature/ds/13587.pdf目录1介绍 (4)2规格说明 (5)2.1器件一览 (5)2.2系列之间的全兼容性 (6)2.3概述 (6)2.3.1ARM®的Cortex™-M3核心并内嵌闪存和SRAM (6)2.3.2内置闪存存储器 (6)2.3.3CRC(循环冗余校验)计算单元 (6)2.3.4内置SRAM (7)2.3.5嵌套的向量式中断控制器(NVIC) (7)2.3.6外部中断/事件控制器(EXTI) (7)2.3.7时钟和启动 (7)2.3.8自举模式 (7)2.3.9供电方案 (7)2.3.10供电监控器 (8)2.3.11电压调压器 (8)2.3.12低功耗模式 (8)2.3.13DMA (8)2.3.14RTC(实时时钟)和后备寄存器 (8)2.3.15定时器和看门狗 (9)2.3.16I2C总线 (10)2.3.17通用同步/异步收发器(USART) (10)2.3.18串行外设接口(SPI) (10)2.3.19控制器区域网络(CAN) (10)2.3.20通用串行总线(USB) (10)2.3.21通用输入输出接口(GPIO) (10)2.3.22ADC(模拟/数字转换器) (10)2.3.23温度传感器 (11)2.3.24串行单线JTAG调试口(SWJ-DP) (11)3引脚定义 (13)4存储器映像 (21)5电气特性 (22)5.1测试条件 (22)5.1.1最小和最大数值 (22)5.1.2典型数值 (22)5.1.3典型曲线 (22)5.1.4负载电容 (22)5.1.5引脚输入电压 (22)5.1.6供电方案 (23)5.1.7电流消耗测量 (23)参照2009年4月 STM32F103x8B数据手册英文第10版(本译文仅供参考,如有翻译错误,请以英文原稿为准) 2/625.2绝对最大额定值 (23)5.3工作条件 (25)5.3.1通用工作条件 (25)5.3.2上电和掉电时的工作条件 (25)5.3.3内嵌复位和电源控制模块特性 (25)5.3.4内置的参照电压 (26)5.3.5供电电流特性 (26)5.3.6外部时钟源特性 (33)5.3.7内部时钟源特性 (37)5.3.8PLL特性 (38)5.3.9存储器特性 (38)5.3.10EMC特性 (38)5.3.11绝对最大值(电气敏感性) (39)5.3.12I/O端口特性 (40)5.3.13NRST引脚特性 (42)5.3.14TIM定时器特性 (43)5.3.15通信接口 (43)5.3.16CAN(控制器局域网络)接口 (47)5.3.1712位ADC特性 (47)5.3.18温度传感器特性 (51)6封装特性 (52)6.1封装机械数据 (52)6.2热特性 (59)6.2.1参考文档 (59)6.2.2选择产品的温度范围 (59)7订货代码 (61)8版本历史 (62)参照2009年4月 STM32F103x8B数据手册英文第10版(本译文仅供参考,如有翻译错误,请以英文原稿为准) 3/621 介绍本文给出了STM32F103x8和STM32F103xB中等容量增强型产品的订购信息和器件的机械特性。
战舰STM32F103开发版LCD显示实验和触摸屏实验文档
y 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SP 即可,因为如果 EP 没有变化,我
们只需要设置一次即可(在初始化 ILI9341 的时候设置),从而提高速度。
接下来看指令:0X2C,该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD
的 GRAM 里面写入颜色数据了,该指令支持连续写,指令描述如表 18.1.1.6 所示:
18.1 TFTLCD 简介 18.2 硬件设计 18.3 软件设计 18.4 下载验证
18.1 TFTLCD&FSMC 简介
本章我们将通过 STM32 的 FSMC 接口来控制 TFTLCD 的显示,所以本节分为两个部分, 分别介绍 TFTLCD 和 FSMC。 18.1.1 TFTLCD 简介
样,必须加以注意。
接下来,我们介绍一下 ILI9341 的几个重要命令,因为 ILI9341 的命令很多,我们这里就
不全部介绍了,有兴趣的大家可以找到 ILI9341 的 datasheet 看看。里面对这些命令有详细的介
绍。我们将介绍:0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 条指令。
图 18.1.1.4 16 位数据与显存对应关系图
从图中可以看出,ILI9341 在 16 位模式下面,数据线有用的是:D17~D13 和 D11~D1,D0
和 D12 没有用到,实际上在我们 LCD 模块里面,ILI9341 的 D0 和 D12 压根就没有引出来,这
样,ILI9341 的 D17~D13 和 D11~D1 对应 MCU 的 D15~D0。
TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象 素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特 性与扫描线数无关,因此大大提高了图像质量。TFT-LCD 也被叫做真彩液晶显示器。
实验二 LCD显示控制
实验二LCD显示控制一、实验目的通过本次实验进一步熟悉MagicARM2410 GPIO、UART、RTC的工作原理;学习LCD的工作原理,并能编程控制。
二、实验要求在实验一的基础上,研读LCD显示源代码,作适当修改,实现下列功能:1、系统启动时,在LCD上显示下列信息:(1)、年月日及当前时间(拓展:能自行设置时);(2)、个人的班级姓名学号(拓展:汉字显示)。
2、使用实验箱上小键盘输入一个(x,y)坐标,以此坐标作为图片的顶点位置,显示一幅个人照片或图片。
3、LCD同步显示超级终端上的信息。
三、实验原理(1)ZLG——7290ZLG7290的核心是一块ZLG7290B芯片,它采用I2C接口,能直接驱动8位共阴式数码管,同时可扫描管理多达64只按键,实现人机对话的功能资源十分丰富。
除具有自动消除抖动功能外,它还具有段闪烁、段点亮、段熄灭、功能键、连击键计数等强大功能,并可提供10种数字和21种字母的译码显示功能,用户可以直接向显示缓存写入显示数据,而且无需外接元件即可直接驱动数码管,还可扩展驱动电压和电流。
用户按下某个键时,ZLG7290的INT引脚会产生一个低电平的中断请求信号,读取键值后,中断信号就会自动撤销。
正常情况下,微控制器只需要判断INT引脚就可以得到键盘输入的信息。
微控制器可通过两种方式得到用户的键盘输入信息。
其一是中断方式,该方式的优点是抗干扰能力强,缺点是要占用微控制器的一个外部中断源。
其二是查询方式,即通过不断查询INT引脚来判断是否有键按下,该方式可以节省微控制器的一根I/O口线,但是代价是I2C总线处于频繁的活动状态,消耗电流多并且不利于抗干扰。
(2)LCD工作原理LCD 显示字符《法一》其实每一字符就是一幅图像,字符的大小对应于图像的大小,字符的笔画对应于图像的内容。
那么如何把字符转换为图像呢?简单的方法是使用“字模提取”之类的软件,它能够把任意的字符转换为一个字节型的数组,数组元素中的每一位代表LCD上的一个像素点,当为1时,表示该位置为字符的一个笔画,需要上色,而为0时,表示不是笔画,不需要上色。
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数组。
STM32F103启航号,4.3寸LCD测试
启航号STM32 之 4.3寸lcd测试(ssd1963)——旺宝电子 实验目的:学会4.3寸屏的使用及ssd1963简介Ssd1963简介:最高有1215K 字节的缓存,支持864*480 24位显示支持TFT的18位或24位的RGB格式接口支持8位的串行RGB接口可以支持硬件旋转支持窗口显示通过编程控制亮度对比度饱和度通过PWM实现动态背光控制和mcu有8、9、16、18、24位接口内建PLL各种省电模式下面是块图从这张图可以看出SSD1963有几大模块1.和mcu通信接口2.时钟复位管理3.时钟产生4.流缓冲5.lcd控制器6.和lcd的接口可以看出控制数据是通过mcu接口直接就写到寄存器了,而显示数据则是先写到了流缓冲寄存器,然后经过lcd控制器的一系列处理,然后送到lcd上让其显示这个就是上面说到的硬件旋转,至于到底是什么东东,我也没用过,估计就是让屏幕旋转下图是我们4.3模块原理图实际上这只是和stm32的接口部分从图中可以看出我们用了16个IO口给ssd1963传送数据,然后看下图从图中可以看出16位有两种传送模式,第一种是RGB 565格式,第二种就是发送两次RGB,共包含16位R 16位G 16位B,我们大部分采用的第二种方式还要注意一点,ssd1963,和我们其他几块屏不同,ssd1963设置寄存器的时候,每个寄存器的参数不是固定的,因此我们一般是发送了写寄存器命令,然后在发送寄存器的参数,(可以将其封装起来,写成函数)下面介绍ssd1963几个重要的寄存器set_display_on 0x29 ;设置显示打开,配置完成后设置该寄存器才能打开显示,否则无显示set_display_off 0x28;设置显示关闭,在配置完成之前应该设置该寄存器set_column_address 0x2a,设置列的显示的范围,不设置,则显示不正常,或无法显示set_page_address 0x2b ,设置页页地址(行)不设置无法显示write_memory_start 0x2c在向ssd1963的内存写数据前要先写该寄存器set_lcd_mode 0xb0,设置lcd接口的模式等set_pll 0xe0 使能或不使能PLLset_pll_mn 0xe2设置PLL的使用规则set_pixel_data_interface 0xf0,设置和stm32的接口,就是传送数据时以什么格式传输,就是上面提到那个有颜色那个图本程序是通过FSMC驱动4.3寸LCD的,接口部分和3.2的一样,关于更详细的信息看上面的3.2寸的程序有较详细介绍,现在分析程序int main(void){u8 x=0;SystemInit(); //系统时钟配置// NVIC_Configuration(); //中断向量表注册函数Usart_Init(); //串口引脚配置Usart_Configuration(115200);//串口配置设置波特率为115200// LED_Init(); //LED初始化// KEY_Init(); //按键初始化LCD_Init(); //LCD初始化while(1){switch(x){case 0:LCD_Clear(WHITE);break;case 1:LCD_Clear(BLACK);break;case 2:LCD_Clear(BROWN);break;case 3:LCD_Clear(RED);break;case 4:LCD_Clear(MAGENTA);break;case 5:LCD_Clear(GREEN);break;case 6:LCD_Clear(CYAN);break;case 7:LCD_Clear(GRAY);break;case 8:LCD_Clear(BRRED);break;case 9:LCD_Clear(YELLOW);break;case 10:LCD_Clear(BLUE);break;}x++;if(x>10) x=0;else{LED1=~LED1;Delay_Ms(400); //LED1闪烁,系统运行正常}}}这个程序就是在lcd上循环显示颜色,这个和一般的有点不一样,这是通过switch语句散转的,关于swith 语句,相信一般人都比较熟悉了,在每次switch跳出后,会使led的状态改变,并且延时400ms关于lcd初始化函数void LCD_Init(void){FSMC_LCDInit(); //LCD对应的FSMC接口初始化GPIO_LCDInit(); //LCD对应的IO接口初始化DeviceID = Read_LCDReg(0x0000); //读取LCD的ID:对应我们1289的屏的ID是0x8999printf("DeviceID=0x%x\r\n",DeviceID); //以十六进制方式输出LCD读取的IDif(DeviceID == 0x8999){//************* Start Initial Sequence **********//Write_LCDReg(0x00, 0x0001); // 开启内部时钟#if LCD_ID_AM == 110Write_LCDReg(0x01, 0x3B3F); //输出驱动控制: RL=0;REV=1;GD=1;BGR=0;SM=0;TB=1#elif LCD_ID_AM == 001Write_LCDReg(0x01, 0x7B3F); //输出驱动控制:RL=1;REV=1;GD=1;BGR=0;SM=0;TB=1#endifWrite_LCDReg(0x02, 0x0600); //set 1 line inversion//************* Power control setup ************/Write_LCDReg(0x0C, 0x0007); // Adjust VCIX2 output voltageWrite_LCDReg(0x0D, 0x0006); // Set amplitude magnification of VLCD63Write_LCDReg(0x0E, 0x3200); // Set alternating amplitude of VCOMWrite_LCDReg(0x1E, 0x00BB); // Set VcomH voltageWrite_LCDReg(0x03, 0x6A64); // Step-up factor/cycle setting//************ RAM position control **********/Write_LCDReg(0x0F, 0x0000); // Gate scan position start at G0.Write_LCDReg(0x44, 0xEF00); // Horizontal RAM address positionWrite_LCDReg(0x45, 0x0000); // Vertical RAM address start positionWrite_LCDReg(0x46, 0x013F); // Vertical RAM address end position// ----------- Adjust the Gamma Curve ----------//Write_LCDReg(0x30, 0x0000);Write_LCDReg(0x31, 0x0706);Write_LCDReg(0x32, 0x0206);Write_LCDReg(0x33, 0x0300);Write_LCDReg(0x34, 0x0002);Write_LCDReg(0x35, 0x0000);Write_LCDReg(0x36, 0x0707);Write_LCDReg(0x37, 0x0200);Write_LCDReg(0x3A, 0x0908);Write_LCDReg(0x3B, 0x0F0D);//************* Special command **************/Write_LCDReg(0x28, 0x0006); // Enable test commandWrite_LCDReg(0x2F, 0x12EB); // RAM speed tuningWrite_LCDReg(0x26, 0x7000); // Internal Bandgap strengthWrite_LCDReg(0x20, 0xB0E3); // Internal Vcom strengthWrite_LCDReg(0x27, 0x0044); // Internal Vcomh/VcomL timingWrite_LCDReg(0x2E, 0x7E45); // VCOM charge sharing time//************* Turn On display ******************/Write_LCDReg(0x10, 0x0000); // Sleep mode off.Delay_Ms(3); // Wait 30mS#if LCD_ID_AM == 000Write_LCDReg(0x11, 0x6840); //262K色彩水平方向送数据,水平和垂直方向地址递减#elif LCD_ID_AM == 010Write_LCDReg(0x11, 0x6850); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 100Write_LCDReg(0x11, 0x6860); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 110Write_LCDReg(0x11, 0x6870); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 001Write_LCDReg(0x11, 0x6848); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 011Write_LCDReg(0x11, 0x6858); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 101Write_LCDReg(0x11, 0x6868); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#elif LCD_ID_AM == 111Write_LCDReg(0x11, 0x6878); //262K色彩Entry mode setup. 262K type B, take care on the data bus with 16it only#endifWrite_LCDReg(0x07, 0x0033); // Display ON */}else{LCD_WR_REG(0x00E2); //PLL multiplier, set PLL clock to 120MLCD_WR_DATA(0x0023); //N=0x36 for 6.5M, 0x23 for 10M crystal LCD_WR_DATA(0x0002);LCD_WR_DATA(0x0004);LCD_WR_REG(0x00E0); // PLL enableLCD_WR_DATA(0x0001);Delay_Ms(1);LCD_WR_REG(0x00E0);LCD_WR_DATA(0x0003);Delay_Ms(5);LCD_WR_REG(0x0001); // software resetDelay_Ms(5);LCD_WR_REG(0x00E6); //PLL setting for PCLK, depends on resolution LCD_WR_DATA(0x0001);LCD_WR_DATA(0x0033);LCD_WR_DATA(0x0032);LCD_WR_REG(0x00B0); //LCD SPECIFICATIONLCD_WR_DATA(0x0020);LCD_WR_DATA(0x0000);LCD_WR_DATA((HDP>>8)&0X00FF); //Set HDPLCD_WR_DATA(HDP&0X00FF);LCD_WR_DATA((VDP>>8)&0X00FF); //Set VDPLCD_WR_DATA(VDP&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B4); //HSYNCLCD_WR_DATA((HT>>8)&0X00FF); //Set HTLCD_WR_DATA(HT&0X00FF);LCD_WR_DATA((HPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(HPS&0X00FF);LCD_WR_DATA(HPW); //Set HPWLCD_WR_DATA((LPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(LPS&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B6); //VSYNCLCD_WR_DATA((VT>>8)&0X00FF); //Set VTLCD_WR_DATA(VT&0X00FF);LCD_WR_DATA((VPS>>8)&0X00FF); //Set VPSLCD_WR_DATA(VPS&0X00FF);LCD_WR_DATA(VPW); //Set VPWLCD_WR_DATA((FPS>>8)&0X00FF); //Set FPSLCD_WR_DATA(FPS&0X00FF);// Write_LCDReg(0x00BA);// LCD_WR_DATA(0x000F); //GPIO[3:0] out 1// Write_LCDReg(0x00B8);// LCD_WR_DATA(0x0007); //GPIO3=input, GPIO[2:0]=output// LCD_WR_DATA(0x0001); //GPIO0 normal// Write_LCDReg(0x0036); //rotation// LCD_WR_DATA(0x0000);// LCD_WR_DATA(0x0060);//============================================//============================================// Write_LCDReg(0x003A); //rotation// LCD_WR_DATA(0x0050);// Write_LCDReg(0x0026); //rotation// LCD_WR_DATA(0x0003);// Write_LCDReg(0x0030); //rotation// LCD_WR_DATA(0x0000);//=============================================//=============================================LCD_WR_REG(0x00F0); //pixel data interfaceLCD_WR_DATA(0x0002);Delay_Ms(5);LCD_Clear(BLACK);LCD_WR_REG(0x0029); //display onDelay_Ms(50);}LCD_Clear(BLACK);}这个初始化函数可以对两种lcd初始化,一种是我们的3.2寸屏,一种是我们的4.3寸屏ssd1963 关于fsmc 和GPIO初始化,还有3.2的初始化已经说过了,下面是对应4.3的初始化代码else{LCD_WR_REG(0x00E2); //PLL multiplier, set PLL clock to 120MLCD_WR_DATA(0x0023); //N=0x36 for 6.5M, 0x23 for 10M crystalLCD_WR_DATA(0x0002);LCD_WR_DATA(0x0004);LCD_WR_REG(0x00E0); // PLL enableLCD_WR_DATA(0x0001);Delay_Ms(1);LCD_WR_REG(0x00E0);LCD_WR_DATA(0x0003);Delay_Ms(5);LCD_WR_REG(0x0001); // software resetDelay_Ms(5);LCD_WR_REG(0x00E6); //PLL setting for PCLK, depends on resolutionLCD_WR_DATA(0x0001);LCD_WR_DATA(0x0033);LCD_WR_DATA(0x0032);LCD_WR_REG(0x00B0); //LCD SPECIFICATIONLCD_WR_DATA(0x0020);LCD_WR_DATA(0x0000);LCD_WR_DATA((HDP>>8)&0X00FF); //Set HDPLCD_WR_DATA(HDP&0X00FF);LCD_WR_DATA((VDP>>8)&0X00FF); //Set VDPLCD_WR_DATA(VDP&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B4); //HSYNCLCD_WR_DATA((HT>>8)&0X00FF); //Set HTLCD_WR_DATA(HT&0X00FF);LCD_WR_DATA((HPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(HPS&0X00FF);LCD_WR_DATA(HPW); //Set HPWLCD_WR_DATA((LPS>>8)&0X00FF); //Set HPSLCD_WR_DATA(LPS&0X00FF);LCD_WR_DATA(0x0000);LCD_WR_REG(0x00B6); //VSYNCLCD_WR_DATA((VT>>8)&0X00FF); //Set VTLCD_WR_DATA(VT&0X00FF);LCD_WR_DATA((VPS>>8)&0X00FF); //Set VPSLCD_WR_DATA(VPS&0X00FF);LCD_WR_DATA(VPW); //Set VPWLCD_WR_DATA((FPS>>8)&0X00FF); //Set FPSLCD_WR_DATA(FPS&0X00FF);// Write_LCDReg(0x00BA);// LCD_WR_DATA(0x000F); //GPIO[3:0] out 1// Write_LCDReg(0x00B8);// LCD_WR_DATA(0x0007); //GPIO3=input, GPIO[2:0]=output// LCD_WR_DATA(0x0001); //GPIO0 normal// Write_LCDReg(0x0036); //rotation// LCD_WR_DATA(0x0000);// LCD_WR_DATA(0x0060);//============================================//============================================// Write_LCDReg(0x003A); //rotation// LCD_WR_DATA(0x0050);// Write_LCDReg(0x0026); //rotation// LCD_WR_DATA(0x0003);// Write_LCDReg(0x0030); //rotation// LCD_WR_DATA(0x0000);//=============================================//=============================================LCD_WR_REG(0x00F0); //pixel data interfaceLCD_WR_DATA(0x0002);Delay_Ms(5);LCD_Clear(BLACK);LCD_WR_REG(0x0029); //display onDelay_Ms(50);}LCD_WR_REG(0x00E0); 使能了PLLLCD_WR_REG(0x00E6); //PLL setting for PCLK, depends on resolutionLCD_WR_DATA(0x0001);LCD_WR_DATA(0x0033);LCD_WR_DATA(0x0032);这4句配置了PLL,第一句是命令后面的3字节是配置的参数LCD_WR_REG(0x00B0); //LCD SPECIFICATIONLCD_WR_DATA(0x0020);LCD_WR_DATA(0x0000);LCD_WR_DATA((HDP>>8)&0X00FF); //Set HDPLCD_WR_DATA(HDP&0X00FF);LCD_WR_DATA((VDP>>8)&0X00FF); //Set VDPLCD_WR_DATA(VDP&0X00FF);LCD_WR_DATA(0x0000);这几句设置了lcd的屏幕的大小,也就是显示的范围i还有像素点后lcd的接口,像素点后stm32的接口等,就不在一一讲述,请参照ssd1963手册在分析一下清屏函数void LCD_Clear(uint32_t color){int i = 0 ,tmp = 1;unsigned int l=480,w;unsigned char rcode,gcode,bcode;if(color>0xffff00) tmp = 2;rcode = (unsigned char)(color >> 16);gcode = (unsigned char)(color >> 8);bcode = (unsigned char)color;LCD_WR_REG(0x002a);LCD_WR_DATA(0);LCD_WR_DATA(0);LCD_WR_DATA(HDP>>8);LCD_WR_DATA(HDP&0x00ff);LCD_WR_REG(0x002b);LCD_WR_DATA(0);LCD_WR_DATA(0);LCD_WR_DATA(VDP>>8);LCD_WR_DATA(VDP&0x00ff);LCD_WR_REG(0x002c);while(l--){for(w=0;w<272;w++){LCD_WR_DATA((rcode << 8) | (gcode));LCD_WR_DATA((bcode << 8) | (rcode));LCD_WR_DATA((gcode << 8) | (bcode));for(i = 25*tmp;i>0;i--);}}}rcode = (unsigned char)(color >> 16);gcode = (unsigned char)(color >> 8);bcode = (unsigned char)color;这三句把部分的RGB提取出来,这里相信大家不一定看得懂,请参照下面的代码和下面的图片思考代码:LCD_WR_DATA((rcode << 8) | (gcode));LCD_WR_DATA((bcode << 8) | (rcode));LCD_WR_DATA((gcode << 8) | (bcode));图片:while(l--){for(w=0;w<272;w++){LCD_WR_DATA((rcode << 8) | (gcode));LCD_WR_DATA((bcode << 8) | (rcode));LCD_WR_DATA((gcode << 8) | (bcode));for(i = 25*tmp;i>0;i--);}}I = 480的4.3 屏是272*480的,所以这里I是480,这里就循环480*272次,循环一次就会发送,6字节数据,为啥会发送6字节呢,因为一次会发送16位,一共发送3次,为什么发送3次,因为,我们用的1字节代表RGB中的一个可以看出来,这里的关于所有的lcd代码都是先写寄存器,然后在跟几个参数(有些没有参数),这样看起来没有3.2寸的方便,我们可以将这些写成一个函数如,lcd_write(unsigned int reg,unsignd char ** arg,unsigned char i); 第一个是写的寄存器,第二个是参数列表,第三个事参数个数,我们不这样写,因为这样调用一共函数的话,可能会有很多参数的入栈,还有参数的出栈,这样会消耗大量时间,不过对于不分应用,这点时间也不算什么。
基于STM32F103的触摸屏驱动模块设计综述
基于STM32F103x的LCD触摸屏驱动的设计姓名:______徐进东_______学号:______10030227_____班级:______10 计卓______目录1 概述 (3)2 LCD液晶显示屏 (3)2.1 LCD液晶显示屏原理 (3)2.2 LCD液晶显示屏分类 (3)3 触摸屏驱动原理概述 (4)3.1 电阻触摸屏工作原理 (4)3.2 触摸屏控制实现 (4)4 设计目标 (4)5 系统硬件设计 (5)5.1 STM32微处理器FSMC接口 (5)5.2 LCD液晶显示屏介绍 (7)5.3 触摸屏控制板 (8)6 系统软件设计 (10)6.1 系统软件结构 (10)6.2 头文件设计 (11)6.2 硬件初始化程序 (11)6.3 3寸LCD模块驱动程序 (14)6.4 触摸坐标获取程序 (19)6.5 LCD控制器控制程序 (22)7 总结 (24)1 概述LCD液晶显示屏与触摸屏在嵌入式系统中的应用越来越普及。
他们是非常简单、方便、自然的人机交互方式,目前广泛应用于便携式仪器、智能家电、掌上设备等领域。
触摸屏与LCD液晶显示技术的紧密结合,成了主流配置。
LCD液晶显示屏(LCD Module , LCM)是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源以及结构件装配在仪器的组件。
触摸屏技术在我国的应用时间不是太长,但它已经成长为人们最为接受的输入方式。
利用这种技术人们只需触碰屏幕就可以对主机进行操作,是人机交互更为方便,直截了当。
本文档是对LCD液晶显示屏和触摸屏驱动的设计做深入介绍。
2 LCD液晶显示屏2.1 LCD液晶显示屏原理液晶(Liquid Crystal):是一种介于固态和液态之间的具有规则性分子排列,及晶体的光学各向异性的有机化合物,液晶在受热到一定温度的时候会呈现透明状的液体状态,而冷却则会出现结晶颗粒的混浊固体状态,因为物理上具有液体与晶体的特性,故称之为“液晶”。
第二章战舰STM32开发板实验平台硬件资源详解
第二章实验平台硬件资源详解本章,我们将节将向大家详细介绍ALIENTEK战舰STM32开发板各部分的硬件原理图,让大家对该开发板的各部分硬件原理有个深入理解,并向大家介绍开发板的使用注意事项,为后面的学习做好准备。
本章将分为如下两节:1.1,开发板原理图详解;1.2,开发板使用注意事项;2.1 开发板原理图详解2.1.1 MCUALIENTEK战舰STM32开发板选择的是STM32F103ZETT6作为MCU,该芯片是STM32F103里面配置非常强大的了,它拥有的资源包括:64KB SRAM、512KB FLASH、2个基本定时器、4个通用定时器、2个高级定时器、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口、1个FSMC接口以及112个通用IO口。
该芯片的配置十分强悍,并且还带外部总线(FSMC)可以用来外扩SRAM和连接LCD 等,通过FSMC驱动LCD,可以显著提高LCD的刷屏速度,更重要的是其价格,23元左右的零售价,足以秒杀很多其他芯片了。
所以我们选择了它作为我们的主芯片。
MCU部分的原理图如图2.1.1.1(请大家打开开发板光盘的原理图查看清晰版本)所示:图2.1.1.1 MCU部分原理图上图中U5为我们的主芯片:STM32F103ZET6。
这里主要讲解一下3个地方:1,后备区域供电脚VBA T脚的供电采用CR1220纽扣电池和VCC3.3混合供电的方式,在有外部电源(VCC3.3)的时候,CR1220不给VBAT供电,而在外部电源断开的时候,则由CR1220给其供电。
这样,VBA T总是有电的,以保证RTC的走时以及后备寄存器的内容不丢失。
2,图中的R37和R38用隔离MCU部分和外部的电源,这样的设计主要是考虑了后期维护,如果3.3V电源短路,可以断开这两个电阻,来确定是MCU部分短路,还是外部短路,有助于生产和维修。
《stm32f103单片机应用开发实例》
一、介绍STM32F103单片机STM32F103是STMicroelectronics公司推出的一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设和强大的性能,被广泛应用于工业控制、汽车电子、消费类电子等领域。
本文将通过一些实际的应用开发示例,介绍STM32F103单片机的应用开发。
二、STM32F103单片机开发环境搭建1. 硬件环境2. 软件环境3. 开发工具的选择和配置4. 开发过程中常见问题的解决方法三、基本的STM32F103单片机应用开发1. 点亮LED灯2. 控制LED灯的闪烁3. 串口通信4. 定时器应用5. 外部中断应用四、STM32F103单片机外设的应用开发1. 通用定时器 (TIM) 的应用开发2. 串行外设接口 (SPI) 的应用开发3. 串行通信接口 (USART) 的应用开发4. 直接存储器访问 (DMA) 的应用开发5. PWM 的应用开发五、STM32F103单片机高级应用开发1. 定时器中断和DMA传输的应用2. 外部中断和定时器的结合应用3. 外设之间的协同工作应用开发4. 看门狗 (Watchdog) 的应用开发5. 低功耗模式下的应用开发六、实例分析和实验结果1. 确定应用目标2. 使用STM32CubeMX生成代码3. 编写应用程序代码4. 调试和验证5. 总结和改进七、总结和展望通过以上的实例分析和实验结果,我们对STM32F103单片机的应用开发有了更深入的理解。
在未来,随着技术的不断发展,STM32F103单片机的应用将会更加广泛,我们也将在实际项目中不断总结经验,进一步完善应用开发方法,为相关领域的技术创新和应用发展做出更大的贡献。
以上就是《STM32F103单片机应用开发实例》的相关内容,希望可以对您有所帮助。
八、实例分析和实验结果为了更好地理解STM32F103单片机的应用开发,我们将具体分析一个LED灯控制的实例,并展示实验结果。
战舰STM32F103开发版LCD显示实验和触摸屏实验文档
图18123模式a读操作时序图模式a支持独立的读写时序控制这个对我们驱动tftlcd来说非常有用因为tftlcd在读的时候一般比较慢而在写的时候可以比较快如果读写用一样的时序那么只能以读的时序为基准从而导致写的速度变慢或者在读数据的时候重新配置fsmc的延时在读操作完成的时候再配置回写的时序这样虽然也不会降低写的速度但是频繁配置比较麻烦
alientek-战舰-stm32-开发板-用户手册说明书
用户手册多功能STM32F103嵌入式开发平台ATK-战舰STM32开发板用户手册修订历史版本日期原因V1.002013/12/26第一次发布V1.012014/08/12修正部分内容V2.02015/8/21修改为战舰V3的参数User Manual目录1.特性参数 (1)2.源码&教程&技术支持 (4)2.1程序源码 (4)2.2教程 (5)2.2.1文档教程 (5)2.2.2视频教程 (5)2.2.3应用文档 (5)2.3技术支持 (6)3.结构尺寸 (6)4.其他信息 (8)1.特性参数ATK-战舰STM32开发板-V3.0(V3.0是版本号,下面均以ATK-战舰STM32开发板表示该产品)是ALIENTEK 推出的一款多功能STM32F103嵌入式开发平台,该平台具有板载资源丰富、扩展资源多、例程完善、教程详细等众多特点。
ALIENTEK 战舰STM32F103V3的资源图如图1.1所示:图1.1战舰STM32F103资源图从图1.1.1可以看出,ALIENTEK 战舰STM32F103,资源十分丰富,并把STM32F103的内部资源发挥到了极致,基本所有STM32F103的内部资源,都可以在此开发板上验证,同时扩充丰富的接口和功能模块,整个开发板显得十分大气。
W25Q128128MFLASH 引出IO 口WIRELESS 模块接口CAN/USB 选择口JTAG/SWD 接口USB 串口/串口1USB SLAVE 后备电池接口USB 转串口OLED/摄像头模块接口STM32F103ZET6有源蜂鸣器红外接收头DS18B20/DHT11接口启动选择端口复位按钮参考电压选择端口4个按键触摸按钮电源指示灯多功能端口24C02EEPROM 录音输入接口MIC (咪头)耳机输出接口ATK 模块接口3.3V 电源输入/输出CAN 接口RS232/模块选择接口LCD 接口IS62WV512168M SRAM以太网接口(RJ45)RS232接口(母)RS485接口RS232/RS485选择接口小喇叭(在底部)电源开关DC6~24V 电源输入JOYPAD/RS232接口(公)引出IO 口引出IO 口光敏传感器5V 电源输入/输出SD 卡接口(在背面)JOYPAD/RS232选择开关2个LED2.8寸TFTLCD触摸屏×1红外遥控器×1RS232串口线×1游戏手柄×1资料光盘(DVD)×2T口USB数据线×1杜邦线×2工作温度1-20℃~+70℃外形尺寸112mm*156mm表1.1ATK-战舰STM32开发板基本特性注1:仅限战舰STM32开发板底板和2.8寸TFTLCD触摸屏模块。
基于STM32F103的触摸屏驱动模块计划
1 概述
LCD 液晶显示屏与触摸屏在嵌入式系统中的应用越来越普及。他们是非常简单、方便、 自然的人机交互方式,目前广泛应用于便携式仪器、智能家电、掌上设备等领域。触摸屏 与 LCD 液晶显示技术的紧密结合,成了主流配置。
LCD 液晶显示屏(LCD Module , LCM)是一种将液晶显示器件、连接件、集成电路、PCB 线路板、背光源以及结构件装配在仪器的组件。
触摸屏技术在我国的应用时间不是太长,但它已经成长为人们最为接受的输入方式。 利用这种技术人们只需触碰屏幕就可以对主机进行操作,是人机交互更为方便,直截了当。
本文档是对 LCD 液晶显示屏和触摸屏驱动的设计做深入介绍。
2 LCD 液晶显示屏
2.1 LCD 液晶显示屏原理
液晶(Liquid Crystal):是一种介于固态和液态之间的具有规则性分子排列,及晶体的 光学各向异性的有机化合物,液晶在受热到一定温度的时候会呈现透明状的液体状态,而 冷却则会出现结晶颗粒的混浊固体状态,因为物理上具有液体与晶体的特性,故称之为 “液晶”。
2.1 LCD 液晶显示屏原理 .........................................................................................................3 2.2 LCD 液晶显示屏分类 .........................................................................................................3 3 触摸屏驱动原理概述 ..............................................................................................................4 3.1 电阻触摸屏工作原理 .......................................................................................................4 3.2 触摸屏控制实现 ...............................................................................................................4 4 设计目标 ......................................................................................................................................4 5 系统硬件设计 ..............................................................................................................................5 5.1 STM32 微处理器 FSMC 接口 .............................................................................................5 5.2 LCD 液晶显示屏介绍 .........................................................................................................7 5.3 触摸屏控制板 ...................................................................................................................8 6 系统软件设计 ............................................................................................................................10 6.1 系统软件结构 .................................................................................................................10 6.2 头文件设计 .....................................................................................................................11 6.2 硬件初始化程序 .............................................................................................................11 6.3 3 寸 LCD 模块驱动程序 ...................................................................................................14 6.4 触摸坐标获取程序 .........................................................................................................19 6.5 LCD 控制器控制程序 .......................................................................................................22 7 总结 ............................................................................................................................................24
基于STM32单片机的EMS液晶显示触摸屏设计
基于STM32单片机的EMS液晶显示触摸屏设计隋宗强;李立伟;张洪伟【期刊名称】《通信电源技术》【年(卷),期】2012(029)003【摘要】A LCD touch panel based on STM32F103 MCU design program which is used in EMS system is introduced in this paper,with STM32F103 as the core controller.STM32F103 is connected to four line resistance touch panel through I/O interfaces to monitoring touch and calculate the coordinates of contact by its own A/D conversion function to realize touch performance,and communicates with TFT LCD module through its own I/O interfaces to realize display performance.%提出一种基于STM32F103单片机的用于电动车电池能量管理系统(EMS)的液晶显示触摸屏的设计方案,该方案以STM32F103作为核心控制器。
STM32F103通过I/O口与四线电阻触摸屏相连,利用自带的A/D转换功能检测触摸并计算触点坐标实现触摸功能,并通过自身的I/O 接口与TFT液晶屏模块实现通信,控制实现显示的功能。
【总页数】4页(P47-49,53)【作者】隋宗强;李立伟;张洪伟【作者单位】青岛大学自动化工程学院,山东青岛266071;青岛大学自动化工程学院,山东青岛266071;山东电力集团公司物资部,山东济南250001【正文语种】中文【中图分类】TM33;TP272【相关文献】1.基于ARM的触摸屏TFT液晶显示电路设计 [J], 程静涛2.基于STM32单片机的EMS液晶显示触摸屏设计研究 [J], 黄祥3.基于Linux液晶显示触摸屏控制的新设计与实现 [J], 胡俊;何建忠4.基于Stateflow的触摸屏液晶显示器控制软件设计 [J], 崔飞;李月香5.基于STM32单片机的EMS液晶显示触摸屏设计研究 [J], 黄祥因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
控制 RD 1 1 1 1 1
各位描述 HEX RS WR D15~D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 ↑ XX 0 0 1 0 1 0 1 0 2BH 参数 1 1 ↑ XX SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SP 参数 2 1 ↑ XX SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 参数 3 1 ↑ XX EP15 EP14 EP13 EP12 EP11 EP10 EP9 EP8 EP 参数 4 1 ↑ XX EP7 EP6 EP5 EP4 EP3 EP2 EP1 EP0 表 18.1.1.5 0X2B 指令描述 在默认扫描方式时, 该指令用于设置 y 坐标, 该指令带有 4 个参数, 实际上是 2 个坐标值: SP 和 EP,即页地址的起始值和结束值,SP 必须小于等于 EP,且 0≤SP/EP≤319。一般在设置 y 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SP 即可,因为如果 EP 没有变化,我 们只需要设置一次即可(在初始化 ILI9341 的时候设置) ,从而提高速度。 接下来看指令:0X2C,该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD 的 GRAM 里面写入颜色数据了,该指令支持连续写,指令描述如表 18.1.1.6 所示: 控制 各位描述 顺序 HEX RS RD WR D15~D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 1 ↑ XX 0 0 1 0 1 1 0 0 2CH 参数 1 1 1 ↑ D1[15:0] XX …… 1 1 ↑ D2[15:0] XX 参数 n 1 1 ↑ Dn[15:0] XX 表 18.1.1.6 0X2C 指令描述 从上表可知,在收到指令 0X2C 之后,数据有效位宽变为 16 位,我们可以连续写入 LCD GRAM 值,而 GRAM 的地址将根据 MY/MX/MV 设置的扫描方向进行自增。例如:假设设置 的是从左到右,从上到下的扫描方式,那么设置好起始坐标(通过 SC,SP 设置)后,每写入 一个颜色值,GRAM 地址将会自动自增 1(SC++) ,如果碰到 EC,则回到 SC,同时 SP++,一 直到坐标:EC,EP 结束,其间无需再次设置的坐标,从而大大提高写入速度。 最后, 来看看指令: 0X2E, 该指令是读 GRAM 指令, 用于读取 ILI9341 的显存 (GRAM) , 该指令在 ILI9341 的数据手册上面的描述是有误的,真实的输出情况如表 18.1.1.7 所示: 控制 各位描述 顺序 HEX RS RD WR D15~D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 1 ↑ XX 0 0 1 0 1 1 1 0 2EH 参数 1 1 ↑ 1 XX dummy 参数 2 1 ↑ 1 R1[4:0] XX G1[5:0] XX R1G1 参数 3 1 ↑ 1 B1[4:0] XX R2[4:0] XX B1R2 参数 4 1 ↑ 1 G2[5:0] XX B2[4:0] XX G2B2 参数 5 1 ↑ 1 R3[4:0] XX G3[5:0] XX R3G3 参数 N 1 ↑ 1 按以上规律输出 表 18.1.1.7 0X2E 指令描述 该指令用于读取 GRAM,如表 18.1.1.7 所示,ILI9341 在收到该指令后,第一次输出的是 dummy 数据,也就是无效的数据,第二次开始,读取到的才是有效的 GRAM 数据(从坐标: SC,SP 开始) ,输出规律为:每个颜色分量占 8 个位,一次输出 2 个颜色分量。比如:第一次 输出是 R1G1,随后的规律为:B1R2G2B2R3G3B3R4G4B4R5G5... 以此类推。如果 我们只需要读取一个点的颜色值, 那么只需要接收到参数 3 即可, 如果要连续读取 (利用 GRAM 顺序
表 18.1.1.3 MY、MX、MV 设置与 LCD 扫描方向关系表 这样,我们在利用 ILI9341 显示内容的时候,就有很大灵活性了,比如显示 BMP 图片, BMP 解码数据,就是从图片的左下角开始,慢慢显示到右上角,如果设置 LCD 扫描方向为从 左到右,从下到上,那么我们只需要设置一次坐标,然后就不停的往 LCD 填充颜色数据即可, 这样可以大大提高显示速度。 接下来看指令:0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认) 下面,该指令用于设置横坐标(x 坐标) ,该指令如表 18.1.1.4 所示:
表 18.1.1.1 0XD3 指令描述 从上表可以看出, 0XD3 指令后面跟了 4 个参数, 最后 2 个参数, 读出来是 0X93 和 0X41, 刚好是我们控制器 ILI9341 的数字部分,从而,通过该指令,即可判别所用的 LCD 驱动器是什 么型号,这样,我们的代码,就可以根据控制器的型号去执行对应驱动 IC 的初始化代码,从而 兼容不同驱动 IC 的屏,使得一个代码支持多款 LCD。
图 18.1.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, 该指令如表 18.1.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
RS:命令/数据标志(0,读写命令;1,读写数据) 。 80 并口在上一节我们已经有详细的介绍了, 这里我们就不再介绍, 需要说明的是, TFTLCD 模块的 RST 信号线是直接接到 STM32 的复位脚上,并不由软件控制,这样可以省下来一个 IO 口。另外我们还需要一个背光控制线来控制 TFTLCD 的背光。所以,我们总共需要的 IO 口数 目为 21 个。这里还需要注意,我们标注的 DB1~DB8,DB10~DB17,是相对于 LCD 控制 IC 标 注的,实际上大家可以把他们就等同于 D0~D15,这样理解起来就比较简单一点。 ALIENTEK 提供 2.8/3.5/4.3/7 寸等不同尺寸的 TFTLCD 模块,其驱动芯片有很多种类型, 比如有:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/SPFD5408 /SSD1289/1505/B505/C505/NT35310/NT35510 等(具体的型号, 大家可以通过下载本章实验代码, 通过串口或者 LCD 显示查看),这里我们仅以 ILI9341 控制器为例进行介绍,其他的控制基本 都类似,我们就不详细阐述了。 ILI9341 液晶控制器自带显存,其显存总大小为 172800(240*320*18/8) ,即 18 位模式(26 万色)下的显存量。在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341 的 18 位数据线与 MCU 的 16 位数据线以及 LCD GRAM 的对应关系如图 18.1.1.4 所示:
图 18.1.1.1 ALIENTEK 2.8 寸 18.1.1.2 ALIENTEK 2.8 寸 TFTLCD 模块原理图 TFTLCD 模块采用 2*17 的 2.54 公排针与外部连接,接口定义如图 18.1.1.3 所示:
图 18.1.1.3 ALIENTEK 2.8 寸 TFTLCD 模块接口图 从图 18.1.1.3 可以看出, ALIENTEK TFTLCD 模块采用 16 位的并方式与外部连接, 之所以 不采用 8 位的方式, 是因为彩屏的数据量比较大, 尤其在显示图片的时候, 如果用 8 位数据线, 就会比 16 位方式慢一倍以上, 我们当然希望速度越快越好, 所以我们选择 16 位的接口。 图 18.1.3 还列出了触摸屏芯片的接口,关于触摸屏本章我们不多介绍,后面的章节会有详细的介绍。该 模块的 80 并口有如下一些信号线: CS:TFTLCD 片选信号。 WR:向 TFTLCD 写入数据。 RD:从 TFTLCD 读取数据。 D[15:0]:16 位双向数据线。 RST:硬复位 TFTLCD。
各位描述 HEX RS WR D15~D8 D7 D6 D5 D4 D3 D2 D1 D0 指令 0 ↑ XX 0 0 1 0 1 0 1 0 2AH 参数 1 1 ↑ XX SC15 SC14 SC13 SC12 SC11 SC10 SC9 SC8 SC 参数 2 1 ↑ XX SC7 SC6 SC5 SC4 SC3 SC2 SC1 SC0 参数 3 1 ↑ XX EC15 EC14 EC13 EC12 EC11 EC10 EC9 EC8 EC 参数 4 1 ↑ XX EC7 EC6 EC5 EC4 EC3 EC2 EC1 EC0 表 18.1.1.4 0X2A 指令描述 在默认扫描方式时, 该指令用于设置 x 坐标, 该指令带有 4 个参数, 实际上是 2 个坐标值: SC 和 EC,即列地址的起始值和结束值,SC 必须小于等于 EC,且 0≤SC/EC≤239。一般在设 置 x 坐标的时候,我们只需要带 2 个参数即可,也就是设置 SC 即可,因为如果 EC 没有变化, 我们只需要设置一次即可(在初始化 ILI9341 的时候设置) ,从而提高速度。 与 0X2A 指令类似,指令:0X2B,是页地址设置指令,在从左到右,从上到下的扫描方式 (默认)下面,该指令用于设置纵坐标(y 坐标) 。该指令如表 18.1.1.5 所示: 顺序