OpenEdv-开源电子网

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

关于TFTLCD初始化的问题,不知道哪里出了问题

[复制链接]

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2017-3-29
在线时间
39 小时
发表于 2020-3-6 08:52:04 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 lpfdewo 于 2020-3-6 09:37 编辑

我的初始化函数在下面,初始化输出LCD ID总是为0,但是换原子哥的就没问题,我已经按照原子哥的思路来初始化了,但还是不行;
  1. void LCD_Init(void){
  2.         vu32 i=0;
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
  5.         FSMC_NORSRAMTimingInitTypeDef readwriteTiming;
  6.         FSMC_NORSRAMTimingInitTypeDef writeTiming;
  7.        
  8.         //////////////////////////////////初始化GPIO
  9.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF |RCC_AHB1Periph_GPIOG, ENABLE);
  10.         RCC_AHB3PeriphClockLPModeCmd(RCC_AHB3Periph_FSMC, ENABLE);
  11.        
  12.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  14.         GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
  15.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  16.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  17.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  18.        
  19.         GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  21.         GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
  22.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  23.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  24.         GPIO_Init(GPIOD, &GPIO_InitStructure);
  25.        
  26.         GPIO_InitStructure.GPIO_Pin = (0x1ff<<7);
  27.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  28.         GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
  29.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  30.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  31.         GPIO_Init(GPIOE, &GPIO_InitStructure);
  32.        
  33.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  34.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
  36.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  37.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  38.         GPIO_Init(GPIOF, &GPIO_InitStructure);
  39.        
  40.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  41.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  42.         GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
  43.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  44.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  45.         GPIO_Init(GPIOG, &GPIO_InitStructure);
  46.        
  47.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);
  48.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);
  49.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);
  50.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);
  51.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC);
  52.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);
  53.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);
  54.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);
  55.         GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);
  56.        
  57.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);
  58.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);
  59.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);
  60.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);
  61.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);
  62.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);
  63.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);
  64.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);
  65.         GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);
  66.        
  67.         GPIO_PinAFConfig(GPIOF,GPIO_PinSource12,GPIO_AF_FSMC);
  68.         GPIO_PinAFConfig(GPIOG,GPIO_PinSource12,GPIO_AF_FSMC);
  69.        
  70.         //////////////////////////////////对FSMC进行设置
  71.         readwriteTiming.FSMC_AddressSetupTime = 0xF;
  72.         readwriteTiming.FSMC_AddressHoldTime = 0x00;
  73.         readwriteTiming.FSMC_DataSetupTime = 60;
  74.         readwriteTiming.FSMC_BusTurnAroundDuration = 0x00;
  75.         readwriteTiming.FSMC_CLKDivision = 0x00;
  76.         readwriteTiming.FSMC_DataLatency = 0x00;
  77.         readwriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;
  78.        
  79.         writeTiming.FSMC_AddressSetupTime = 9;
  80.         writeTiming.FSMC_AddressHoldTime = 0x00;
  81.         writeTiming.FSMC_DataSetupTime = 8;
  82.         writeTiming.FSMC_BusTurnAroundDuration = 0x00;
  83.         writeTiming.FSMC_CLKDivision = 0x00;
  84.         writeTiming.FSMC_DataLatency = 0x00;
  85.         writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;
  86.        
  87.         FSMC_NORSRAMInitStructure.FSMC_Bank                         = FSMC_Bank1_NORSRAM4;
  88.         FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode         = FSMC_BurstAccessMode_Disable;
  89.         FSMC_NORSRAMInitStructure.FSMC_DataAddressMux         = FSMC_DataAddressMux_Disable;
  90.         FSMC_NORSRAMInitStructure.FSMC_ExtendedMode         = FSMC_ExtendedMode_Enable;
  91.         FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth         = FSMC_MemoryDataWidth_16b;
  92.         FSMC_NORSRAMInitStructure.FSMC_MemoryType                 = FSMC_MemoryType_SRAM;
  93.         FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct         = &readwriteTiming;
  94.         FSMC_NORSRAMInitStructure.FSMC_WaitSignal                                 = FSMC_WaitSignal_Disable;
  95.         FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive                 = FSMC_WaitSignalActive_BeforeWaitState;
  96.         FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity                 = FSMC_WaitSignalPolarity_Low;
  97.         FSMC_NORSRAMInitStructure.FSMC_WrapMode                                 = FSMC_WrapMode_Disable;
  98.         FSMC_NORSRAMInitStructure.FSMC_WriteBurst                                 = FSMC_WriteBurst_Disable;
  99.         FSMC_NORSRAMInitStructure.FSMC_WriteOperation                         = FSMC_WriteOperation_Enable;
  100.         FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct                 = &writeTiming;
  101.         FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait                 = FSMC_AsynchronousWait_Disable;
  102.         FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
  103.        
  104.         FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
  105.        
  106.         delay_ms(50);
  107.         LCD_WriteReg(0x0000,0x0001);
  108.         delay_ms(50);
  109.         lcddev.id = LCD_ReadReg(0x0000);
  110.        
  111.         //////////////////////////////////获取LCDDEV.ID
  112.         if((lcddev.id<0xFF)||(lcddev.id==0xFFFF)||(lcddev.id==0x9300)){
  113.                 //尝试读取9341ID
  114.                 LCD_WR_REG(0xD3);
  115.                 lcddev.id=LCD_RD_DATA();
  116.                 lcddev.id=LCD_RD_DATA();
  117.                 lcddev.id=LCD_RD_DATA();
  118.                 lcddev.id<<=8;
  119.                 lcddev.id|=LCD_RD_DATA();
  120.                 if(lcddev.id!=0x9341){
  121.                         //尝试读取6804ID
  122.                         LCD_WR_REG(0xBF);
  123.                         lcddev.id=LCD_RD_DATA();
  124.                         lcddev.id=LCD_RD_DATA();
  125.                         lcddev.id=LCD_RD_DATA();
  126.                         lcddev.id=LCD_RD_DATA();
  127.                         lcddev.id<<=8;
  128.                         lcddev.id|=LCD_RD_DATA();
  129.                         if(lcddev.id!=0x6804){
  130.                                 //尝试读取5310ID
  131.                                 LCD_WR_REG(0xD4);
  132.                                 lcddev.id=LCD_RD_DATA();
  133.                                 lcddev.id=LCD_RD_DATA();
  134.                                 lcddev.id=LCD_RD_DATA();
  135.                                 lcddev.id<<=8;
  136.                                 lcddev.id|=LCD_RD_DATA();
  137.                                 if(lcddev.id!=0x5310){
  138.                                         //尝试读取5510ID
  139.                                         LCD_WR_REG(0xDA00);
  140.                                         lcddev.id=LCD_RD_DATA();
  141.                                         LCD_WR_REG(0xDB00);
  142.                                         lcddev.id=LCD_RD_DATA();
  143.                                         lcddev.id<<=8;
  144.                                         LCD_WR_REG(0xDC00);
  145.                                         lcddev.id|=LCD_RD_DATA();
  146.                                         if(lcddev.id==0x8000)        lcddev.id=0x5510;
  147.                                         //尝试读取1963ID
  148.                                         if(lcddev.id!=0x5510){
  149.                                                 LCD_WR_REG(0xA1);
  150.                                                 lcddev.id=LCD_RD_DATA();
  151.                                                 lcddev.id=LCD_RD_DATA();
  152.                                                 lcddev.id<<=8;
  153.                                                 lcddev.id|=LCD_RD_DATA();
  154.                                                 if(lcddev.id==0x5761)        lcddev.id=0x1963;
  155.                                         }
  156.                                 }
  157.                         }
  158.                 }
  159.         }


  160.         if((lcddev.id==0x9341)||(lcddev.id==0x5310)||(lcddev.id==0x5510)||(lcddev.id==0x1963)){
  161.                 FSMC_Bank1E->BWTR[6]&=~(0xF<<0);//ADDSET地址建立时间
  162.                 FSMC_Bank1E->BWTR[6]&=~(0xF<<8);//DATSET数据保存时间
  163.                 FSMC_Bank1E->BWTR[6]|=3<<0;
  164.                 FSMC_Bank1E->BWTR[6]|=2<<8;
  165.         }else if((lcddev.id==0x6804)||(lcddev.id==0xC505)){
  166.                 FSMC_Bank1E->BWTR[6]&=~(0xF<<0);//ADDSET地址建立时间
  167.                 FSMC_Bank1E->BWTR[6]&=~(0xF<<8);//DATSET数据保存时间
  168.                 FSMC_Bank1E->BWTR[6]|=10<<0;
  169.                 FSMC_Bank1E->BWTR[6]|=12<<8;
  170.         }
  171.         printf("LCD ID:%x\r\n",lcddev.id);
  172.        
