芯达STM32入门系列教程

上传人:z**** 文档编号:122672958 上传时间:2022-07-21 格式:DOC 页数:6 大小:80KB
收藏 版权申诉 举报 下载
芯达STM32入门系列教程_第1页
第1页 / 共6页
芯达STM32入门系列教程_第2页
第2页 / 共6页
芯达STM32入门系列教程_第3页
第3页 / 共6页
资源描述:

《芯达STM32入门系列教程》由会员分享,可在线阅读,更多相关《芯达STM32入门系列教程(6页珍藏版)》请在装配图网上搜索。

1、、哪里都是抑的舞台芯达SFK32令玄紘STM32入门系列教程点亮LCD液晶屏Revision0.01(2010-04-28)原想把本期点亮LCD液晶屏教程放在GPIO编程之后,以提高大家的兴趣,但考虑到可能网友学习STM32,是想更多地了解STM32内部工作机制,因此在之前的教程,我们先介绍了串口、外部中断、定时器等最基本的外设模块,有了这些基础,相信您再来学习LCD液晶,已经很轻松了。我们使用的是芯达STM32配套的2.4寸TFT液晶触摸屏,它是山寨手机上的触摸液晶屏,内部驱动IC为ILI9325。我们操作LCD,实际上就是在操作ILI9325。有关该芯片的资料,请参考如下两个网址:ILI9

2、325英文datasheetILI9325指令说明(中文):考虑到触摸”涉及到太多的原理,因此把触摸屏单独列出一期教程详细讲解。这里只讲述如何去点亮LCD液晶屏,如果您看完本期教程,能理解LCD驱动过程,那么笔者心满意足。要驱动LCD,分两个部分讲解:1、CPU内部模块支持的LCD接口(这里使用FSMC模块)2、LCD控制电路、STM32的FSMC原理如果是单片机,相信大家再熟悉不过了,直接拿P0或者P1口用作LCD数据总线,再另外拿出几个10口用作控制信号线一一一个LCD控制电路完成了。STM32相对于单片机,有啥过人之处呢?对于STM32系列的CPU来说,有两种方法给LCD总线赋值。第一个

3、方法,就是给对应的GPI0x_0DR寄存器赋值一一这与单片机一样,单片机也是给P0-P3寄存器赋值,使得信号能从对应的I0端口输出。而STM32的另一种方法就是使用FSMC。FSMC全称静态存储器控制器”使用FSMC控制器后,我们可以把FSMC提供的FSMC_A25:0作为地址线,而把FSMC提供的FSMC_D15:0作为数据总线。1、FSMC包括哪几个部分?FSMC包含以下四个模块:(1)AHB接口(包含FSMC配置寄存器)(2)NOR闪存和PSRAM控制器(3)NAND闪存和PC卡控制器(4)外部设备接口要注意的是,FSMC可以请求AHB进行数据宽度的操作。如果AHB操作的数据宽度大于外部

4、设备(NOR或NAND或LCD)的宽度,此时FSMC将AHB操作分割成几个连续的较小的数据宽度,以适应外部设备的数据宽度。2、FSMC对外部设备的地址映像AcidressBanksSupportedmemoryType6000COMhSFFFFFFFh7000axx)h7FFFFFFFh30000000tlSFFFFFHFh9000OOOOh9FFFFFFFn从上图可以看出,FSMC对外部设备的地址映像从0x60000000开始,到0x9FFFFFFF结束,共分4个地址块,每个地址块256M字节。可以看出,每个地址块又分为4个分地址块,大小64M。对NOR的地址映像来说,我们可以通过选择HAD

5、DR27:26来确定当前使用的是哪个64M的分HADDR27:261)选择的存储块00存储块4NOR/PSRAM101存储块1NOR/PSRAM210存储块彳NOR/PSRAM311存储块1NOR/PSRAM4这里的HADDR是需要转换到外部设备的内部AHB地址线,每个地址对应一个字节单元。因此,若外部设备的地址宽度是8位的,则HADDR25:0与STM32的CPU弓I脚FSMC_A25:0一对应,最大可以访问64M字节的空间。若外部设备的地址宽度是16位的,则是HADDR25:1与STM32的CPU引脚FSMC_A24:0对应。在应用的时候,可以将FSMC_A总线连接到存储器或其他外设的地址

6、总线弓弓脚上。二、LCD控制电路设计i信号线的连接STM32F10xxxFSMC有四个不同的banks(每个64M字节)可支持NOR以及其他类似的存储器。这些外部设备的地址线,数据先和控制线是共享的。每个设备的访问通过片选来决定,而每次只能访问一个设备。FSMC提供了所有的LCD控制器的信号:FSMC_D16:016bit的数据总线FSMCNEx:分配给NOR的256M,再分为4个区,每个区用来分配一个外设,这四个外设的片选分为是NE1-NE4,对应的弓I脚为:PD7NE1,PG9NE2,PG10-NE3,PG12NE4FSMCNOE:输出使能,连接LCD的RD脚。FSMCNWE:写使能,连接

