OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7057|回复: 11

FSMC LCD

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-25
在线时间
0 小时
发表于 2013-3-26 11:48:21 | 显示全部楼层 |阅读模式

这个是我在使用STM32F207 里面的FSMC 控制 LCD 一些初始化代码。


 

 /* *************************
**
**配置FSMC   和LCD 使用的一些GPIO
****************************/  
void LCD_GPIOPINConfigure(void)
{
       
  
   GPIO_InitTypeDef    GPIO_InitStructure;
       
        /*init LCD DBpin   DB0 ~ DB15*/
       GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);        
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);
      
        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_InitStructure.GPIO_Mode   =  GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType  = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed  = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_UP;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        GPIO_PinAFConfig(GPIOE, GPIO_PinSource7,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource8,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource9,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource10,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource11,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource12,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource13,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource14,GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOE, GPIO_PinSource15,GPIO_AF_FSMC);

        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_InitStructure.GPIO_Mode  = GPIO_Mode_AF; 
        GPIO_InitStructure.GPIO_OType  = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed  = GPIO_Speed_50MHz;
        GPIO_Init(GPIOE,&GPIO_InitStructure);
       
      


        /*FSMC_A10  --  LCD_RS   ---- PG0*/
        GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_OType     = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd       = GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed    = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode       =  GPIO_Mode_AF;
        GPIO_Init(GPIOG,&GPIO_InitStructure);
        GPIO_PinAFConfig(GPIOG, GPIO_PinSource0,GPIO_AF_FSMC);

       /*GPIOG1       LCD_RESET --------PG1 */
        GPIO_InitStructure.GPIO_Pin         =    GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode     =    GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType    =    GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd      =    GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed    =    GPIO_Speed_50MHz;
        GPIO_Init(GPIOG,&GPIO_InitStructure);

        /*初始化RESET 引脚为高电平*/
        GPIO_SetBits(GPIOG,GPIO_Pin_1);

 

        /* PD4---FSMC_NOE , PD5 ----FSMC_NWE*/
        GPIO_InitStructure.GPIO_Pin       =   GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode    =   GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType  =   GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd    =   GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed  =    GPIO_Speed_50MHz;
        GPIO_Init(GPIOD,&GPIO_InitStructure);

        GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);   
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);

        /*PD7 ---FSMC_NE1----------ALTERNATE*/
     
        GPIO_InitStructure.GPIO_Pin         =   GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode     =   GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType   =   GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd    =    GPIO_PuPd_UP;
        GPIO_InitStructure.GPIO_Speed   =   GPIO_Speed_50MHz;
        GPIO_Init(GPIOD,&GPIO_InitStructure);
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource7,GPIO_AF_FSMC);
   
}


 

void LCD_FSMCConfig(void)

   
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;

  /* FSMC_Bank1_NORSRAM1 timing configuration */
  p.FSMC_AddressSetupTime = 0x01;/*地址建立时间期限*/                                           
  p.FSMC_AddressHoldTime = 0x00;/*地址的持续时间*/
  p.FSMC_DataSetupTime = 0x05;/*设定数据时间期限*/
  p.FSMC_BusTurnAroundDuration = 0x00;/*总线转向时间*/
  p.FSMC_CLKDivision     = 0x00;/*CLK时钟输出信号的HCLK周期数表示时间???*/
  p.FSMC_DataLatency = 0x00;/*指定在获得第一个数据前的时钟周期*/
  p.FSMC_AccessMode = FSMC_AccessMode_B;

  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;/*指定的FSMC块*/
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; /*地址和数据值不复用的数据总线*/                                        
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;/*外部存储器的类型*/
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;/*数据宽度*/
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;/* 禁用突发访问模式*/
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;/*指定等待信号的极性*/
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;/*Enables or disables the Wrapped burst access mode for Flash*/
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;/*启用指定的FSMC块的写操作*/
  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);

  /* Enable FSMC Bank1_SRAM Bank */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); 
}

但是我在使用这个调试代码的时候从示波器上面看出来的波形是这个样子的!!


示波器的解法:

1:接的RD 2:WE 3:NE1

测试代码:

