21ic电子技术开发论坛 单片机与嵌入式系统 ARM技术论坛 stm32f4 FSMC 驱动lcd屏
发新帖我要提问
返回列表
打印

stm32f4 FSMC 驱动lcd屏

[复制链接]
5241|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superlink|  楼主 | 2014-6-9 13:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
core是stm32f4vgt6
lcd屏是ili9341
#define LCD_RAM   *(vu16*)((u32)0x60020000)  //disp Data ADDR
#define LCD_REG   *(vu16*)((u32)0x60000000)         //disp Reg  ADDR

void LCD_LineConf(void)
{
          GPIO_InitTypeDef GPIO_InitStructure;

          RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE , ENABLE);
           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_Pin_11 |
                                GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, 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_PinSource11, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

  /* PEs */
  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_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_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_MCO);
  GPIO_SetBits(GPIOD, GPIO_Pin_12);
  /*RESERT*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_MCO);
  GPIO_SetBits(GPIOD, GPIO_Pin_13);
}


void LCD_FSMCConf(void)
{
          FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
          FSMC_NORSRAMTimingInitTypeDef  p;

          RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
          p.FSMC_AddressSetupTime = 5;
          p.FSMC_AddressHoldTime = 0;
          p.FSMC_DataSetupTime = 9;
          p.FSMC_BusTurnAroundDuration = 0;
          p.FSMC_CLKDivision = 0;
          p.FSMC_DataLatency = 0;
          p.FSMC_AccessMode = FSMC_AccessMode_A;
          FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
          FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
          FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
          FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
          FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
          FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_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_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
u16 LCD_ReadReg(u8 Reg)
{
          LCD_REG=Reg;
          return (LCD_RAM);
}


void LCD_Init(void)
{
        LCD_LineConf();
          LCD_FSMCConf();
          delay_ms(5);
          lcdid=LCD_ReadReg(0x00);
        if(lcdid==0x9341)
                {
                  while(1);
               }
while(1);
}
驱动不起是是哪的问题?

相关帖子

沙发
airwill| | 2014-6-10 12:17 | 只看该作者
验证引脚设置, 连接正确;
验证波形时序正确, 包括脉冲时间 TFT 的读写时间没有 SRAM 快哦.
TFT 的复位, 有没有得到可靠的复位?

使用特权

评论回复
板凳
superlink|  楼主 | 2014-6-13 09:39 | 只看该作者
airwill 发表于 2014-6-10 12:17
验证引脚设置, 连接正确;
验证波形时序正确, 包括脉冲时间 TFT 的读写时间没有 SRAM 快哦.
TFT 的复位, 有 ...

是fsmc的频率太快的原因。读id需要的时间相对有点长。。
后面我直接初始化了lcd屏,可以显示图片了。。

使用特权

评论回复
地板
airwill| | 2014-6-13 10:26 | 只看该作者
是的, TFT 的读和写要求的时序时间是不同的, 也需要注意.

使用特权

评论回复
5
wangzhifenggsh| | 2014-7-9 09:58 | 只看该作者
敢问楼主:STM32F407驱动4.3寸LCD液晶显示屏是否要增加别的驱动芯片,还是直接用FSMC模块?LCD供电电压是多大的?

使用特权

评论回复
6
superlink|  楼主 | 2014-11-12 17:43 | 只看该作者
wangzhifenggsh 发表于 2014-7-9 09:58
敢问楼主:STM32F407驱动4.3寸LCD液晶显示屏是否要增加别的驱动芯片,还是直接用FSMC模块?LCD供电电压是多 ...

直接用fsmc模块就行了。。

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部