历史上的今天
返回首页

历史上的今天

今天是:2025年03月11日(星期二)

正在发生

2019年03月11日 | STM32 TFT学习笔记——刷屏

2019-03-11 来源:eefocus

主机环境:Windows 7 SP1


开发环境:MDK5.14


目标板:ST NUCLEO-F303RE


TFT型号:2.4英寸,带触摸,SD卡,240*320分辨率,26万色


驱动IC:ILI9325


ST库版本:STM32Cube_FW_F3_V1.1.0


之前已经正确读取了ILI9325的ID号,现在编辑以下刷屏代码,以固定颜色填充满整个LCD屏幕,最重要的一步是对ILI9325进行初始化配置,对着文档写入各个寄存器的值。尤其是电源控制寄存器。初始化列表如下


/**********************************************************************

函数:LCD_Init()

函数作用:LCD初始化

参数:无

返回值:无

上一版本:无

当前版本:1.0

作者:anobodykey

最后修改时间:2015-07-28

说明: LCD初始化即对ILI9325进行配置

**********************************************************************/

void LCD_Init(void)

{

ILI9325_Init();//初始化ILI9325

 

ILI9325_nCS_Set_Low();

//Display Control

ILI9325_Write_Reg(0x01,0x0100);//Driver Output Control

ILI9325_Write_Reg(0x02,0x0700);//Driving Wave Control line inversion

ILI9325_Write_Reg(0x03,0x1030);//Entry Mode swap rb color 65k colors

ILI9325_Write_Reg(0x04,0x0000);//Resizing Control 

ILI9325_Write_Reg(0x08,0x0202);//Set front and back porch periods

ILI9325_Write_Reg(0x09,0x0000);//Display Control3

ILI9325_Write_Reg(0x0A,0x0000);//Set the output interval of FMARK signal

ILI9325_Write_Reg(0x0C,0x0000);//RGB Display Interface Control 1

ILI9325_Write_Reg(0x0D,0x0000);//Frame Marker Position

ILI9325_Write_Reg(0x0F,0x0000);//RGB Display Interface Control 2

 

//Power Management Control

ILI9325_Write_Reg(0x10,0x0000);//Power Control 1

ILI9325_Write_Reg(0x11,0x0227);//Power Control 2 VCi ratio factor = 1.0

HAL_Delay(50);

ILI9325_Write_Reg(0x12,0x009D);//Power Control 3

HAL_Delay(50);

ILI9325_Write_Reg(0x13,0x1900);//Power Control 4

HAL_Delay(50);

 

ILI9325_Write_Reg(0x0010,0x1690);


ILI9325_Write_Reg(0x29,0x0025);//Set the internal VcomH voltage

ILI9325_Write_Reg(0x2B,0x000B);//Frame Rate and Color Control

 

 

ILI9325_Write_Reg(0x20,0x0000);

ILI9325_Write_Reg(0x21,0x0000);//GRAM Horizontal/Vertical Address set

 

//Gamma Control

ILI9325_Write_Reg(0x30,0x0007);

ILI9325_Write_Reg(0x31,0x0303);

ILI9325_Write_Reg(0x32,0x0003);

ILI9325_Write_Reg(0x35,0x0206);

ILI9325_Write_Reg(0x36,0x0008);

ILI9325_Write_Reg(0x37,0x0406);

ILI9325_Write_Reg(0x38,0x0304);

ILI9325_Write_Reg(0x39,0x0007);

ILI9325_Write_Reg(0x3C,0x0601);

ILI9325_Write_Reg(0x3D,0x0008);

 

//GRAM Address position limit

ILI9325_Write_Reg(0x50,0x0000);

ILI9325_Write_Reg(0x51,0x00EF);

ILI9325_Write_Reg(0x52,0x0000);

ILI9325_Write_Reg(0x53,0x013F);

 

//Gate Scan Control

ILI9325_Write_Reg(0x60,0xA700);

ILI9325_Write_Reg(0x61,0x0001);//Enable the grayscale inversion

ILI9325_Write_Reg(0x6A,0x0000);

 

//Partial Image 

ILI9325_Write_Reg(0x80,0x0000);//partial image 1 display position

ILI9325_Write_Reg(0x81,0x0000);//partial image 1 ram start address

ILI9325_Write_Reg(0x82,0x0000);//partial image 1 ram end address

ILI9325_Write_Reg(0x83,0x0000);//partial image 2 display position

ILI9325_Write_Reg(0x84,0x0000);//partial image 2 ram start address

ILI9325_Write_Reg(0x85,0x0000);//partial image 2 ram end address

 

ILI9325_Write_Reg(0x90,0x0010);//Panel Interface Control 1

ILI9325_Write_Reg(0x91,0x0600);//Panel Interface Control 2

ILI9325_Write_Reg(0x93,0x0110);//Panel Interface Control 4

 

//OPT

ILI9325_Write_Reg(0xA1,0x0000);

ILI9325_Write_Reg(0xA2,0x0000);

 

ILI9325_Write_Reg(0x07,0x0133);//turn on display control,turn off partial images

 

ILI9325_nCS_Set_High();

}

