初级会员

- 积分
- 68
- 金钱
- 68
- 注册时间
- 2015-7-20
- 在线时间
- 12 小时
|
5金钱
请教各位高手,我做了个STM32F103VET6+RA8875的方案,在调试中发现在读RA8875 DDRAM时,无法正常读出。
查看数据地址,发现数据前4个字节一直是0,到第5个字节才是正常字节,如:00 00 00 00 FF FF FF FF,这就造成我读的数据不正确。
麻烦大家帮我看看问题出在哪儿。
#define LCD_COMM_ADD *((vu16 *)0X6C000800)
#define LCD_DATA_ADD *((vu16 *)0X6C000000)
#define WriteCommand(cmd) {LCD_COMM_ADD = cmd;}
#define WriteData(data) {LCD_DATA_ADD = data;}
void ra8875_init(void)
{
u8 i,temp;
GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef FSMC_LCDWRITE;
FSMC_NORSRAMTimingInitTypeDef FSMC_LCDREAD;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8| GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_4 | GPIO_Pin_5 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
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_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_12 ;
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//8875WAIT
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG,&GPIO_InitStructure);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);//开FSMC时钟
/*---------------FSMC配置----------------*/
FSMC_LCDWRITE.FSMC_AddressSetupTime =0;
FSMC_LCDWRITE.FSMC_AddressHoldTime = 0;
FSMC_LCDWRITE.FSMC_DataSetupTime =3;
FSMC_LCDWRITE.FSMC_BusTurnAroundDuration = 0;
FSMC_LCDWRITE.FSMC_CLKDivision = 0;
FSMC_LCDWRITE.FSMC_DataLatency = 0;
FSMC_LCDWRITE.FSMC_AccessMode = FSMC_AccessMode_A;
FSMC_LCDREAD.FSMC_AddressSetupTime =0;
FSMC_LCDREAD.FSMC_AddressHoldTime = 0;
FSMC_LCDREAD.FSMC_DataSetupTime =3;
FSMC_LCDREAD.FSMC_BusTurnAroundDuration = 0;
FSMC_LCDREAD.FSMC_CLKDivision = 0;
FSMC_LCDREAD.FSMC_DataLatency = 0;
FSMC_LCDREAD.FSMC_AccessMode = FSMC_AccessMode_A;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
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_Enable;//此处大部分例程设为禁止,我设为禁止时什么数都读不出来
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_LCDREAD;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_LCDWRITE;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
}
//------------------内存读出时光标起始点设置(图形模式)------------------//
void SetCursor_Memread(u16 x0,u16 y0)
{
WriteReg(0x45, 0x00);
WriteReg(0x4a, x0);
WriteReg(0x4b, x0 >> 8);
WriteReg(0x4c, y0);
WriteReg(0x4d, y0 >> 8);
}
//------------------获取点的颜色-------------------//
u16 LCD_GetPixel(u16 x0,u16 y0)
{
u16 temp;
SetCursor_Memread(x0,y0);
LCD_COMM_ADD = 0x02;
temp=LCD_DATA_ADD ;
return temp;
}
|
|