STM32驱动LCD实战

目录

01 驱动时序

02 FSMC外设配置

03 背光驱动

04 复位驱动

05 寄存器配置


前段时间写了《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手册。

代码开源地址:

https://github.com/strongercjd/STM32F207VCT6

点击查看本文所在的专辑,STM32F207教程

LMT028D手册、ST7789S手册、LMT028D的demo和ST7789S的demo等资料下载链接

百度云盘和谐比较严重,链接可能失效

文件下载:链接:https://pan.baidu.com/s/11yIEltB0OLoRlYWHpI6n8Q  提取码:w3s2

如果链接失效,请关注微信公众号,找到下载专区->博客附件,编号0011的下载资源,免费获得。

  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32驱动LCD是通过控制液晶屏上的像素点来实现显示文字或图像的功能。液晶屏的最小控制单位是八个相邻且排成一排的像素点,也就是说,一次要控制八个像素点的亮灭状态。具体的控制方法可以通过编写相应的驱动代码来实现。例如,可以使用TFTLCD(薄膜晶体管液晶显示器)来实现更高质量的图像显示。在STM32中,可以通过读取LCD的ID信息来验证编写的读写函数是否可行。具体的驱动代码可以参考\[1\]中的详细解释和示例代码。 #### 引用[.reference_title] - *1* [STM32单片机驱动LCD原理和驱动代码详解(附代码和工具软件)](https://blog.csdn.net/weixin_41231299/article/details/108714685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32驱动LCD原理](https://blog.csdn.net/Firefly_cjd/article/details/107041021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【STM32篇】驱动LCD显示屏](https://blog.csdn.net/we_long/article/details/131726373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongercjd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值