欧宝娱乐平台网站:STM32驱动ILI9341控制器控制TFTLCD显示
欧宝娱乐app下载 发布时间:2022-04-26

  一、用STM32控制TFTLCD显示的编程方法,在编程驱动TFTLCD液晶显示器之前,我们先熟悉以下概念:

  1、色彩深度,这是一个与TFTLCD显存对应的概念;所谓色彩深度就是每个像素点需要多少位的RGB

  数据表示该点的颜色信息。注意,不同的TFTLCD显示器的RGB的对应关系不一样,这个可以在LCD

  例: 某LCD显示支持8、16、24位RGB,这些位数是指该像素点颜色由8、16、24位RGB构成,但是

  A、对控制寄存器的读写操作(即程序员将要操作LCD显存寄存器的地址设置成可读或者可写)。

  3、TFTLCD有一个索引寄存器,对控制寄存器操作前,需要对索引寄存器进行定入操作,用以指明

  RS为低电平状态下,写入两个字节的数据,第一个字节为零,第二个字节为寄存器索引值。

  RS为高电平状态下,读取两个字节数据,第一个字节为高八位,第二个字节为低八位。

  硬件采用 16 位的并方式与外部连接,之所以不采用 8 位的方式,是因为彩屏的数据量比较大,

  尤其在显示图片的时候,如果用 8 位数据线 位方式慢一倍以上,我们当然希望速

  度越快越好,所以我们选择 16 位的80 并口。有如下一些信号线:CS:TFTLCD 片选信号。WR:向 TFTLCD 写入数据。RD:从 TFTLCD 读取数据。D[15:0]:16 位双向数据线。RST:硬复位 TFTLCD。RS:命令/数据标志(0,读写命令;1,读写数据)。

  在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,接下来看一下ILI9341 的几个重要命令

  2、0X36,这是存储访问控制指令,可以控制 ILI9341 存储器的读写方向,简单的说,就是在连续写

  GRAM 的时候,可以控制 GRAM 指针的增长方向,从而控制显示方式。

  3、0X2A,这是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置

  4、0X2B,是页地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵

  5、0X2C,该指令是写 GRAM 指令,在发送该指令之后,我们便可以往 LCD的 GRAM 里面写入颜色

  数据了,该指令支持连续写,在收到指令 0X2C 之后,数据有效位宽变为 16 位,我们可以连续写入

  该结构体用于保存一些 LCD 重要参数信息,比如 LCD 的长宽、LCD ID(驱动 IC 型号)、LCD 横竖屏状态等,这个结构体虽然占用了 14 个字节的内存,但是却可以让我们的驱动函数支持不同尺寸的 LCD,同时可以实现 LCD 横竖屏切换等重要功能,所以还是利大于弊的。有了以上了解,下面我们开始介绍 ILI93xx.c 里面的一些重要函数。第一个是 LCD_WR_DATA 函数,该函数在 lcd.h 里面,通过宏定义的方式申明。该函数通过 80 并口向 LCD 模块写入一个 16 位的数据,使用频率是最高的,这里我们采用了宏定义的方式,以提高速度。其代码如下

  第三个是 LCD_WR_REG 函数,该函数是通过 8080 并口向 LCD 模块写入寄存器命令,因为该函数使用频率不是很高,我们不采用宏定义来做(宏定义占用 FLASH 较多),通过 LCD_RS来标记是写入命令(LCD_RS=0)还是数据(LCD_RS=1)。该函数代码如下://写寄存器函数

  既然有写寄存器命令函数,那就有读寄存器数据函数。接下来介绍 LCD_RD_DATA 函数,该函数用来读取 LCD 控制器的寄存器数据(非 GRAM 数据),该函数代码如下:

  以上 4 个函数,用于实现 LCD 基本的读写操作,接下来,我们介绍 2 个 LCD 寄存器操作的函数,LCD_WriteReg 和 LCD_ReadReg,这两个函数代码如下://写寄存器

  这两个函数函数十分简单,LCD_WriteReg 用于向 LCD 指定寄存器写入指定数据,而LCD_ReadReg 则用于读取指定寄存器的数据,这两个函数,都只带一个参数/返回值,所以,在有多个参数操作(读取/写入)的时候,就不适合用这两个函数了,得另外实现。第七个要介绍的函数是坐标设置函数,该函数代码如下:

  该函数实现将 LCD 的当前操作点设置到指定坐标(x,y)。因为不同 LCD 的设置方式不一定完全一样,所以代码里面有好几个判断,对不同的驱动 IC 进行不同的设置。接下来我们介绍第八个函数:画点函数。该函数实现代码如下:

  //画点//x,y:坐标//POINT_COLOR:此点的颜色void LCD_DrawPoint(u16 x,u16 y){LCD_SetCursor(x,y);//设置光标位置LCD_WriteRAM_Prepare();//开始写入GRAMLCD_WR_DATA(POINT_COLOR);}该函数实现比较简单,就是先设置坐标,然后往坐标写颜色。其中 POINT_COLOR 是我们定义的一个全局变量,用于存放画笔颜色,顺带介绍一下另外一个全局变量: BACK_COLOR,该变量代表 LCD 的背景色。LCD_DrawPoint 函数虽然简单,但是至关重要,其他几乎所有上层函数,都是通过调用这个函数实现的。有了画点,当然还需要有读点的函数,第九个介绍的函数就是读点函数,用于读取 LCD的 GRAM, 这里说明一下,为什么 OLED 模块没做读 GRAM 的函数,而这里做了。因为 OLED模块是单色的,所需要全部 GRAM 也就 1K 个字节,而 TFTLCD 模块为彩色的,点数也比 OLED模块多很多,以 16 位色计算, 一款 320×240 的液晶,需要 320×240×2 个字节来存储颜色值,也就是也需要 150K 字节,这对任何一款单片机来说,都不是一个小数目了。而且我们在图形叠加的时候,可以先读回原来的值,然后写入新的值,在完成叠加后,我们又恢复原来的值。这样在做一些简单菜单的时候,是很有用的。这里我们读取 TFTLCD 模块数据的函数为LCD_ReadPoint,该函数直接返回读到的 GRAM 值。该函数使用之前要先设置读取的 GRAM地址,通过 LCD_SetCursor 函数来实现。LCD_ReadPoint 的代码如下:

  在 LCD_ReadPoint 函数中,因为我们的代码不止支持一种 LCD 驱动器,所以,我们根据不同的 LCD 驱动器((lcddev.id)型号,执行不同的操作,以实现对各个驱动器兼容,提高函数的通用性。

  最后,我们再介绍一下 TFTLCD 模块的初始化函数 LCD_Init,该函数先初始化 STM32 与TFTLCD 连接的 IO 口,并配置 FSMC 控制器,然后读取 LCD 控制器的型号,根据控制 IC 的型号执行不同的初始化代码,其简化代码如下:

  反复试验,发现SPI_NSS引脚的自动硬件控制与想象的不同,无论是否外加上拉,只要一使能SPI,SPI_Cmd(SPI1,ENABLE);SPI_NSS引脚就一直处于低电平,直到SPI_Cmd(SPI1,DISABLE);这个需要用程序来控制。而用过其他芯片则是发送完成自动会拉高,这点是要注意的我说的就是做主机的时候SPI_SSOutputCmd(SPIx,ENABLE) 在soft模式时这句话有必要吗?我的理解是当hard模式,需要multimaster的时候,才应该要开启这个output功能,这点从我的截图上可以看出。我觉得,这里只要把SPI_InitStructure

  SPI硬件模式 /

  STM32的定时器输入通道都有一个滤波单元,分别位于每个输入通路上(下图中的黄色框)和外部触发输入通路上(下图中的兰色框),它们的作用是滤除输入信号上的高频干扰。具体操作原理如下:在TIMx_CR1中的CKD[1:0]可以由用户设置对输入信号的采样频率基准,有三种选择:1)采样频率基准fDTS=定时器输入频率fCK_INT2)采样频率基准fDTS=定时器输入频率fCK_INT/23)采样频率基准fDTS=定时器输入频率fCK_INT/4然后使用上述频率作为基准对输入信号进行采样,当连续采样到N次个有效电平时,认为一次有效的输入电平。实际的采样频率和采样次数可以由用户程序根据需要选择;外部触发输入通道的滤波参数在从模式控制寄存器(TI

  timer input filter /

  本文的说明依据STM32参考手册(RM0008)第10版:英文:中译文:在STM32参考手册的第13、14章中,都有一张定时器的框图,下面是第14章中定时器框图的局部,图中黄色框所示的是auto-reload register,在下面的第14.3.2节Counter Modes就解释了auto-reload register的用法。在图中可

  影子寄存器和预装载寄存器和TIM_ARRPreloadConfig /

  Fdts /

  OCx与OCxREF和CCxP之间的关系初学STM32,我这个地方卡了很久,现在终于有些明白了,现在把我的理解写下与大家共享,如果有不对的地方,还请指出。-----------------------------------------------------------------------------------------------------------------------TIM_OCMode选择定时器模式。该参数取值见下表:TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //设置跳变值,当计数器计数到这个值时,电平发生跳变TIM_OC2PreloadConfig(TIM3, TI

  定时器输出比较模式 /

  两天学习了一下stm32通用定时器的输入捕获功能。在网上看到很多网友说触发中断程序进不了,于是自己也测试了个小程序,还好能够进入中断。呵呵~实现功能:PA8随意延时驱动led灯闪烁,并且将PA8用杜邦线触发中断程序中取反连接到PD2口的led灯,指示中断程序运行,并且每次进入中断后改变触发捕获的极性。实现两个led灯会交替闪烁。先有必要了解stm32定时器的输入触发模块,如下图:需要注意的是,一眼望去一个定时器似乎有8个通道,左边四个,右边四个,但其实左边和右边是共用相同的IO引脚,所以名称标注是一模一样。也就是说,每个通用定时器都只有四个

  库函数学习篇 /

  

  

  93412.2寸串口模块资料

  TI有奖直播|如何进行更加快速、简单且成本更低的AI 摄像头应用的开发

  是德科技有奖直播:元宇宙测试系列研讨会之VR/AR 数字接口测试的挑战

  Qorvo & Keysight有奖直播报名|新一代无线连接的挑战与应对之道

  【下载】STM32GUI使用TouchGFX位图缓存功能实现表盘背景动态切换

  【干货】放大招!STM32U5,ST首个获得PSA和SESIP 3级认证的MCU!

  【Demo演示】NanoEdge AI-通过对驱动风扇的电流信号进行监测

  Imagination与安霸达成合作 共同开发达ASIL级别的自动驾驶汽车人机界面可视化技术

  轻松注册世健eSHOP,百份奖品大派送!惊喜不断,好礼无限!ipad air2等你拿!

  直播已结束【解锁 TI Sitara AM2x MCU 在电机驱动中的新可能】

  有奖直播:人机互动介面和机器视觉应用上的最佳助手--瑞萨电子 RZ/G, RZ/A 和 RZ/V SoC系列

  下载、评论赢双重好礼|PI 邀您跟littleshrimp一起拆解小米最新二合一充电宝

  站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程