历史上的今天
返回首页

历史上的今天

今天是:2025年03月01日(星期六)

2021年03月01日 | 一个简单的STM32vet6驱动2.4寸240X320的8位并口tft屏

2021-03-01 来源:eefocus

最近在研究用低速、低RAM的单片机来驱动小LCD或TFT彩屏实现动画效果


首先我用一个16MHz晶振的m0内核的8位单片机nRF51822尝试驱动一个1.77寸的4线SPI屏(128X160),


发现,刷一屏大约要0.8s左右的时间,


具体收录在《1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO》中


觉得,如果用72MHz的STM32也许效果会好很多


于是在stm32上做了个类似的版本,


具体收录在《一个简单的stm32vet6驱动的天马4线SPI-1.77寸LCD彩屏DEMO》中


发现刷一屏0.2s左右,


效果是有的,但是还不能达到支持播放流畅动画的效果!


于是,决定将串行数据改成并行数据传输


本节将带来一个用stm32驱动的2.4寸240X320的8位并口tft屏的刷屏效果


工程结构



main.c


1 /* Includes ------------------------------------------------------------------*/


2 #include "stm32f10x.h"


3 #include "LCD2.h"


4


5


6 void RCC_Configuration(void);


7 /****************************************************************************


8 * 名 称:int main(void)


9 * 功 能:主函数


10 * 入口参数:无


11 * 出口参数:无


12 * 说 明:


13 * 调用方法:无


14 ****************************************************************************/


15 int main(void)


16 {


17 RCC_Configuration(); //系统时钟配置


18 LCD2_GPIO_Init();


19 LCD2_Init();


20 while (1)


21 {


22 Show_RGB(0,240,0,320,0xff0f);


23 DELAY_MS(1000);


24 Show_RGB(0,240,0,320,0x00fe);


25 DELAY_MS(1000);


26 }


27 }


28


29 /****************************************************************************


30 * 名 称:void RCC_Configuration(void)


31 * 功 能:系统时钟配置为72MHZ


32 * 入口参数:无


33 * 出口参数:无


34 * 说 明:


35 * 调用方法:无


36 ****************************************************************************/


37 void RCC_Configuration(void)


38 {


39 SystemInit();


40 }








LCD2.c




1 #include "LCD2.h"


2


3


4


5 void LCD2_GPIO_Init()


6 {


7 GPIO_InitTypeDef GPIO_InitStructure;


8


9 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB " RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);


10


11


12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;


13 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;


14 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口线翻转速度为50MHz


15 GPIO_Init(GPIOB, &GPIO_InitStructure);


16


17 //8位数据输出


18 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;


19 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;


20 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口线翻转速度为50MHz


21 GPIO_Init(GPIOD, &GPIO_InitStructure);


22 }


23


24 //////////////////////////////////////////////////////////////////


25 //最底层数据传输函数


26 //////////////////////////////////////////////////////////////////


27 //写命令


28 void Write_Cmd(unsigned char DH,unsigned char DL)


29 {


30 LCD2_CS=0;


31 LCD2_RS=0;


32


33 DataPort=DH;


34 LCD2_RW=0;


35 LCD2_RW=1;


36


37 DataPort=DL;


38


39 LCD2_RW=0;


40 LCD2_RW=1;


41 LCD2_CS=1;


42 }


43 //写数据 双8位


44 void Write_Data(unsigned char DH,unsigned char DL)


45 {


46 LCD2_CS=0;


47


48 LCD2_RS=1;


49 DataPort=DH;


50 LCD2_RW=0;


51 LCD2_RW=1;


52


53 DataPort=DL;


54 LCD2_RW=0;


55 LCD2_RW=1;


56 LCD2_CS=1;


57 }


58


59 //写数据 双8位


60 void Write_Data2(unsigned char DH,unsigned char DL)


61 {


62 DataPort=DH;


63 LCD2_RW=0;


64 LCD2_RW=1;


65


66 DataPort=DL;


67 LCD2_RW=0;


68 LCD2_RW=1;


69 }


70


71 //////////////////////////////////////////////////////////////////


72 //调用上面最底层实现稍高层写命令和数据函数


73 //////////////////////////////////////////////////////////////////


74 /*----------------------------------------------------------------


75 写命令、写数据


76 输入参数:x 需要输入的命令 16位


77 y 需要输入的数据 16位


78 ----------------------------------------------------------------*/


79 void Write_Cmd_Data (unsigned char x,unsigned int y)


80 {


81 unsigned char m,n;


82 m=y>>8;


83 n=y;


84 Write_Cmd(0x00,x);


85 Write_Data(m,n);


86 }


87 /*----------------------------------------------------------------


88 写16位数据


89 ----------------------------------------------------------------*/


90 void Write_Data_U16(unsigned int y)


