首先,谢谢版主的回答。
在解释一下,如果用了FSMC控制LCD,将程序下载后,复位CPU,程序能正常启动运行,串口、RTC等都正常。但是,一旦板子断电重新上电,程序运行一段,就死机了,需要重新下载程序(这个程序不做任何修改)后,又能正常工作,一断电就不行了。
FSMC设置如下:
p.FSMC_AddressSetupTime = 0;
p.FSMC_AddressHoldTime = 0;
p.FSMC_DataSetupTime = 2;
p.FSMC_BusTurnAroundDuration = 0;
p.FSMC_CLKDivision = 0;
p.FSMC_DataLatency = 0;
p.FSMC_AccessMode = FSMC_AccessMode_B;
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
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_Disable;
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
// BANK 4 (of NOR/SRAM Bank) is enabled
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
程序会死在这个位置:
void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
{
#if(LCD_Control_FSMC)
printf("\n\rSystem Test Proint 003 ");
LCD->LCD_REG = LCD_Reg;//写入要写的寄存器序号
// LCD_Command = LCD_Reg;
printf("\n\rSystem Test Proint 004 ");
LCD->LCD_RAM = LCD_RegValue;//写入数据
// LCD_Data = LCD_RegValue;
printf("\n\rSystem Test Proint 005 ");
#else
Lcd_Write_Com_Data(LCD_Reg,LCD_RegValue);
#endif
}
如上:开始初始化LCD时,这行第一句写LCD寄存器时调用的函数,printf("\n\rSystem Test Proint 004 ");可以通过串口打印。 而printf("\n\rSystem Test Proint 005 ");就没有执行,就死机了。
如果用GPIO的方式直接控制LCD,则不会出现掉电不能正常启动的问题。
望 版主帮看看,我这是怎么回事?? 谢谢!!
|