STM32CubeMX之FSMC驱动TFTLCD

TFTLCD简介

LCD为4.3 TFTLCD
本实验参考正点原子《STM32F1开发指南(精英版)-HAL库版本_V1.0》

FSMC简介

本实验参考正点原子《STM32F1开发指南(精英版)-HAL库版本_V1.0》

STM32CubeMX配置FSMC

在这里插入图片描述

LCD的背光引脚配置

使用PB0引脚,高电平点亮背光

工程代码解析

FSMC初始化

SRAM_HandleTypeDef hsram4;

/* FSMC initialization function */
void MX_FSMC_Init(void)
{
  FSMC_NORSRAM_TimingTypeDef Timing = {0};
  FSMC_NORSRAM_TimingTypeDef ExtTiming = {0};

  /** Perform the SRAM4 memory initialization sequence
  */
  hsram4.Instance = FSMC_NORSRAM_DEVICE;
  hsram4.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram4.Init */
  hsram4.Init.NSBank = FSMC_NORSRAM_BANK4;//使用 NE4
  hsram4.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;//地址/数据线不复用
  hsram4.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;//使用SRAM驱动来驱动LCD
  hsram4.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;//16 位数据宽度
  hsram4.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;//是否使能突发访问,仅对同步突发存储器有效,此处未用到
  hsram4.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;//等待信号的极性,仅在突发模式访问下有用
  hsram4.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
  hsram4.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;//存储器是在等待周期之前的一个时钟周期还是等待周期期间使能 NWAIT
  hsram4.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;//存储器写使能
  hsram4.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;//等待使能位,此处未用到
  hsram4.Init.ExtendedMode = FSMC_EXTENDED_MODE_ENABLE;//读写使用不同的时序
  hsram4.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;//是否使能同步传输模式下的等待信号,此处未用到
  hsram4.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;//禁止突发写
  /* Timing */
  Timing.AddressSetupTime = 6;//地址建立时间(ADDSET)为 7 个 HCLK 13.8ns*7=96.6ns
  Timing.AddressHoldTime = 15;
  Timing.DataSetupTime = 26;//数据保存时间为 27 个 HCLK  =13.8*27=372.6ns
  Timing.BusTurnAroundDuration = 0;//总线周转阶段持续时间为 0,
  Timing.CLKDivision = 16;
  Timing.DataLatency = 17;
  Timing.AccessMode = FSMC_ACCESS_MODE_A;
  /* ExtTiming */
  ExtTiming.AddressSetupTime = 3;//地址建立时间(ADDSET)为 4 个 HCLK =55.2ns
  ExtTiming.AddressHoldTime = 15;
  ExtTiming.DataSetupTime = 6;//数据保存时间为 13.8ns*7 个 HCLK=96.6ns
  ExtTiming.BusTurnAroundDuration = 0;//总线周转阶段持续时间为 0,
  ExtTiming.CLKDivision = 16;
  ExtTiming.DataLatency = 17;
  ExtTiming.AccessMode = FSMC_ACCESS_MODE_A;

  if (HAL_SRAM_Init(&hsram4, &Timing, &ExtTiming) != HAL_OK)
  {
    Error_Handler( );
  }

  /** Disconnect NADV
  */

  __HAL_AFIO_FSMCNADV_DISCONNECTED();

}

注:这里的读时序配置(Timing)、写时序配置(ExtTiming )可以根据LCD的读写时序进行配置
LCD初始化

void LCD_Init(void)
{ 	  		
	HAL_Delay(50); // delay 50 ms 	
  /*读LCD-ID*/
	LCD_WR_REG(0XDA00);	
	lcddev.id=LCD_RD_DATA();		//读回0X00	 
	LCD_WR_REG(0XDB00);	
	lcddev.id=LCD_RD_DATA();		//读回0X80
	lcddev.id<<=8;	
	LCD_WR_REG(0XDC00);	
	lcddev.id|=LCD_RD_DATA();		//读回0X00		
	if(lcddev.id==0x8000)lcddev.id=0x5510;//NT35510读回的ID是8000H,为方便区分,我们强制设置为5510
 
  if(lcddev.id==0x5510)
	{	
	    ...
		LCD_WR_REG(0x1100);
		delay_us(120);
		LCD_WR_REG(0x2900);  
	}
	LCD_Display_Dir(0);		//默认为竖屏
    HAL_GPIO_WritePin(GPIOB, LCD_BL_PIN_Pin, GPIO_PIN_SET); /*开LCD背光*/
	LCD_Clear(WHITE);
}  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值