STM32F103 mdk堆栈溢出问题求解!

2019-07-20 18:44发布

现象:方式一:

main函数调用初始化函数BSP_Init();
BSP_Init();再调用显示屏初始化函数LCD_Initial();
LCD_Initial();中调用FSMC初始化函数FSMC_LCD_Init();       
函数调用嵌套:
main()----BSP_Init()----LCD_Initial()------FSMC_LCD_Init()
按上述方法操作运行不正常;

启动文件配置如下:
Stack_Size      EQU     0x0000400
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp
Heap_Size       EQU     0x0000200
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit


方式二:把Stack_Size和Heap_Size都配置为0x0001000也一样不能正常显示。

方式三:
如果把SMC_LCD_Init();        移出-LCD_Initial()函数,放到main()或BSP_Init()则能正常显示,或者把FSMC_LCD_Init()中的局部变量定义成全局变量也能正常显示。



SMC_LCD_Init()函数如下:
void FSMC_LCD_Init_L(void)
{
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef  p;
        //GPIO_InitTypeDef GPIO_InitStructure;

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);

        p.FSMC_AddressSetupTime = 15;
        p.FSMC_AddressHoldTime = 15;
        p.FSMC_DataSetupTime = 255;
        p.FSMC_BusTurnAroundDuration = 0;
        p.FSMC_CLKDivision = 15;
        p.FSMC_DataLatency = 15;
        p.FSMC_AccessMode = FSMC_AccessMode_B;

        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
        FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
        //FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM;
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_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_WaitSignalActive = FSMC_WaitSignalActive_DuringWaitState;  
        FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
        //FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Enable;
        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);

        /* Enable FSMC Bank1_SRAM Bank */
        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  
}



求指点问题出在哪?为什么修改堆栈大小也没用,是没改对地方吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。