二师兄 发表于 2023-6-13 16:42:23

STM32F407驱动ILI9486

STM32F407在用FSMC驱动ILI9486的时候,程序下载后,能显示,但是按开发板复位键后,屏幕显示白屏,调试状态的时候,点击复位按钮,也显示白屏,LCD的RES连接到开发板的复位电路。有没有大佬知道是怎么回事?困扰几天了,求大佬解救!!!

eric2013 发表于 2023-6-14 00:41:33

配置FSMC后,延迟1ms再操作配置9486试试。

二师兄 发表于 2023-6-14 11:49:26

eric2013 发表于 2023-6-14 00:41
配置FSMC后,延迟1ms再操作配置9486试试。

能想到的方法都试过了,都不行,而且,有部分颜色还是反的,比如设置红色,显示的是蓝色。

eric2013 发表于 2023-6-14 11:53:32

二师兄 发表于 2023-6-14 11:49
能想到的方法都试过了,都不行,而且,有部分颜色还是反的,比如设置红色,显示的是蓝色。

这个是RGB,BGR颜色格式问题,这个好解决。

当前主要还是你的FSMC配置如何整的稳定性。

二师兄 发表于 2023-6-14 11:58:34

eric2013 发表于 2023-6-14 11:53
这个是RGB,BGR颜色格式问题,这个好解决。

当前主要还是你的FSMC配置如何整的稳定性。

static void LCD_FSMC_MODEA_Config(void)
{
        FSMC_NORSRAMInitTypeDefFSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDefreadWriteTiming;
        FSMC_NORSRAMTimingInitTypeDefwriteTiming;
        /* 使能FSMC时钟*/
        RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);
       
        readWriteTiming.FSMC_AddressSetupTime       = 0xF;       //地址建立时间(ADDSET)为16个HCLK 1/168M=6ns*16=96ns       
    readWriteTiming.FSMC_AddressHoldTime      = 0x00;       //地址保持时间(ADDHLD)模式A未用到       
    readWriteTiming.FSMC_DataSetupTime          = 60;                        //数据保存时间为60个HCLK        =6*60=360ns
    readWriteTiming.FSMC_BusTurnAroundDuration= 0x00;
    readWriteTiming.FSMC_CLKDivision            = 0x00;
    readWriteTiming.FSMC_DataLatency            = 0x00;
        readWriteTiming.FSMC_AccessMode             = FSMC_AccessMode_A;       //模式A
   
        writeTiming.FSMC_AddressSetupTime         = 0x09;              //地址建立时间(ADDSET)为9个HCLK =54ns
        writeTiming.FSMC_AddressHoldTime            = 0x00;       //地址保持时间(A               
        writeTiming.FSMC_DataSetupTime            = 0x08;               //数据保存时间为6ns*9个HCLK=54ns
        writeTiming.FSMC_BusTurnAroundDuration      = 0x00;
        writeTiming.FSMC_CLKDivision                = 0x00;
        writeTiming.FSMC_DataLatency                = 0x00;
        writeTiming.FSMC_AccessMode                                   = FSMC_AccessMode_A;       //模式A

        FSMC_NORSRAMInitStructure.FSMC_Bank                                 = FSMC_Bank1_NORSRAMx;//这里我们使用NE4 ,也就对应BTCR,。
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux                 = FSMC_DataAddressMux_Disable; // 不复用数据地址
        FSMC_NORSRAMInitStructure.FSMC_MemoryType                         = FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;//SRAM   
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth                 = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode                 = FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity         = FSMC_WaitSignalPolarity_Low;
        FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait                = FSMC_AsynchronousWait_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WrapMode                         = FSMC_WrapMode_Disable;   
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive         = FSMC_WaitSignalActive_BeforeWaitState;
        FSMC_NORSRAMInitStructure.FSMC_WriteOperation                 = FSMC_WriteOperation_Enable;        //存储器写使能
        FSMC_NORSRAMInitStructure.FSMC_WaitSignal                         = FSMC_WaitSignal_Disable;   
        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode                 = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
        FSMC_NORSRAMInitStructure.FSMC_WriteBurst                         = FSMC_WriteBurst_Disable;
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct= &readWriteTiming; //读写时序
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct      = &writeTiming;//写时序

        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);//初始化FSMC配置

        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAMx, ENABLE);// 使能BANK1
}
这是FSMC配置
/**
* @brief   向LCD写入命令
* @param   usCmd:要写入的命令
* @return   none
* @author   none
*/
static __inlinevoid LCD_Write_Cmd(uint16_t usCmd)
{
//        uint16_t cmd = usCmd;
        *(__IO uint16_t*)(FSMC_Addr_LCD_CMD) = usCmd;
}

/**
* @brief   向LCD写入数据
* @param   usData:要写入的命令
* @return   none
* @author   none
*/
static __inlinevoid LCD_Write_Data(uint16_t usData)
{
//        uint16_t data = usData;
        *(__IO uint16_t*)(FSMC_Addr_LCD_DATA) = usData;
}
屏幕的RS连接到FSMC_A0,FSMC_Addr_LCD_CMD = 0X6C000000,FSMC_Addr_LCD_DATA = 0X6C000080.

eric2013 发表于 2023-6-15 08:08:46

二师兄 发表于 2023-6-14 11:58
static void LCD_FSMC_MODEA_Config(void)
{
        FSMC_NORSRAMInitTypeDefFSMC_NORSRAMInitStructure;


你这个配置怎么写速度比读速度还快很多,这个不合理。是不是没有看9486时序图随意配置的。
页: [1]
查看完整版本: STM32F407驱动ILI9486