打印

FSMC驱动LCD 为什么驱动不了?

[复制链接]
3961|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 haitun050505 于 2013-9-25 11:09 编辑

小弟用的RA8803控制的320*240的屏  stm32f103ze的FSMC进行驱动
LCD时序


硬件连接如图
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;        
        FSMC_NORSRAMTimingInitTypeDef  p;
        
        /* 使能FSMC时钟*/
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 使能AFIO时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
        
        /* 配置FSMC相对应的数据线,FSMC-D0~D15: PD 14 15 0 1,PE 7 8 9 10 11 12 13 14 15,PD 8 9 10*/        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF_PP;
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
                                                                                                                                GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                                   GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
                                                   GPIO_Pin_15;
        GPIO_Init(GPIOE, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                    //PF0   A0
        GPIO_Init(GPIOF, &GPIO_InitStructure);
                /* 配置FSMC相对应的控制线
         * PD4-FSMC_NOE  :LCD-RD
   * PD5-FSMC_NWE  :LCD-WR
         * PG12-FSMC_NE4  :LCD-CS
         */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = LCD_RST;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = LCD_RS;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin = LCD_CS;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOG, &GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin = LCD_RD | LCD_WR;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
        
        
        p.FSMC_AddressSetupTime = 0x80;         //地址建立时间
        p.FSMC_AddressHoldTime = 0x20;         //地址保持时间
        p.FSMC_DataSetupTime = 0x81;                 //数据建立时间
        p.FSMC_BusTurnAroundDuration = 0x20;
        p.FSMC_CLKDivision = 0x00;                                //8分频
        p.FSMC_DataLatency = 0x20;                                //数据保持时间
        p.FSMC_AccessMode = FSMC_AccessMode_B;         // 一般使用模式B来控制LCD
        
        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
        FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;  //8位模式
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
        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_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

        
        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
        
        /* 使能 FSMC Bank1_SRAM4 Bank */
        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  
               
               
        LCD_RST_H;
        LCD_RS_H;
}

配置的RS是由自己控制的,并没有使用地址线控制

/***************************************
                                写命令
**************************************/
void CmdWrite(u8 cmdreg,u8 cmddata)
{
                LCD_RS_L;
                (*(__IO u8 *) (0x6c000000)) = (cmdreg);
                delay(10);//延时
               
                LCD_RS_H;
                (*(__IO u8 *) (0x6c000000 )) = (cmddata);
                delay(100);//延时1us
        
        
}

/***************************************
                                写数据
**************************************/

void LCD_WriteData(u8 DData)
{
        LCD_RS_H;
        (*(__IO u8 *) (0x6c000000 )) = (DData);
         delay(100);
}

用示波器测,CS,WR,RD,是有波形的  D0~D7 在单独送一个数时如 0xf0 测量也OK  可是现在一直不能正常显示? 求大神指点








沙发
haitun050505|  楼主 | 2013-9-25 11:11 | 只看该作者
是我的时序有问题还是怎么的呢?   
      p.FSMC_AddressSetupTime = 0x80;         //地址建立时间
        p.FSMC_AddressHoldTime = 0x20;         //地址保持时间
        p.FSMC_DataSetupTime = 0x81;                 //数据建立时间
这几个时钟我已经设置的尽可能大了!

还是               LCD_RS_L;
                (*(__IO u8 *) (0x6c000000)) = (cmdreg);
                delay(10);//延时
这种方式不行?

使用特权

评论回复
板凳
haitun050505|  楼主 | 2013-9-25 11:12 | 只看该作者
坐等大神,帮帮忙看下呗!!!

使用特权

评论回复
地板
xzp114| | 2013-9-25 11:12 | 只看该作者
你LCD有亮度,对比度调节的吗?或者LCD的复位正常吗?好好检查一下呢

使用特权

评论回复
5
IJK| | 2013-9-25 11:27 | 只看该作者
需要描述细节:
FSMC输出波形对吗?
读控制器RA8803的ID (假如有的话)对吗?

使用特权

评论回复
6
haitun050505|  楼主 | 2013-9-25 11:29 | 只看该作者
xzp114 发表于 2013-9-25 11:12
你LCD有亮度,对比度调节的吗?或者LCD的复位正常吗?好好检查一下呢