0x03寄存器中设置了交换RB数据,一直不知道为啥,文档中16bit接口如下

都是以RGB排列的,这里设置的是第一个选项,以RGB565格式传输颜色实现65K色显示。在主函数中我显示的是红色,如果不交换RB则屏幕上显示的是蓝色。。。因此在初始化时得交换RB顺序才能够显示出正确的颜色。


对于显示来说我们只关心GRAM区即可,


R20、R21是行列地址设置


R20管理水平地址为0x00~0xEF共240个地址空间,R21管理垂直地址为0x00~0x013F共320个地址空间,与屏幕尺寸相一致。文档中提到GRAM的地址是自动更新的,因此我们只需要写一次地址即可。当然如果不是连续地址的话仍需要重新设置地址。对于刷屏而言我们只需要设置一次地址即可。R22是GRAM数据寄存器,确定好地址之后,只需要写该寄存器即可。


还有一个需要注意的是R50~R53寄存器,其限制GRAM的行列地址

在区域更新时我们可以用到该寄存器,对于整屏而言设置其值为最大值即可。


由于在刷屏时我们只需要写R22寄存器即可,但之前的ILI9325_Write_Reg函数就损失效率了,这里我们只需要写一次0x22就可以了,因此重新编辑ILI9325驱动函数,分开地址和数据的写入



/**********************************************************************

函数:ILI9325_Write_Address()

函数作用:向ILI9325写入16bit地址

参数:

uint16_t reg_addr--------------------------------------16bit地址

返回值:无

上一版本:无

当前版本:1.0

作者:anobodykey

最后修改时间:2015-07-28

说明: 

**********************************************************************/

void ILI9325_Write_Address(uint16_t reg_addr)

{

ILI9325_RS_Set_Low();//拉低RS信号,选择index寄存器

ILI9325_nWR_Set_Low();//拉低写使能,使其有效

GPIOB->ODR = reg_addr;//写寄存器地址

ILI9325_nWR_Set_High();

}

 

/**********************************************************************

函数:ILI9325_Write_Value()

函数作用:向ILI9325写入16bit数据

参数:

uint16_t reg_value--------------------------------------16bit数据

返回值:无

上一版本:无

当前版本:1.0

作者:anobodykey

最后修改时间:2015-07-28

说明: 

**********************************************************************/

void ILI9325_Write_Value(uint16_t reg_value)

{

ILI9325_RS_Set_High();//拉低RS信号,选择control寄存器

ILI9325_nWR_Set_Low();//拉低写使能,使其有效

GPIOB->ODR = reg_value;//写寄存器地址

ILI9325_nWR_Set_High();

}

 

/**********************************************************************

函数:ILI9325_Write_Reg()

函数作用:向ILI9325寄存器写入16bit数据

参数:

uint16_t reg_addr-----------------------------------寄存器地址

uint16_t reg_value--------------------------------------16bit数据

返回值:无

上一版本:无

当前版本:1.0

作者:anobodykey

最后修改时间:2015-07-27

说明: ILI9325地址和数据都是使用PB口通信,因此PB口是

             复用的,需先写寄存器地址再写入数据

**********************************************************************/

