初级会员

- 积分
- 151
- 金钱
- 151
- 注册时间
- 2017-3-29
- 在线时间
- 39 小时
|
1金钱
本帖最后由 lpfdewo 于 2020-3-6 09:37 编辑
我的初始化函数在下面,初始化输出LCD ID总是为0,但是换原子哥的就没问题,我已经按照原子哥的思路来初始化了,但还是不行;
- void LCD_Init(void){
- vu32 i=0;
- GPIO_InitTypeDef GPIO_InitStructure;
- FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
- FSMC_NORSRAMTimingInitTypeDef readwriteTiming;
- FSMC_NORSRAMTimingInitTypeDef writeTiming;
-
- //////////////////////////////////初始化GPIO
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF |RCC_AHB1Periph_GPIOG, ENABLE);
- RCC_AHB3PeriphClockLPModeCmd(RCC_AHB3Periph_FSMC, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = (0x1ff<<7);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOF, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_Init(GPIOG, &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_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_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_PinAFConfig(GPIOF,GPIO_PinSource12,GPIO_AF_FSMC);
- GPIO_PinAFConfig(GPIOG,GPIO_PinSource12,GPIO_AF_FSMC);
-
- //////////////////////////////////对FSMC进行设置
- readwriteTiming.FSMC_AddressSetupTime = 0xF;
- readwriteTiming.FSMC_AddressHoldTime = 0x00;
- readwriteTiming.FSMC_DataSetupTime = 60;
- readwriteTiming.FSMC_BusTurnAroundDuration = 0x00;
- readwriteTiming.FSMC_CLKDivision = 0x00;
- readwriteTiming.FSMC_DataLatency = 0x00;
- readwriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;
-
- writeTiming.FSMC_AddressSetupTime = 9;
- writeTiming.FSMC_AddressHoldTime = 0x00;
- writeTiming.FSMC_DataSetupTime = 8;
- writeTiming.FSMC_BusTurnAroundDuration = 0x00;
- writeTiming.FSMC_CLKDivision = 0x00;
- writeTiming.FSMC_DataLatency = 0x00;
- writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;
-
- FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
- FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
- FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable;
- FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
- FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
- FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readwriteTiming;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
- FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
- FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
- FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
- FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;
- FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
- FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
-
- FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
-
- delay_ms(50);
- LCD_WriteReg(0x0000,0x0001);
- delay_ms(50);
- lcddev.id = LCD_ReadReg(0x0000);
-
- //////////////////////////////////获取LCDDEV.ID
- if((lcddev.id<0xFF)||(lcddev.id==0xFFFF)||(lcddev.id==0x9300)){
- //尝试读取9341ID
- LCD_WR_REG(0xD3);
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id<<=8;
- lcddev.id|=LCD_RD_DATA();
- if(lcddev.id!=0x9341){
- //尝试读取6804ID
- LCD_WR_REG(0xBF);
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id<<=8;
- lcddev.id|=LCD_RD_DATA();
- if(lcddev.id!=0x6804){
- //尝试读取5310ID
- LCD_WR_REG(0xD4);
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id<<=8;
- lcddev.id|=LCD_RD_DATA();
- if(lcddev.id!=0x5310){
- //尝试读取5510ID
- LCD_WR_REG(0xDA00);
- lcddev.id=LCD_RD_DATA();
- LCD_WR_REG(0xDB00);
- lcddev.id=LCD_RD_DATA();
- lcddev.id<<=8;
- LCD_WR_REG(0xDC00);
- lcddev.id|=LCD_RD_DATA();
- if(lcddev.id==0x8000) lcddev.id=0x5510;
- //尝试读取1963ID
- if(lcddev.id!=0x5510){
- LCD_WR_REG(0xA1);
- lcddev.id=LCD_RD_DATA();
- lcddev.id=LCD_RD_DATA();
- lcddev.id<<=8;
- lcddev.id|=LCD_RD_DATA();
- if(lcddev.id==0x5761) lcddev.id=0x1963;
- }
- }
- }
- }
- }
- if((lcddev.id==0x9341)||(lcddev.id==0x5310)||(lcddev.id==0x5510)||(lcddev.id==0x1963)){
- FSMC_Bank1E->BWTR[6]&=~(0xF<<0);//ADDSET地址建立时间
- FSMC_Bank1E->BWTR[6]&=~(0xF<<8);//DATSET数据保存时间
- FSMC_Bank1E->BWTR[6]|=3<<0;
- FSMC_Bank1E->BWTR[6]|=2<<8;
- }else if((lcddev.id==0x6804)||(lcddev.id==0xC505)){
- FSMC_Bank1E->BWTR[6]&=~(0xF<<0);//ADDSET地址建立时间
- FSMC_Bank1E->BWTR[6]&=~(0xF<<8);//DATSET数据保存时间
- FSMC_Bank1E->BWTR[6]|=10<<0;
- FSMC_Bank1E->BWTR[6]|=12<<8;
- }
- printf("LCD ID:%x\r\n",lcddev.id);
-
复制代码
|
最佳答案
查看完整内容[请看2#楼]
比如你把D0接3.3V
那你读取ID的时候,是不是D0一定是1才对?
是的话,那么D0接0,是不是读取D0一定是0才对?
同样的道理,依次把D0~D15接一遍,你会得到不同的读数,看哪个读数和期望值不一样,就说明这个IO有问题。
|