完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前段时间写了《STM32驱动LCD原理》和《STM32的FSMC外设简介》两篇文章,本文将对STM32驱动LCD进行实战应用。LCD是深圳市拓普微科技开发有限公司的LMT028DN,分辨率是320*240,大小2.8寸,颜色65K的彩色屏,采用的是ST7789s液晶控制IC。颜色模式是565。
01 驱动时序 我们通常说的MCU-LCD接口,就是8080接口,8080接口的详细介绍请看《STM32驱动LCD原理》。 下面是LMT028DN给出的8080模式总线时序 下面是总线时序中的参数 时序参数 Tast-》地址设置时间 Taht-》地址保持时间(写) Tchw-》芯片选择高脉冲宽度 Tcs-》芯片选择设置时间(写) Tcsf-》芯片选择等待时间(写) Twc-》写入周期 Twrh-》控制脉冲高电平时间 Twrl-》控制脉冲低电平时间 Tdst-》数据设置时间 Tdht-》数据保持时间 根据FSMC的配置和时序图,我们需要的3个时序参数是 3个重要参数 1、地址建立时间:5ns 2、地址保持时间:13ns 3、数据建立时间:13ns 以上数据均是满足时序图的最小时间,实际应用中,不能设置成最小值,也不能大于最大值(如果有的话),以实际应用为主,如果设置时间太快,反而不稳定。 因为我们把LCD使用8080接口驱动SRAM的方式,所以可以选择FSMC的模式1和模式A,但是/RD的切换,也就是FSMC的NOE的切换,所以只能选择模式A,观察时序图,读写时序一致,所以可以选择读写一致的配置。 02 FSMC外设配置 FSMC外设配置代码,具体FSMC外设解析请看《STM32的FSMC外设简介》 readWriteTiming.FSMC_AddressSetupTime = 0x02; //地址建立时间(ADDSET)为2个HCLK 2*1/120M=16ns readWriteTiming.FSMC_AddressHoldTime = 0x02; //地址保持时间(ADDHLD),16ns readWriteTiming.FSMC_DataSetupTime = 0x06; //数据建立时间,50ns readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;//总线恢复时间 readWriteTiming.FSMC_CLKDivision = 0x00;// 时钟分频因子 readWriteTiming.FSMC_DataLatency = 0x00;//数据产生时间 readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;// 这里我们使用NE1 ,也就对应BTCR[6],[7]。 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;// 不复用数据地址 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//存储器数据宽度为8bit FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;// 存储器写使能 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;// 读写使用相同的时序 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;//读写时序 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;//写时序 读写接口代码: 结构体定义,这里利用了结构体地址递增特性 typedef struct { uint8_t LCD_CMD;//用于LCD命令操作 uint8_t LCD_DATA;//用于LCD数据操作 } LCD_TypeDef; #define LCD_BASE ((uint32_t)(0x60000000 | 0x0000FFFF)) #define LCD ((LCD_TypeDef *) LCD_BAS 读写接口 void LMT028_Write_Cmd ( uint8_t usCmd ) { LCD-》LCD_CMD=usCmd; } void LMT028_Write_Data ( uint8_t usData ) { LCD-》LCD_DATA = usData; } 也可以简单明了的如下写法 #define FSMC_Addr_LMT028_CMD ( ( uint32_t ) 0x60000000 ) #define FSMC_Addr_LMT028_DATA ( ( uint32_t ) 0x60010000 ) void LMT028_Write_Cmd ( uint8_t usCmd ) { *( (uint32_t * )FSMC_Addr_LMT028_CMD)=usCmd; } void LMT028_Write_Data ( uint8_t usData ) { *( (uint32_t * )FSMC_Addr_LMT028_DATA) = usData; } 03 背光驱动 LED背光驱动,根据高电平的占空比决定的,共有32个亮度等级,使用PWM驱动最为合适,通过调节占空比,调节亮度。 04 复位驱动 复位脚大于10ms的低电平,然后最大170ms的高电平 05 寄存器配置 寄存器配置还是要先参考厂家给的示例demo,根据LMT028手册进行修改,LMT028手册只有重要的寄存器说明,详细的寄存器说明需要参考ST7789手册。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
2013 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1795 浏览 1 评论
1254 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
830 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1818 浏览 2 评论
2049浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
954浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
348浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
692浏览 3评论
674浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-3-10 23:22 , Processed in 0.876838 second(s), Total 44, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191