void ILI9325_Write_Reg(uint16_t reg_addr, uint16_t reg_value)

{

ILI9325_Write_Address(reg_addr);

ILI9325_Write_Value(reg_value);

}

且把CS信号控制提出来由LCD中间层控制,编辑LCD清屏函数,如下


/**********************************************************************

函数:LCD_Clear()

函数作用:LCD清屏

参数:无

返回值:无

上一版本:无

当前版本:1.0

作者:anobodykey

最后修改时间:2015-07-28

说明: 以指定的颜色对LCD进行清屏操作

**********************************************************************/

void LCD_Clear(uint16_t color)

{

uint16_t i = 0, j = 0;

ILI9325_nCS_Set_Low();

ILI9325_Write_Address(0x22);

for(i = 0; i < LCD_Y_MAX; i++)

{

for(j = 0; j < LCD_X_MAX; j++)

{

ILI9325_Write_Value(color);

}

}

ILI9325_nCS_Set_High();

}

在主函数中调用LCD_Clear(LCD_RED),

颜色定义如下



//RGB565格式颜色代码

#define LCD_WHITE 0xFFFF

#define LCD_BLACK 0x0000

#define LCD_RED 0xF800

#define LCD_GREEN 0x07E0

#define LCD_BLUE 0x001F

#define LCD_YELLOW 0xFFE0

#define LCD_CYAN 0x07FF

#define LCD_MAGENTA 0xF81F

 

#define LCD_X_MAX 239

#define LCD_Y_MAX 319

下载程序,运行,效果如下:


推荐阅读

史海拾趣

Apex [Apex Microtechnology]公司的发展小趣事

在作为Cirrus Logic分公司运营了五年后,Apex Microtechnology于2012年重新回归独立私营状态。这次变革使得Apex Microtechnology能够更加灵活地应对市场变化,加速产品创新和研发。同时,公司也扩大了其业务范围,进一步巩固了在电子行业的地位。

泰科天润(GPT)公司的发展小趣事

Apex Microtechnology凭借其卓越的产品质量和服务水平,赢得了客户的广泛认可。其中,公司连续两年获得雷神公司的5星供应商卓越奖,这一奖项是雷神公司综合防御系统业务部对供应商在质量和性能方面的最高认可。Apex Microtechnology的获奖不仅体现了其在电子行业中的领先地位,也为其未来的发展奠定了坚实的基础。

这些故事展示了Apex Microtechnology在电子行业中的发展历程和成就,体现了其在功率模拟技术领域的专业实力和不断创新的精神。作为电子行业的佼佼者,Apex Microtechnology将继续致力于为客户提供更优质的产品和服务,推动电子行业的持续发展。

Heraeus公司的发展小趣事

在作为Cirrus Logic分公司运营了五年后,Apex Microtechnology于2012年重新回归独立私营状态。这次变革使得Apex Microtechnology能够更加灵活地应对市场变化,加速产品创新和研发。同时,公司也扩大了其业务范围,进一步巩固了在电子行业的地位。

EA Elektro-Automatik公司的发展小趣事

EA Elektro-Automatik深知持续创新是企业发展的重要动力。因此,公司始终将创新作为企业文化的核心价值观之一。公司鼓励员工积极提出创新想法和解决方案,并为他们提供充分的支持和资源。此外,EA Elektro-Automatik还积极参与各类科研项目和行业标准的制定工作,推动整个行业的创新和发展。这种企业文化不仅为公司带来了更多的机会和挑战,也为企业的长期发展奠定了坚实的基础。

以上是关于EA Elektro-Automatik公司在电子行业发展的5个相关故事。这些故事展示了公司从创立到成为全球知名电子测量品牌的发展历程和取得的成就。

ALLIED [Allied Electronics]公司的发展小趣事

