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

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个回答

所属标签

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