91 {


92 unsigned char m,n;


93 m=y>>8;


94 n=y;


95 Write_Data2(m,n);


96 }


97


98 /*----------------------------------------------------------------


99 液晶初始化


100 ----------------------------------------------------------------*/


101 void LCD2_Init(void)


102 {


103 LCD2_CS=1;


104 DELAY_MS(5);


105 LCD2_RES=0;


106 DELAY_MS(5);


107 LCD2_RES=1;


108 DELAY_MS(50);


109 Write_Cmd_Data(0x0001,0x0100);


110 Write_Cmd_Data(0x0002,0x0700);


111 Write_Cmd_Data(0x0003,0x1030);


112 Write_Cmd_Data(0x0004,0x0000);


113 Write_Cmd_Data(0x0008,0x0207);


114 Write_Cmd_Data(0x0009,0x0000);


115 Write_Cmd_Data(0x000A,0x0000);


116 Write_Cmd_Data(0x000C,0x0000);


117 Write_Cmd_Data(0x000D,0x0000);


118 Write_Cmd_Data(0x000F,0x0000);


119 //power on sequence VGHVGL


120 Write_Cmd_Data(0x0010,0x0000);


121 Write_Cmd_Data(0x0011,0x0007);


122 Write_Cmd_Data(0x0012,0x0000);


123 Write_Cmd_Data(0x0013,0x0000);


124 //vgh


125 Write_Cmd_Data(0x0010,0x1290);


126 Write_Cmd_Data(0x0011,0x0227);


127 //DELAY_MS(100);


128 //vregiout


129 Write_Cmd_Data(0x0012,0x001d); //0x001b


130 //DELAY_MS(100);


131 //vom amplitude


132 Write_Cmd_Data(0x0013,0x1500);


133 //DELAY_MS(100);


134 //vom H


135 Write_Cmd_Data(0x0029,0x0018);


136 Write_Cmd_Data(0x002B,0x000D);


137


138 //gamma


139 Write_Cmd_Data(0x0030,0x0004);


140 Write_Cmd_Data(0x0031,0x0307);


141 Write_Cmd_Data(0x0032,0x0002);// 0006


142 Write_Cmd_Data(0x0035,0x0206);


143 Write_Cmd_Data(0x0036,0x0408);


144 Write_Cmd_Data(0x0037,0x0507);


145 Write_Cmd_Data(0x0038,0x0204);//0200


146 Write_Cmd_Data(0x0039,0x0707);


147 Write_Cmd_Data(0x003C,0x0405);// 0504


148 Write_Cmd_Data(0x003D,0x0F02);


149 //ram


150 Write_Cmd_Data(0x0050,0x0000);


151 Write_Cmd_Data(0x0051,0x00EF);


152 Write_Cmd_Data(0x0052,0x0000);


153 Write_Cmd_Data(0x0053,0x013F);


154 Write_Cmd_Data(0x0060,0xA700);


155 Write_Cmd_Data(0x0061,0x0001);


156 Write_Cmd_Data(0x006A,0x0000);


157 //


158 Write_Cmd_Data(0x0080,0x0000);


159 Write_Cmd_Data(0x0081,0x0000);


160 Write_Cmd_Data(0x0082,0x0000);


161 Write_Cmd_Data(0x0083,0x0000);


162 Write_Cmd_Data(0x0084,0x0000);


163 Write_Cmd_Data(0x0085,0x0000);


164 //


165 Write_Cmd_Data(0x0090,0x0010);


166 Write_Cmd_Data(0x0092,0x0600);


167 Write_Cmd_Data(0x0093,0x0003);


168 Write_Cmd_Data(0x0095,0x0110);


169 Write_Cmd_Data(0x0097,0x0000);


170 Write_Cmd_Data(0x0098,0x0000);


推荐阅读

史海拾趣

GREEGOO公司的发展小趣事
在需要时钟分路的地方,使用专用的时钟分路、放大、整形的芯片,以确保时钟信号的无衰减传输。
Hendon Semiconductors公司的发展小趣事

Hendon Semiconductors在能源管理和照明控制领域也有着显著的成就。公司开发了一系列高效、可靠的能源管理解决方案和照明控制产品,广泛应用于智能家居、商业建筑和工业自动化等领域。这些解决方案不仅帮助客户降低了能耗和运营成本,还提高了能源使用效率和环境可持续性。通过不断创新和优化产品设计,Hendon Semiconductors在能源管理和照明控制市场上赢得了广泛的认可。

安普康(AMPCOM)公司的发展小趣事

随着业务的不断发展,安普康开始积极寻求市场拓展和战略合作的机会。公司在香港市场取得了显著的成绩后,决定进一步拓展内地市场。通过设立深圳安普康科技有限公司等分支机构,安普康逐步在内地市场建立了完善的销售网络和服务体系。同时,公司还与多家知名企业建立了长期合作关系,共同开拓市场、分享资源。这些合作不仅提升了安普康的市场地位,也为其未来的发展奠定了坚实的基础。

Helium_Systems__Inc.公司的发展小趣事

为了更好地适应全球市场的变化,海曼电子不断深化其国际化战略。公司在全球范围内建立了完善的研发、生产和销售网络,确保能够快速响应客户需求。同时,公司还加大了对海外市场的投入,通过本地化运营和定制化服务,赢得了更多海外客户的信赖和支持。此外,海曼电子还积极参与国际标准的制定和推广工作,提升了公司在全球电子行业的影响力。

Dean Technology公司的发展小趣事

在激烈的市场竞争中,Dean Technology公司始终保持对技术创新的追求。他们不断投入研发资金,引进先进技术和设备,提升产品的技术含量和附加值。同时,公司还注重与高校、科研机构的合作,共同开展科研项目,推动行业技术的进步。这些努力使得Dean Technology的高压二极管产品始终保持在行业的领先地位。

Cermetek Microelectronics公司的发展小趣事

随着产品的推出,Cermetek Microelectronics公司开始注重品质管理。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到最终的产品测试,都经过严格的把控。这种对品质的执着追求,使得公司的产品在市场上获得了良好的口碑。同时,公司还积极拓展市场,与多家知名企业建立了合作关系,进一步提升了品牌影响力。

问答坊 | AI 解惑

儿童指甲盖般大 全球最小的GPS信号接收器

新西兰一家名为雷康的公司日前宣布,他们已经研制出了一款全球最小的GPS导航信号接收器,大小仅相当于儿童的一个指甲盖。   雷康公司发言人介绍说,目前已有多家卫星导航设备生产商对微型接收器表现出了兴趣。今后,这种接收器将有可能被安 ...…

查看全部问答>

一种低成本的车载逆变电源

一种低成本的车载逆变电源   摘要:提出了一种低成本的方波逆变电源的基本原理及制作方法;介绍了驱动电路芯片SG3524和IR2110的使用;设计了驱动和保护电路;给出了输出电压波形的实验结果。  关键词:逆变器;自举电容;低成本 &nb ...…

查看全部问答>

失业了,我们该如何面对?

  “我被强制休假了”,刚从老家长途跋涉到工作城市、上了3天班的WQ,接到突如其来的消息称“公司要休假两个月”。“如果早些知道,我就在老家多待几天了,”听朋友在QQ上无奈地告知自己失业的同时,不禁感慨生活弄人。对他而言,一个陌生的城市 ...…

查看全部问答>

非常详细的模拟电路设计教程,共144页

第1章半导体二极管及其应用电路第2章半导体三极管及其放大电路及其分析方法第3章场效应管及其放大电路第4章负反馈放大电路第5章集成运算放大器本章重点:􀁺直接耦合放大电路及存在的主要问题􀁺典型差分放大电路的工作原理􀁺 ...…

查看全部问答>

5.0 的USB打印驱动实现过程(加精)

如T,想要实现USB打印驱动,有几个问题请教,估计做过的人在少数,请教一些方法也少走一些弯路 一,USB2.0的规范是不是要看透?据说这是基本,是不是可以选一部分或着重哪一部分? 二,针对不同类型的打印机是不是驱动有所不同,还是通用? 三 ...…

查看全部问答>

请教arm开发板的基本问题

请问arm开发板的国内生产商主要有哪有呢?国外呢? 在百度上搜到的都是代理商的。还有就是要在开发板上集成GPS,GSM模块什么的,如果不从代理商那购买,是可以直接跟厂家定制吗? …

查看全部问答>

七段电子表显示的文档

     急需七段电子表显示的文档,程序师用汇编语言写的,若有的话请发给我。感激不尽。[email=cwjczqsll@126.com][/email]…

查看全部问答>

bsp下的DLL无法生成!

现在我自己写的(EP9315)GIPO的驱动,添加到BSP当中后,编译是通过,就是不能生成DLL,但却弹出如下错误!Built: Jun 16 2004 15:09:27 Error: Could not find file \'D:\\WINCE500\\PBWorkspaces\\ep9315_wince\\RelDir\\ep93xx\\edb9307_1x\\..\\ ...…

查看全部问答>

EVC下串口程序,急!!!!

按照ZLG的WINCE书编写了一个串口测试程序,做打开串口,简单的接收发送数据 应该跟硬件驱动没有直接关系 但是现在有些问题: 1、编译成功后用EVC自带的模拟器仿真,总是COM1可以打开,COM2-COM6都是“无法按当前参数配置端口,请检查参数!” &n ...…

查看全部问答>

wince 320*240显示驱动开发

要在以前640*480基础上修改分辨率为320*240,ce镜像启动起来后,系统图标明显过大.但能全屏显示.这是哪里出了问题?…

查看全部问答>