近来用一块自己做的板子,用407zgt6板子实现显示功能,不能读取LCD的ID,用示波器测试观察发现在对LCD进行读写时,LCD的CS、C/D,RD,WR信号没有变化,也就是FSMC没有工作,LCD用的8位数据,PD11/FSMC_A16地址 命令数据选择。 。 主要部分程序如下,看看那位大神来指导一下 #define ST7789_REG *(__IO uint16_t*)(((uint32_t)0x60000000)) #define ST7789_RAM *(__IO uint16_t*)(((uint32_t)0x60020000)) SRAM_HandleTypeDef hsram1; static void MX_FSMC_Init(void) { FSMC_NORSRAM_TimingTypeDef Timing; FSMC_NORSRAM_TimingTypeDef ExtTiming; /**Perform the SRAM1 memory initialization sequence */ hsram1.Instance = FSMC_NORSRAM_DEVICE; hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; /*hsram1.Init */ hsram1.Init.NSBank = FSMC_NORSRAM_BANK1; hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_8; hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_ENABLE; hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; hsram1.Init.PageSize = FSMC_PAGE_SIZE_NONE; /*Timing */ Timing.AddressSetupTime = 15; Timing.AddressHoldTime = 15; Timing.DataSetupTime = 15; Timing.BusTurnAroundDuration = 0; Timing.CLKDivision = 0; Timing.DataLatency = 0; Timing.AccessMode = FSMC_ACCESS_MODE_A; /*ExtTiming */ ExtTiming.AddressSetupTime = 15; ExtTiming.AddressHoldTime = 15; ExtTiming.DataSetupTime = 15; ExtTiming.BusTurnAroundDuration = 0; ExtTiming.CLKDivision = 0; ExtTiming.DataLatency = 0; ExtTiming.AccessMode = FSMC_ACCESS_MODE_A; if(HAL_SRAM_Init(&hsram1, &Timing, &ExtTiming) != HAL_OK) { Error_Handler( ); } } 这是cube生成的fsmc初始化,俩便有些参数做过调整实验,也没有效果。 /* USER CODE BEGIN 4 */ void ST7789_WR_REG(vu16 regval) { regval = regval; ST7789_REG = regval; } void ST7789_WR_DATA(vu16 data) { data = data; ST7789_RAM = data; } uint8_t ST7789_RD_DATA(void) { vu8 ram; ram = ST7789_RAM; return ram; }
|