硬汉嵌入式论坛

 找回密码
 立即注册
查看: 445|回复: 5
收起左侧

[技术讨论] STM32F407驱动ILI9486

[复制链接]

3

主题

5

回帖

14

积分

新手上路

积分
14
发表于 2023-6-13 16:42:23 | 显示全部楼层 |阅读模式
STM32F407在用FSMC驱动ILI9486的时候,程序下载后,能显示,但是按开发板复位键后,屏幕显示白屏,调试状态的时候,点击复位按钮,也显示白屏,LCD的RES连接到开发板的复位电路。有没有大佬知道是怎么回事?困扰几天了,求大佬解救!!!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-6-14 00:41:33 | 显示全部楼层
配置FSMC后,延迟1ms再操作配置9486试试。
回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2023-6-14 11:49:26 | 显示全部楼层
eric2013 发表于 2023-6-14 00:41
配置FSMC后,延迟1ms再操作配置9486试试。

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2023-6-14 11:58:34 | 显示全部楼层
eric2013 发表于 2023-6-14 11:53
这个是RGB,BGR颜色格式问题,这个好解决。

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

static void LCD_FSMC_MODEA_Config(void)
{
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
        FSMC_NORSRAMTimingInitTypeDef  writeTiming;
        /* 使能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[6],[7]。
        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 __inline  void 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 __inline  void 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.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2023-6-15 08:08:46 | 显示全部楼层
二师兄 发表于 2023-6-14 11:58
static void LCD_FSMC_MODEA_Config(void)
{
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;

你这个配置怎么写速度比读速度还快很多,这个不合理。是不是没有看9486时序图随意配置的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 18:28 , Processed in 0.298054 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表