复制代码






最佳答案

查看完整内容[请看2#楼]

比如你把D0接3.3V 那你读取ID的时候,是不是D0一定是1才对? 是的话,那么D0接0,是不是读取D0一定是0才对? 同样的道理,依次把D0~D15接一遍,你会得到不同的读数,看哪个读数和期望值不一样,就说明这个IO有问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-6 08:52:05 | 显示全部楼层
lpfdewo 发表于 2020-3-9 11:00
原子哥,我刚刚接触不是很懂,想问一下,杜邦线拉高哪里?为什么要拉低D0-D15,读什么读数?或者原子哥指 ...

比如你把D0接3.3V
那你读取ID的时候,是不是D0一定是1才对?
是的话,那么D0接0,是不是读取D0一定是0才对?
同样的道理,依次把D0~D15接一遍,你会得到不同的读数,看哪个读数和期望值不一样,就说明这个IO有问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2017-3-29
在线时间
39 小时
 楼主| 发表于 2020-3-6 09:40:07 | 显示全部楼层
后面是直接复制驱动初始化代码,
到输出printf("LCD ID:%x\r\n",lcddev.id);语句这,输出的id为0,屏幕是白屏,思路和原子哥一样,不知道我漏了哪个细节
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-3-7 01:45:54 | 显示全部楼层
lpfdewo 发表于 2020-3-6 09:40
后面是直接复制驱动初始化代码,
到输出printf("LCD ID:%x\r\n",lcddev.id);语句这,输出的id为0,屏幕是 ...

先读ID
不行就用杜邦线强行拉高,拉低D0~D15,看下具体的读数,以此来判断问题点
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2017-3-29
在线时间
39 小时
 楼主| 发表于 2020-3-9 11:00:13 | 显示全部楼层
正点原子 发表于 2020-3-7 01:45
先读ID
不行就用杜邦线强行拉高,拉低D0~D15,看下具体的读数,以此来判断问题点

原子哥,我刚刚接触不是很懂,想问一下,杜邦线拉高哪里?为什么要拉低D0-D15,读什么读数?或者原子哥指个路,哪里有讲解相关的内容?
回复

使用道具 举报

3

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2017-3-29
在线时间
39 小时
 楼主| 发表于 2020-3-10 09:11:05 | 显示全部楼层
正点原子 发表于 2020-3-10 00:26
比如你把D0接3.3V
那你读取ID的时候,是不是D0一定是1才对?
是的话,那么D0接0,是不是读取D0一定是0 ...

明白了,谢谢原子哥!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-4 06:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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