新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2020-11-7
- 在线时间
- 3 小时
|
5金钱
今天写lcd屏的实验,想用读id指令试验一下通讯是否正常。结果好家伙返回0,完全没数据。
这是lcd.c的程序led.h和主程序在评论区贴,求各位大佬帮忙看看
#include "lcd.h"
void FSMC_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOB,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|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_InitStruct.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD,&GPIO_InitStruct);
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_PinSource11,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource12,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource13,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource14,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource15,GPIO_AF_FSMC);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|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_InitStruct);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource0,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOE, GPIO_PinSource1,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_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOF,&GPIO_InitStruct);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource0,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource1,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource2,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource3,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource4,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource5,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource12,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource13,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource14,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource15,GPIO_AF_FSMC);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_10|GPIO_Pin_12;
GPIO_Init(GPIOG,&GPIO_InitStruct);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource0,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource1,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource2,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource3,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource4,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource5,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource10,GPIO_AF_FSMC);
GPIO_PinAFConfig(GPIOF, GPIO_PinSource12,GPIO_AF_FSMC);
}
void FSMC_Config(void)
{
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStruct;
FSMC_NORSRAMTimingInitTypeDef FSMC_WRITETimingInitStruct;
FSMC_NORSRAMTimingInitTypeDef FSMC_READTimingInitStruct;
FSMC_WRITETimingInitStruct.FSMC_AddressSetupTime=11;
FSMC_WRITETimingInitStruct.FSMC_AddressHoldTime=0;
FSMC_WRITETimingInitStruct.FSMC_DataSetupTime=11;
FSMC_WRITETimingInitStruct.FSMC_BusTurnAroundDuration=0;
FSMC_WRITETimingInitStruct.FSMC_CLKDivision=0;
FSMC_WRITETimingInitStruct.FSMC_DataLatency=0;
FSMC_WRITETimingInitStruct.FSMC_AccessMode=FSMC_AccessMode_B;
FSMC_READTimingInitStruct.FSMC_AddressSetupTime=77;
FSMC_READTimingInitStruct.FSMC_AddressHoldTime=0;
FSMC_READTimingInitStruct.FSMC_DataSetupTime=77;
FSMC_READTimingInitStruct.FSMC_BusTurnAroundDuration=0;
FSMC_READTimingInitStruct.FSMC_CLKDivision=0;
FSMC_READTimingInitStruct.FSMC_DataLatency=0;
FSMC_READTimingInitStruct.FSMC_AccessMode=FSMC_AccessMode_B;
FSMC_NORSRAMInitStruct.FSMC_Bank=FSMC_Bank1_NORSRAM4;
FSMC_NORSRAMInitStruct.FSMC_DataAddressMux=FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStruct.FSMC_MemoryType=FSMC_MemoryType_NOR;
FSMC_NORSRAMInitStruct.FSMC_MemoryDataWidth=FSMC_MemoryDataWidth_16b;
FSMC_NORSRAMInitStruct.FSMC_BurstAccessMode=FSMC_BurstAccessMode_Disable;
FSMC_NORSRAMInitStruct.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
FSMC_NORSRAMInitStruct.FSMC_WaitSignalPolarity=FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStruct.FSMC_WrapMode=FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStruct.FSMC_WaitSignalActive=FSMC_WaitSignalActive_BeforeWaitState ;
FSMC_NORSRAMInitStruct.FSMC_WriteOperation=FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStruct.FSMC_WaitSignal=FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStruct.FSMC_ExtendedMode=FSMC_ExtendedMode_Enable;
FSMC_NORSRAMInitStruct.FSMC_WriteBurst=FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStruct.FSMC_ReadWriteTimingStruct=&FSMC_READTimingInitStruct;
FSMC_NORSRAMInitStruct.FSMC_WriteTimingStruct=&FSMC_WRITETimingInitStruct;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStruct);
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4,ENABLE);
}
void LCD_Write_Data(uint16_t data)
{
uint16_t *p=(uint16_t *)(LCD_DATA_ADDR);
*p=data;
}
void LCD_Write_Cmd(uint16_t data)
{
uint16_t *p=(uint16_t *)(LCD_CMD_ADDR);
*p=data;
}
uint16_t LCD_Read_Data(void)
{
uint16_t *p=(uint16_t *)(LCD_DATA_ADDR);
return *p;
}
uint32_t LCD_Read_ID(void)
{
uint16_t id=0;
LCD_Write_Cmd(0xd3);
LCD_Read_Data();
LCD_Read_Data();
id=LCD_Read_Data();
id<<=8;
id|=LCD_Read_Data();
return id;
}
|
|