7、LCD的RW脚。FSMCAx:用在LCD显示RAM和寄存器之间进行选择的地址线,即该线用于选择LCD的RS脚,该线可用地址线的任意一根线,范围:FSMC_A25:0。注:RS=0时,表示读写寄存器;RS=1表示读写数据RAM。举例1:选择NOR的第一个存储区,并且使用FSMC_A16来控制LCD的RS引脚,则我们访问LCD显示RAM的基址为0x60020000,访问LCD寄存器的地址为:0x60000000。举例2:选择NOR的第四个存储区,使用FSMC_A0控制LCD的RS脚,则访问LCD显示RAM的基址为0x60000002,访问LCD寄存器的地址为:0x60000000。实际上,可用于L

8、CD接口的NOR存储块信号如下:FSMC_D15:0,连16bit数据线FSMC_NE1,连片选:只有bank1可用FSMCNOE:输出使能FSMCNEW:FSMC写使能FSMCAx:连接RS,可用范围FSMC_A23:162、时序冋题一般使用模式B来做LCD的接口控制,不适用外扩模式。并且读写操作的时序一样。此种情况下,我们需要使用三个参数:ADDSET,DATAST,ADDHOLD。这三个参数在位域FSMCTCRx中设置当HCLK的频率是72MHZ,使用模式B,则有如下时序:地址建立时间:0x1地址保持时间:0x0数据建立时间:0x5好像有点理论化,呵呵,我们来编程看看就理解了。、LCD驱

9、动编写请大家在阅读此部分之前,务必先阅读LCD的驱动IC:ILI9325。查看在本期教程开始,我们给出的两个网址即可。我们的思路是:既然想使用STM32的FSMC模块,就首先要使能它的时钟,并初始化这个模块。然后初始化LCD启动配置,这时候,我们才可以编写用户程序,来控制LCD显示各种字符、图形。根据这个思路,我们调用函数:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);来使能FSMC模块所使用的时钟。呵呵,STM32固件库果然给我们提供了超方便的库函数,我们无需了解任何东西,只要知道调用这个函数即可。项目开发进度大大加快。下面配置FSMC初始

10、化部分,采用的函数是FSMC_LCD_Init();,来看下它的实现吧!voidFSMC_LCD_Init(void)FSMC_NORSRAMInitTypeDefFSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDefFSMC_TimingInitStructure;FSMC_TimingInitStructure.FSMC_AddressSetupTime=0x02;FSMC_TimingInitStructure.FSMC_AddressHoldTime=0x00;FSMC_TimingInitStructure.FSMC_DataS

11、etupTime=0x05;FSMC_TimingInitStructure.FSMC_BusTurnAroundDuration=0x00;FSMC_TimingInitStructure.FSMC_CLKDivision=0x00;FSMC_TimingInitStructure.FSMC_DataLatency=0x00;FSMC_TimingInitStructure.FSMC_AccessMode=FSMC_AccessMode_B;Bank=FSMC_Bank1_NORSRAM1;DataAddressMux=FSMC_DataAddressMux_Disable;MemoryTy

12、pe=FSMC_MemoryType_NOR;MemoryDataWidth=FSMC_MemoryDataWidth_16b;BurstAccessMode=FSMC_BurstAccessMode_Disable;WaitSignalPolarity=FSMC_WaitSignalPolarity_Low;WrapMode=FSMC_WrapMode_Disable;WaitSignalActive=FSMC_WaitSignalActive_BeforeWaitState;WriteOperation=FSMC_WriteOperation_Enable;WaitSignal=FSMC_

13、WaitSignal_Disable;ExtendedMode=FSMC_ExtendedMode_Disable;WriteBurst=FSMC_WriteBurst_Disable;ReadWriteTimingStruct=&FSMC_TimingInitStructure;WriteTimingStruct=&FSMC_TimingInitStructure;FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1,ENABLE);上面的函数实现字体是小五,如果需要查看完整FSMC-

14、TFT-LCD例程,请查看芯达STM32的光盘。此部分可作为一个模板,复制到您的项目文件中直接使用。实际上,控制LCD关键在于下面的初始化序列:LCD_WriteReg(0x00E3,0x3008);/Setu16ernaltimingLCD_WriteReg(0x00E7,0x0012);/Setu16ernaltimingLCD_WriteReg(0x00EF,0x1231);/Setu16ernaltimingLCD_WriteReg(0x0001,0x0100);/setSSandSMbitLCD_WriteReg(0x0002,0x0700);/set1lineinversionLC

15、D_WriteReg(0x0003,0x1038);/setGRAMwritedirectionandBGR=1.LCD_WriteReg(0x0004,0x0000);/ResizeregisterLCD_WriteReg(0x0008,0x020E);/setthebackporchandfrontporchLCD_WriteReg(0x0009,0x0000);/setnon-displayarearefreshcycleISC3:0LCD_WriteReg(0x000A,0x0000);/FMARKfunctionLCD_WriteReg(0x000C,0x0000);/RGBu16e