for(;;)
        {
                *((volatile u16*)(LCD_RAMBASE))           = 1;
                delay_us(2);
                *((volatile u16*)(LCD_RAMBASE+ 0xfa)) = 2;
                delay_us(2);
                *((volatile u16*)(LCD_RAMBASE+ 0xfb)) = 3;
                delay_us(2);
                *((volatile u16*)(LCD_RAMBASE+ 0xfc)) = 4;
                delay_us(2);
                *((volatile u16*)(LCD_RAMBASE+ 0xfd)) = 5;
                delay_us(2);
                *((volatile u16*)(LCD_RAMBASE+ 0xfe)) = 6;
                delay_us(2);

                Test[0] = *((volatile u16*)(LCD_RAMBASE)) ;
                delay_us(2);
                Test[1] = *((volatile u16*)(LCD_RAMBASE+ 0xfa));
                delay_us(2);
                Test[2] = *((volatile u16*)(LCD_RAMBASE+ 0xfb));
                delay_us(2);
                Test[3] = *((volatile u16*)(LCD_RAMBASE+ 0xfc));
                delay_us(2);
                Test[4] = *((volatile u16*)(LCD_RAMBASE+ 0xfd));
                delay_us(2);
                Test[5] = *((volatile u16*)(LCD_RAMBASE+ 0xfe));
                delay_us(2);
        }


麻烦原子哥给看看!!!老板在后面催呢。。。


 


 


 


 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-26 16:32:18 | 显示全部楼层
回复【楼主位】trymebest:
---------------------------------
图片最下面的线是NE1信号?
怎么感觉你这示波器的波形都怪怪的,没坏 吧?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-25
在线时间
0 小时
 楼主| 发表于 2013-3-26 18:41:30 | 显示全部楼层
原子哥:
  我是使用的STM32F207的芯片,这个波形问题现在已经解决了!!是我的时序设置没有设置好!
 现在还有一个问题 :就是往指定的地址写数据后通过keil查看memory 发现数据根本就没有写进去!
 比如这样执行:*(volatile u16 *)(0x60000000) = 0x02;这样的语句,在memory里面查看0x60000000里面的内容 发现根据就没有写进去。

   求原子哥指教!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-26 22:18:29 | 显示全部楼层
用法上没问题。
检查硬件是不是有问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-25
在线时间
0 小时
 楼主| 发表于 2013-3-26 22:41:19 | 显示全部楼层
执行这句话:*((volatile u16 *)(0x60000000)) = 0x02;这句话后是不是只有这个地址0x60000000 这个地址上的数据是0x02,还是0x60000000 后的地址上都有这个数据,
  我现在的情况是包括0x60000000 后面的地址里面都有这个0x02 这个值 !!

 请原子哥帮我分析下!!!谢谢您前面的指导!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-26 23:03:05 | 显示全部楼层
回复【5楼】trymebest:
---------------------------------
那就要检查硬件啊,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-25
在线时间
0 小时
 楼主| 发表于 2013-3-27 08:56:49 | 显示全部楼层
怎么检查这里面的硬件啊!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-27 09:25:37 | 显示全部楼层
回复【7楼】trymebest:
---------------------------------
看你的电路连接有没有短路之类的了,或者焊接上的短路。
另外,你的是买的开发板,那么卖家应该会提供测试例程,你用他的例程测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-25
在线时间
0 小时
 楼主| 发表于 2013-3-27 09:57:54 | 显示全部楼层
原子哥 板子是我自己画的,我检查了下CPU上面的 FSMC_NBL0 和 FSMC_NBL1 两个引脚了短路了,,这样会不会影响写数据呢!!
  而且我现在用示波器比如说测试:DB0 和 DB3 两个数据引脚 从memory里面查看,本来这两个引脚的值应该是高电平,用示波器测检测后电平就是低电平了!! 好郁闷啊!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-27 11:29:14 | 显示全部楼层
回复【9楼】trymebest:
---------------------------------
会影响的。
你先把电路搞好。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-25
在线时间
0 小时
 楼主| 发表于 2013-3-27 12:16:32 | 显示全部楼层

原子哥 : 附件里面有我的程序!

 我现在把那两个引脚都弄好了,,但是写给0x60000000 里面写数据就不对了!!! 您能不能帮我看下我的程序里面到底有什么问题嘛!!!

   感谢你了!

PCR_MB2 (2013-2-20 10-42-14).zip

1.37 MB, 下载次数: 114

回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-25
在线时间
0 小时
 楼主| 发表于 2013-3-28 08:43:51 | 显示全部楼层
原子哥:
 我使用IO口模拟读写时序,LCD驱动起来!! 还是希望你能有时间看下我使用FSMC驱动LCD的这个程序!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 12:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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