对比度和亮度是固定的,复位正常与否需要看出来呢? 现在是一直白屏无法显示

使用特权

评论回复
7
haitun050505|  楼主 | 2013-9-25 11:32 | 只看该作者
IJK 发表于 2013-9-25 11:27
需要描述细节:
FSMC输出波形对吗?
读控制器RA8803的ID (假如有的话)对吗? ...

1.FSMC输出的波形 片选,读写,数据,应该都没有问题 就是不知道持续的时间跟他们之间的时序是否正确

2.如何才能读RA8803的ID?

使用特权

评论回复
8
IJK| | 2013-9-25 14:03 | 只看该作者
如果RA8803没有ID寄存器,可以在复位后读其寄存器0,缺省值为0xC9

使用特权

评论回复
9
easy_tm| | 2013-9-25 14:05 | 只看该作者
白屏通常意味着没有clk,check下硬件连接正常吗

使用特权

评论回复
10
戈卫东| | 2013-9-25 14:19 | 只看该作者
你的时间常数超出了允许范围了吧? FSMC配置失败?

使用特权

评论回复
11
chuangpu| | 2013-9-25 19:43 | 只看该作者
花时间好好看看   谢谢了   楼主   这一块   感觉确实比较不错   顶你一个   这一块  需要花时间好好看看

使用特权

评论回复
12
sgj245609615| | 2013-9-26 09:14 | 只看该作者
先用IO摸拟的程序验证下硬件有没有问题,再调FSMC吧

使用特权

评论回复
13
outstanding| | 2013-9-26 11:11 | 只看该作者

使用特权

评论回复
14
haitun050505|  楼主 | 2013-9-26 13:37 | 只看该作者
sgj245609615 发表于 2013-9-26 09:14
先用IO摸拟的程序验证下硬件有没有问题,再调FSMC吧

IO模拟已经验证木有问题  //液晶写命令
void CmdWrite(u8 cmdreg,u8 cmddata)
{
        (*(__IO u8 *) (Bank1_LCD_C)) = (cmdreg);
        LCD_CS_L;
        LCD_RS_L;
        LCD_RW_L;
        LCD_RW_H;
        LCD_RS_H;
        LCD_CS_H;
        (*(__IO u8 *) (Bank1_LCD_D)) = (cmddata);
        LCD_CS_L;
        LCD_RS_L;
        LCD_RW_L;
        LCD_RW_H;
        LCD_RS_H;
        LCD_CS_H;
}

使用特权

评论回复
15
haitun050505|  楼主 | 2013-9-26 13:38 | 只看该作者
戈卫东 发表于 2013-9-25 14:19
你的时间常数超出了允许范围了吧? FSMC配置失败?

这个不科学   时间常数??

使用特权

评论回复
16
haitun050505|  楼主 | 2013-9-26 13:39 | 只看该作者
chuangpu 发表于 2013-9-25 19:43
花时间好好看看   谢谢了   楼主   这一块   感觉确实比较不错   顶你一个   这一块  需要花时间好好看看  ...

关键是花时间太多了,老板会骂的  求解决方法

使用特权

评论回复
17
haitun050505|  楼主 | 2013-9-26 13:40 | 只看该作者
easy_tm 发表于 2013-9-25 14:05
白屏通常意味着没有clk,check下硬件连接正常吗

硬件完全OK  模拟io控制时序一切正常

使用特权

评论回复
18
戈卫东| | 2013-9-26 18:21 | 只看该作者
haitun050505 发表于 2013-9-26 13:38
这个不科学   时间常数??

你配置那什么BTR,BWTR之类的时候,可能用了超过允许范围的参数,导致FSMC配置失败.
(固件库检查你的参数无法通过,失败了)

使用特权

评论回复
19
trumpxp| | 2013-9-26 21:16 | 只看该作者
速度  要快   另外  就是  成绩也要块   楼主

使用特权

评论回复
20
haitun050505|  楼主 | 2013-9-27 14:01 | 只看该作者
trumpxp 发表于 2013-9-26 21:16
速度  要快   另外  就是  成绩也要块   楼主

速度?  成绩? 您确定你没来错地?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

1

粉丝