近年来,中国市场对EA Elektro-Automatik来说变得越来越重要。公司高层认识到了中国市场的巨大潜力和重要性,并制定了在中国市场继续投资和实现增长的明确计划。EA Elektro-Automatik的代表在多个场合与中国政府和行业领导进行交流和合作,努力拓展中国市场。目前,中国市场已经占据EA Elektro-Automatik全球业务的相当一部分份额,并有望在未来继续保持增长。

ALLEN BRADLEY公司的发展小趣事

进入21世纪后,EA Elektro-Automatik加大了对研发的投入,致力于技术突破和产品创新。公司成功开发出一系列具有高精度、高可靠性和高性能的电力测试解决方案,如高速模拟稳压器、直流/交流源、并联操作设备等。这些产品不仅满足了市场对精密测试设备的需求,也进一步巩固了EA Elektro-Automatik在电子测量领域的领先地位。

问答坊 | AI 解惑

谁有优龙fs2410 wince 按键的驱动 ?

谁有fs2410的驱动,能给我发一份吗?我就快毕不了业,写个按键驱动,中断怎么都没有反应。我的邮箱lihongdongnan@yahoo.cn…

查看全部问答>

[求助]S3C2440触摸驱动能否做成手写驱动

1:2440在ADC等待模式的中断,只能每按一次产生一次中断,如果我想按下去一直放手,最后也只能产生一次中断....做到手写的驱动是需要按下时一直继续进行采样的,可在2440不知道怎样做 2:自动X,y转换模式应当怎样使用?我试过后好像不能进入中断服务程序 ...…

查看全部问答>

如何在wince环境下创建一个xml文件啊 请求实例说明

我想在wince环境下 生成一个xml文件 内容有         George         John         Reminder         Don\'t forget the meeting! 在网上找了好久 都 ...…

查看全部问答>

有谁知道一般的科学计算器用的是什么型号的CPU?51系列还是其它的呢?谢谢!

自己想搭个硬件平台做科学计算器,把自己的计算器拆开只看到一个裸片,一块大黑痣里面是啥都看不到郁闷!有人知道一般的科学计算器都用什么cpu来实现么,不知c51能不能符合要求,因为c51对浮点的支持比较差,只支持到单精度,这对对精度要求较高的 ...…

查看全部问答>

wince5.0 可以安装在window2003操作系统上吗? 百分请教

GOOGLE了。BAIDU了。都没找到类似的答案 请教了。。。。。 安装的时候,提示是需要2000 的SP1,或者是XP的SP4。。。 是不是意味着2003无法安装WINCE5.0??? …

查看全部问答>

怎样连接两台电脑的串口?

有两台电脑相距比较远,少说也有200米,想通过串口来传递简单的数据,怎样才能把它俩连起来呢?如果用一对RS232转485直联可以吗?…

查看全部问答>

哪位有STM8L151G4 和STM8L152M8的最小系统图

抱歉 我不是故意伸手 主要是时间紧 而且刚接手  时间来不及  哪位有的高手请麻烦帮忙一下 我邮箱是396095630@qq.com万分感谢…

查看全部问答>

数码管,点阵的问题。(小白求助)

数码管的位选能不接三极管直接接IO口吗?为什么? 点阵可不可以不接芯片,直接用三极管驱动?为什么? 点阵可不可以直接接IO口?为什么? 请各位大大教教小白。 那还有一个问题就是接电阻的作用是限流,但是限流不就让电流更小了吗?那不就不会 ...…

查看全部问答>

初学MSP-EXP430G2-LaunchPad(一)

一、Value Line入门这一部分将介绍MSP430 Value Line系列微控制器,同时需要准备下载并安装相关的软件,并且对MSP-EXP430G2-LaunchPad开发板进行相关设置。 流程:Value Line介绍TI系列微控制器总览MSP430系列微控制器路线图Value Line系列介 ...…

查看全部问答>

苹果发布iOS 6:Siri支持中文 内置新地图

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 6月12日凌晨消息,苹果正式发布新一代移动操作系统iOS 6。新系统中集成了全新的自有3D地图,并且Siri增加中文语音输入。支持设备包括:iPhone 3GS、iPhone 4、iPhone 4S,iPad二代及三代,以及 ...…

查看全部问答>