|
我用的是STM32VC,里面只有一个NE1,所以只能配置成FSMC_Bank1_NORSRAM1,如下配置:
static void LCD_FSMCConfig(void)
{
FSMC_NORSRAMInitTypeDef init;
FSMC_NORSRAMTimingInitTypeDef timing;
/*-- FSMC Configuration ------------------------------------------------------*/
/*----------------------- SRAM Bank 4 ----------------------------------------*/
/* FSMC_Bank1_NORSRAM4 configuration */
timing.FSMC_AddressSetupTime = 1;
timing.FSMC_AddressHoldTime = 0;
timing.FSMC_DataSetupTime = 2;
timing.FSMC_BusTurnAroundDuration = 0;
timing.FSMC_CLKDivision = 0;
timing.FSMC_DataLatency = 0;
timing.FSMC_AccessMode = FSMC_AccessMode_A;
/*
LCD configured as follow:
- Data/Address MUX = Disable
- Memory Type = SRAM
- Data Width = 16bit
- Write Operation = Enable
- Extended Mode = Enable
- Asynchronous Wait = Disable
*/
init.FSMC_Bank = FSMC_Bank1_NORSRAM1;
init.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
init.FSMC_MemoryType = FSMC_MemoryType_SRAM;
init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
init.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
// init.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; /* ×¢òa¾é¿aÎTÕa¸ö3éÔ± */
init.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
init.FSMC_WrapMode = FSMC_WrapMode_Disable;
init.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
init.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
init.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
init.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
init.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
init.FSMC_ReadWriteTimingStruct = &timing;
init.FSMC_WriteTimingStruct = &timing;
FSMC_NORSRAMInit(&init);
/* - BANK 3 (of NOR/SRAM Bank 1~4) is enabled */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
但是每次一运行到这一句后if (RA8875_ReadID() == 0x75),也就是一执行总线数据操作,就跳到死循环去了,如下
void HardFault_Handler(void)
{
/* μ±ó2¼tê§D§òì3£·¢éúê±½øèëËàÑ-»· */
while (1)
{
}
}
这是什么原因呢?
我的屏的硬件接法,是这样子的
47 PB10---8 INT#
48 PB11---7 WAIT#
59 PD12(A17)---80 RS
60 PD13(A18)---79 CS
85 PD4(NOE)----77 RD
86 PD5(NWE)----78 WR
也就是CS连的不是NE1,但是我看了一下论坛版主说的CS脚直接拉地也可以工作的,实际当中我用示波器测量CS脚,确实是低电平,,所以我对总线地址是配置如下:
#define RA8875_REG *(__IO uint16_t *)(0x60000000+ 1<<18)
#define RA8875_RAM *(__IO uint16_t *)(0x60000000)
这样配置有问题吗? |
|