1、CC2530和STM32嵌入式接口技术开发6.1 STM32 LCD技术应用开发EducationSolutions目录ContentsInternet+显示器STM32 FSMC接口技术STM32 FSMC库函数ILI93xx LCD原理项目实践23:54/3显示器介绍液晶显示器OLED显示器显示器属于计算机的I/O设备,即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。常见的有CRT显示器、液晶显示器、LED点阵显示器及OLED显示器。23:54/4显示器的相关参数像素显示器尺寸分辨率点距色彩深度色域23:54/5FSMC介绍STM32F407或STM32F417系
2、列芯片都带有FSMC接口。FSMC即灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接,STM32F4的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存储器。SARMPSARMNANDNOR23:54/6FSMC连接框图STM32F4的FSMC将外部设备分为2类:NOR/PSRAM设备、NAND/PC卡设备。他们共用地址数据总线等信号,他们具有不同的CS以区分不同的设备,比如本项目用到的TFTLCD就是用的FSMC_NE4做片选,其实就是将TFTLCD当成SRAM来控制。23:54/7FSMC的存储地址分配及映射FSMC总共管理1GB空间
3、,拥有4个存储块(Bank)。FSMC存储块1(Bank1)被分为4个区,每个区管理64M字节空间,每个区都有独立的寄存器对所连接的存储器进行配置。Bank1的256M字节空间由28根地址线(HADDR27:0)寻址。23:54/8FSMC的读写操作FSMC在A模式下,读和写的时序时独立的。读的速度较慢,写的速度较快。在这种模式下很适合TFTLCD屏幕的操作。FSMC读时序FSMC写时序23:54/9STM32的FSMC的配置 FSMC_NORSRAMInit();/NOR SRam初始化函数 FSMC_NANDInit();/NAND Flash初始化函数 FSMC_PCCARDInit()
4、;/PC Card初始化函数FSMC初始化函数。void FSMC_NORSRAMCmd(uint32_t FSMC_Bank,FunctionalState NewState);/NOR SRam使能 void FSMC_NANDCmd(uint32_t FSMC_Bank,FunctionalState NewState);/NAND Flash使能 void FSMC_PCCARDCmd(FunctionalState NewState);/PC Card使能FSMC使能函数。FSMC的存储外设有很多,有NOR SRAM、NAND Flash、PC Card等。但在使用的过程中通常用到哪
5、种存储器就配置哪种存储器的函数从而初始化外设。23:54/10STM32的FSMC的基本配置参数typedefstructuint32_t FSMC_Bank;/FSMC的Bank的标号区号配置参数uint32_t FSMC_DataAddressMux;/设置地址总线与数据总线是否复用uint32_t FSMC_MemoryType;/设置存储器的类型uint32_t FSMC_MemoryDataWidth;/设置存储器的数据宽度,TFTLCD屏幕时16位数据宽度uint32_t FSMC_BurstAccessMode;/设置是否支持突发访问模式,只支持同步类型的存储器uint32_t
6、FSMC_AsynchronousWait;/设置是否使能在同步传输时的等待信号uint32_t FSMC_WaitSignalPolarity;/设置等待信号的极性uint32_t FSMC_WrapMode;/设置是否支持对齐的突发模式 uint32_t FSMC_WaitSignalActive;/配置等待信号在等待前有效还是等待期间有效uint32_t FSMC_WriteOperation;/设置是否写使能uint32_t FSMC_WaitSignal;/设置是否使能等待状态插入uint32_t FSMC_ExtendedMode;/设置是否使能扩展模式uint32_t FSMC_
7、WriteBurst;/设置是否使能写突发操作/当不使用扩展模式时,本参数用于配置读写时序,否则用于配置读时序FSMC_NORSRAMTimingInitTypeDef*FSMC_ReadWriteTimingStruct;/当使用扩展模式时,本参数用于配置写时序FSMC_NORSRAMTimingInitTypeDef*FSMC_WriteTimingStruct;FSMC_NORSRAMInitTypeDef;23:54/11STM32的FSMC的时序配置参数typedefstructuint32_t FSMC_AddressSetupTime;/地址建立时间,0-0 xF 个 HCLK
8、周期uint32_t FSMC_AddressHoldTime;/地址保持时间,0-0 xF 个 HCLK 周期uint32_t FSMC_DataSetupTime;/数据建立时间,0-0 xF 个 HCLK 周期uint32_t FSMC_BusTurnAroundDuration;/总线转换周期,0-0 xF 个 HCLK 周期uint32_t FSMC_CLKDivision;/时钟分频因子,1-0 xF,若控制异步存储器,本参数无效uint32_t FSMC_DataLatency;/数据延迟时间,若控制异步存储器,本参数无效uint32_t FSMC_AccessMode;/设置访
9、问模式FSMC_NORSRAMTimingInitTypeDef;/FSMC读/写时钟配置FSMC的在配置时由于驱动TFTLCD屏幕使用的是A模式,即异步模式。所以FSMC_NORSRAMTimingInitTypeDef结构体需要根据读时序和写时序分别配置两次。23:54/12ILI93xx LCD原理ILI93XX控制器内部结构23:54/13ILI93xx LCD原理液晶引出信号线说明:信号线ILI9341对应信号线说明FSMC_D15:0D15:0数据信号线LCD_CSCSX片选信号,低电平有效FSMC_NWEWRX写数据信号,低电平有效FSMC_NOERDX读数据信号,低电平有效LC
10、D_BL-背光信号,低电平点亮LCD_RSD/CX数据/命令信号,高电平时,D15:0表示的是数据(RGB像素数据或命令数据),低电平时 D15:0表示控制命令RSTRESX复位信号,低电平有效23:54/14ILI93xx LCD原理在STM32的使用过程中,通常使用STM32的片上外设FSMC对8080端口的时序进行模拟。23:54/15项目场景可视对讲系统是一套现代化的小区住宅服务措施,提供访客与住户之间双向可视通话,达到图像、语音双重识别从而增加安全可靠性,同时节省大量的时间,提高了工作效率。它可提高住宅的整体管理和服务水平,创造安全社区居住环境,因此逐步成为小康住宅不可缺少的配套设备
11、。23:54/16任务目标楼宇智能设备企业要设计一款可视对讲系统设备,通过门口主机安装的摄像头对门口图像在室内可视分机显示屏显示,要求使用STM32处理器的FSMC接口驱动液晶显示屏。23:54/17项目分析TFTLCD屏幕在STM32上的使用主要是需要弄清楚STM32能够驱动TFTLCD屏幕的原理,STM32的FSMC外设可以驱动SARM这种存储其,这种存储其的驱动与TFTLCD屏的驱动方式类似,因此可以使用SARM来驱动LCD屏,其中LCD屏幕的数据总线就是用FSMC的数据总线,而数据和指令线电平的切换则有FSMC的地址总线来完成。23:54/18项目程序逻辑框图程序启动首先初始化LED和
12、LCD的背光,初始化完成以后初始化FSMC和LCD。在准备工作完成后开启LCD背光清屏和LCD屏幕的一系列操作,并在LCD上显示信息。23:54/19项目实现void fsmc_init(void)GPIO_InitTypeDef GPIO_InitStructure;FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef readWriteTiming;FSMC_NORSRAMTimingInitTypeDef writeTiming;RCC_AHB3PeriphClockCmd(RCC_
13、AHB3Periph_FSMC,ENABLE);/使能FSMC时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE,ENABLE);/使能GPIO时钟 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_12|GPIO_Pin_7;/选中相应的引脚 GPIO_InitStructure.GP
14、IO_Mode=GPIO_Mode_AF;/复用模式 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;/输出速度 GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;/推挽输出 GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;/无上下拉 GPIO_Init(GPIOD,&GPIO_InitStructure);/按上述参数初始化(PD)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_P
15、in_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;/选中相应的引脚 GPIO_Init(GPIOE,&GPIO_InitStructure);/按上述参数初始化(PE)lfsmc初始化23:54/20项目实现/复用配置,将下列引脚复用为FSMC GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource7,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_P
16、inSource4,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);GPIO_PinA
17、FConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO
18、_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);GPIO_PinAFConfig(GPI
19、OE,GPIO_PinSource15,GPIO_AF_FSMC);lfsmc初始化23:54/21项目实现/写配置 readWriteTiming.FSMC_AddressSetupTime=0XF;/地址建立时间为16个HCLK 1/168M=6ns*16=96ns readWriteTiming.FSMC_AddressHoldTime=0;/地址保持时间 模式A未用到 readWriteTiming.FSMC_DataSetupTime=60;/数据保持时间为60个HCLK=6*60=360ns readWriteTiming.FSMC_BusTurnAroundDuration=0
20、x00;readWriteTiming.FSMC_CLKDivision=0 x00;readWriteTiming.FSMC_DataLatency=0 x00;readWriteTiming.FSMC_AccessMode=FSMC_AccessMode_A;/模式A writeTiming.FSMC_AddressSetupTime=15;/地址建立时间为9个HCLK=54ns writeTiming.FSMC_AddressHoldTime=0;/地址保持时间 writeTiming.FSMC_DataSetupTime=15;/数据保持时间为6ns*9个HCLK=54ns write
21、Timing.FSMC_BusTurnAroundDuration=0 x00;writeTiming.FSMC_CLKDivision=0 x00;writeTiming.FSMC_DataLatency=0 x00;writeTiming.FSMC_AccessMode=FSMC_AccessMode_A;/模式Alfsmc初始化23:54/22项目实现/配置FSMC FSMC_NORSRAMInitStructure.FSMC_Bank=FSMC_Bank1_NORSRAM1;/使用NE1 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux=FSM
22、C_DataAddressMux_Disable;/不复用数据地址 FSMC_NORSRAMInitStructure.FSMC_MemoryType=FSMC_MemoryType_SRAM;/FSMC_MemoryType_SRAM;/SRAM FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth=FSMC_MemoryDataWidth_16b;/存储器宽度16bit FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode=FSMC_BurstAccessMode_Disable;/FSMC_BurstAcce
23、ssMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity=FSMC_WaitSignalPolarity_Low;FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;FSMC_NORSRAMInitStructure.FSMC_WrapMode=FSMC_WrapMode_Disable;FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive=FSMC_WaitSignalActi
24、ve_BeforeWaitState;FSMC_NORSRAMInitStructure.FSMC_WriteOperation=FSMC_WriteOperation_Enable;/存储器写使能 FSMC_NORSRAMInitStructure.FSMC_WaitSignal=FSMC_WaitSignal_Disable;FSMC_NORSRAMInitStructure.FSMC_ExtendedMode=FSMC_ExtendedMode_Enable;/读写使用不同时序 FSMC_NORSRAMInitStructure.FSMC_WriteBurst=FSMC_WriteBur
25、st_Disable;FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct=&readWriteTiming;/读时序 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct=&writeTiming;/写时序 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);/初始化fsmc配置 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1,ENABLE);/使能bank1,sram1lfsmc初始化23:54/23项目思考FSMC支持哪些存储的拓展?FSMC有几个BANK,每个BANK又是如何分配的?FSMC如何实现对TFT屏幕的控制?