最近入手了ILI9481这个屏幕, 可以驱动SPI, MCU 8位和16位, 因此研究了一下8位MCU的驱动
区别在于
1, FSCM里面要配置为8位
FSMC_NORSRAM_TimingTypeDef Timing = {0};
FSMC_NORSRAM_TimingTypeDef ExtTiming = {0};
/** 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_16;
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 = 8;
Timing.AddressHoldTime = 0;
Timing.DataSetupTime = 8;
Timing.BusTurnAroundDuration = 0;
Timing.AccessMode = FSMC_ACCESS_MODE_A;
/* ExtTiming */
ExtTiming.AddressSetupTime = 8;
ExtTiming.AddressHoldTime = 0;
ExtTiming.DataSetupTime =8;
ExtTiming.BusTurnAroundDuration = 0;
ExtTiming.AccessMode = FSMC_ACCESS_MODE_A;
if (HAL_SRAM_Init(&hsram1, &Timing, &ExtTiming) != HAL_OK)
{
Error_Handler( );
}
2 写入颜色的适合,要分2次刷新
// 写颜色
void driver_LCD_ILI9481_write_color(uint16_t value)
{
#if USE_8080_16BIT
FSMC_LCD->RAM = value;
#else
FSMC_LCD->RAM = value>>8;
FSMC_LCD->RAM = value&0xff;
#endif
}
FSMC的刷新速度和配置的时序和分频有关, 可以尝试改动
/* Timing */
Timing.AddressSetupTime = 8;
Timing.AddressHoldTime = 0;
Timing.DataSetupTime = 8;
Timing.BusTurnAroundDuration = 0;
Timing.AccessMode = FSMC_ACCESS_MODE_A;
/* ExtTiming */
ExtTiming.AddressSetupTime = 8;
ExtTiming.AddressHoldTime = 0;
ExtTiming.DataSetupTime =8;
ExtTiming.BusTurnAroundDuration = 0;
ExtTiming.AccessMode = FSMC_ACCESS_MODE_A;
if (HAL_SRAM_Init(&hsram1, &Timing, &ExtTiming) != HAL_OK)
{
Error_Handler( );
}
下载地址: 包括了3寸S6D04D1 8位液晶和3.5寸ILI9481 8位和16位的驱动, 平台是stm32407 +cubmex +LVGL
git:
csdn: https://download.csdn.net/download/a2267542848/14047743
H750
https://download.csdn.net/download/a2267542848/14047751