stm32f4 FSMC 驱动lcd屏

[复制链接]
5633|5
 楼主| superlink 发表于 2014-6-9 13:31 | 显示全部楼层 |阅读模式
core是stm32f4vgt6
lcd屏是ili9341
  1. #define LCD_RAM   *(vu16*)((u32)0x60020000)  //disp Data ADDR
  2. #define LCD_REG   *(vu16*)((u32)0x60000000)         //disp Reg  ADDR

  3. void LCD_LineConf(void)
  4. {
  5.           GPIO_InitTypeDef GPIO_InitStructure;

  6.           RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE , ENABLE);
  7.            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
  8.                                 GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15 |GPIO_Pin_11 |
  9.                                 GPIO_Pin_4 |GPIO_Pin_5 | GPIO_Pin_7;
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  11.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  13.   GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  14.   GPIO_Init(GPIOD, &GPIO_InitStructure);
  15.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
  16.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
  17.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
  18.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
  19.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
  20.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
  21.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
  22.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
  23.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);
  24.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  25.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

  26.   /* PEs */
  27.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
  28.                                 GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
  29.                                 GPIO_Pin_15;
  30.   GPIO_Init(GPIOE, &GPIO_InitStructure);

  31.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
  32.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
  33.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
  34.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);
  35.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
  36.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);
  37.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);
  38.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);
  39.   GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);


  40.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  41.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  42.   GPIO_Init(GPIOD, &GPIO_InitStructure);
  43.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_MCO);
  44.   GPIO_SetBits(GPIOD, GPIO_Pin_12);
  45.   /*RESERT*/
  46.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  47.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  48.   GPIO_Init(GPIOD, &GPIO_InitStructure);
  49.   GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_MCO);
  50.   GPIO_SetBits(GPIOD, GPIO_Pin_13);
  51. }


  52. void LCD_FSMCConf(void)
  53. {
  54.           FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  55.           FSMC_NORSRAMTimingInitTypeDef  p;

  56.           RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
  57.           p.FSMC_AddressSetupTime = 5;
  58.           p.FSMC_AddressHoldTime = 0;
  59.           p.FSMC_DataSetupTime = 9;
  60.           p.FSMC_BusTurnAroundDuration = 0;
  61.           p.FSMC_CLKDivision = 0;
  62.           p.FSMC_DataLatency = 0;
  63.           p.FSMC_AccessMode = FSMC_AccessMode_A;
  64.           FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
  65.           FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  66.           FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
  67.           FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  68.           FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  69.           FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  70.           FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  71.           FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  72.           FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  73.           FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  74.           FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  75.           FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  76.           FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  77.           FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  78.           FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  79.           FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);   
  80.           FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
  81. }
  82. u16 LCD_ReadReg(u8 Reg)
  83. {
  84.           LCD_REG=Reg;
  85.           return (LCD_RAM);
  86. }


  87. void LCD_Init(void)
  88. {
  89.         LCD_LineConf();
  90.           LCD_FSMCConf();
  91.           delay_ms(5);
  92.           lcdid=LCD_ReadReg(0x00);
  93.         if(lcdid==0x9341)
  94.                 {
  95.                   while(1);
  96.                }
  97. while(1);
  98. }
驱动不起是是哪的问题?
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 的读和写要求的时序时间是不同的, 也需要注意.
wangzhifenggsh 发表于 2014-7-9 09:58 | 显示全部楼层
敢问楼主:STM32F407驱动4.3寸LCD液晶显示屏是否要增加别的驱动芯片,还是直接用FSMC模块?LCD供电电压是多大的?
 楼主| superlink 发表于 2014-11-12 17:43 | 显示全部楼层
wangzhifenggsh 发表于 2014-7-9 09:58
敢问楼主:STM32F407驱动4.3寸LCD液晶显示屏是否要增加别的驱动芯片,还是直接用FSMC模块?LCD供电电压是多 ...

直接用fsmc模块就行了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部