你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32驱动LCD实战

[复制链接]
STMCU 发布时间:2020-9-7 15:16
01 驱动时序

我们通常说的MCU-LCD接口,就是8080接口。

下面是LMT028DN给出的8080模式总线时序

1.png


下面是总线时序中的参数
2.png


时序参数

  • 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外设配置代码

  1. readWriteTiming.FSMC_AddressSetupTime = 0x02;   //地址建立时间(ADDSET)为2个HCLK 2*1/120M=16ns
  2. readWriteTiming.FSMC_AddressHoldTime = 0x02;   //地址保持时间(ADDHLD),16ns  
  3. readWriteTiming.FSMC_DataSetupTime = 0x06;     //数据建立时间,50ns
  4. readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;//总线恢复时间
  5. readWriteTiming.FSMC_CLKDivision = 0x00;// 时钟分频因子
  6. readWriteTiming.FSMC_DataLatency = 0x00;//数据产生时间
  7. readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;   //模式A

  8. FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//  这里我们使用NE1 ,也就对应BTCR[6],[7]。
  9. FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;// 不复用数据地址
  10. FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;
  11. FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//存储器数据宽度为8bit   
  12. FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
  13. FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;  
  14. FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  15. FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  16. FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  17. FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;//  存储器写使能
  18. FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  19. FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;// 读写使用相同的时序
  20. FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  21. FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;//读写时序
  22. FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;//写时序
复制代码

读写接口代码:

结构体定义,这里利用了结构体地址递增特性

  1. typedef struct
  2. {
  3.   uint8_t LCD_CMD;//用于LCD命令操作
  4.   uint8_t LCD_DATA;//用于LCD数据操作
  5. } LCD_TypeDef;
  6. #define LCD_BASE        ((uint32_t)(0x60000000 | 0x0000FFFF))
  7. #define LCD             ((LCD_TypeDef *) LCD_BASE)
复制代码

读写接口
  1. void LMT028_Write_Cmd ( uint8_t usCmd )
  2. {
  3.   LCD->LCD_CMD=usCmd;  
  4. }
  5. void LMT028_Write_Data ( uint8_t usData )
  6. {
  7.   LCD->LCD_DATA = usData;
  8. }
复制代码


也可以简单明了的如下写法


  1. #define      FSMC_Addr_LMT028_CMD         ( ( uint32_t ) 0x60000000 )      
  2. #define      FSMC_Addr_LMT028_DATA        ( ( uint32_t ) 0x60010000 )

  3. void LMT028_Write_Cmd ( uint8_t usCmd )
  4. {
  5. *( (uint32_t  * )FSMC_Addr_LMT028_CMD)=usCmd;  
  6. }
  7. void LMT028_Write_Data ( uint8_t usData )
  8. {
  9.   *( (uint32_t  * )FSMC_Addr_LMT028_DATA) = usData;
  10. }
复制代码
03 背光驱动


LED背光驱动,根据高电平的占空比决定的,共有32个亮度等级,使用PWM驱动最为合适,通过调节占空比,调节亮度。

                                                               3.png

04 复位驱动


复位脚大于10ms的低电平,然后最大170ms的高电平

4.png


05 寄存器配置


寄存器配置还是要先参考厂家给的示例demo,根据LMT028手册进行修改,LMT028手册只有重要的寄存器说明,详细的寄存器说明需要参考ST7789手册。



1 收藏 3 评论0 发布时间:2020-9-7 15:16

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版