16、rfacesettingLCD_WriteReg(0x000D,0x0000);/FramemarkerPositionLCD_WriteReg(0x000F,0x0000);/RGBu16erfacepolarity/*PowerOnsequenceLCD_WriteReg(0x0010,0x0000);/SAP,BT3:0,AP,DSTB,SLP,STBLCD_WriteReg(0x0011,0x0007);/DC12:0,DC02:0,VC2:0LCD_WriteReg(0x0012,0x0000);/VREG1OUTvoltageLCD_WriteReg(0x0013,0x0000);

17、/VDV4:0forVCOMamplitudeDelay(0XAFFFF);/Dis-chargecapacitorpowervoltageLCD_WriteReg(0x0010,0x1290);/SAP,BT3:0,AP,DSTB,SLP,STBLCD_WriteReg(0x0011,0x0221);/R11h=0x0221atVCI=3.3V,DC12:0,DC02:0,VC2:0Delay(0XAFFFF);/Delay50msLCD_WriteReg(0x0012,0x001A);/Externalreferencevoltage=Vci;Delay(0XAFFFF);/Delay50

18、msLCD_WriteReg(0x0013,0x1600);/R13=0F00whenR12=009E;VDV4:0forVCOMamplitudeLCD_WriteReg(0x0029,0x0022);/R29=0019whenR12=009E;VCM5:0forVCOMHLCD_WriteReg(0x002B,0x000A);/FrameRateDelay(0XAFFFF);/Delay50msLCD_WriteReg(0x0020,0x0000);/GRAMhorizontalAddressLCD_WriteReg(0x0021,0x0000);/GRAMVerticalAddress/

19、AdjusttheGammaCurve/LCD_WriteReg(0x0030,0x0000);LCD_WriteReg(0x0031,0x0302);LCD_WriteReg(0x0032,0x0202);LCD_WriteReg(0x0035,0x0103);LCD_WriteReg(0x0036,0x080C);LCD_WriteReg(0x0037,0x0505);LCD_WriteReg(0x0038,0x0504);LCD_WriteReg(0x0039,0x0707);LCD_WriteReg(0x003C,0x0301);LCD_WriteReg(0x003D,0x1008);

20、/SetGRAMarea/LCD_WriteReg(0x0050,0x0000);/HorizontalGRAMStartAddressLCD_WriteReg(0x0051,0x00EF);/HorizontalGRAMEndAddressLCD_WriteReg(0x0052,0x0000);/VerticalGRAMStartAddressLCD_WriteReg(0x0053,0x013F);/VerticalGRAMStartAddressLCD_WriteReg(0x0060,0x2700);/GateScanLineLCD_WriteReg(0x0061,0x0001);/NDL

21、,VLE,REVLCD_WriteReg(0x006A,0x0000);/setscrollingline/PartialDisplayControl/LCD_WriteReg(0x0080,0x0000);LCD_WriteReg(0x0081,0x0000);LCD_WriteReg(0x0082,0x0000);LCD_WriteReg(0x0083,0x0000);LCD_WriteReg(0x0084,0x0000);LCD_WriteReg(0x0085,0x0000);/PanelControl/LCD_WriteReg(0x0090,0x0010);LCD_WriteReg(0

22、x0092,0x0600);LCD_WriteReg(0x0093,0x0003);LCD_WriteReg(0x0095,0x0110);LCD_WriteReg(0x0097,0x0000);LCD_WriteReg(0x0098,0x0000);LCD_WriteReg(0x0007,0x0133);/262KcoloranddisplayON以上初始化序列代码约有55个参数需要配置,每个参数为何配置成这样,由于篇幅有限,这里不一一讲述,详情请参考,ILI9325的中文指令说明。实际上,如果您时间有限,可以直接copy这部分的内容,只需要编写具体的用户实现部分。当然,在初始化之前,我们要

23、注意LCD的复位操作。对于每个LCD模块来说,想初始化之前,必须先复位,ILI9325的复位,是低电平有效。芯达STM32开发板根据版本的不同,对复位的操作也不一样。其中一个版本的复位直接采用STM32的CPU复位,另一个版本的复位采用PC1引脚。两者都是可以的。经过以上步骤初始化之后,现在LCD可以显示图片和字符了。为了测试,我们分别编写了字符和图片的测试文件,您可以参考。如果您对本教程还有不理解的地方,请直接到我们的网站:ARM技术交流网,进行讨论。我们将会尽快给您做出答复。附:福州芯达工作室简介福州芯达工作室成立于2009年9月,我们专注于嵌入式产品的研发与推广,目前芯达产品涉及ARM9系列、STM32系列。芯达团队成员均硕士研究生毕业,具有一定研发实力。我们的愿景在于把福州芯达打造成国内一流的嵌入式品牌。或许我们现在做的还不够,但是我们真的努力在做,希望通过我们的努力,能够在您学习和使用芯达产品的过程中带来或多或少的帮助。这是芯达为了配合STM32开发板而推出的入门系列教程。如果您在看了我们的教程后,理清了思路,我们都会倍感欣慰!让我们一起学习,共同进步,在征服嵌入式领域的道路上风雨同行!官方网站:官方淘宝:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!