【stm32f429】使用外部SRAM做显存程序总是被复位了??

2019-07-20 17:49发布

本帖最后由 zy35 于 2016-12-21 10:42 编辑

我使用STM32F429芯片,外挂SDRAM,配置完后,我用while循环每隔1毫秒在屏幕打出一个数字,每次跑了几秒钟程序就重启一次,貌似是程序跑飞了,被复位了。
不知道什么原因,IO口配置检测过了,没有配错。

1).开启LTDC,使用STM自带的RAM做显存,正常。
2).不开启LTDC,只是对SRAM进行写入,是正常的。
3).开启LDTC,使用外部SRAM做显存,就会发送复位现象。SFTRSTF: 软件复位标志被置0了。


从1)可以看出,应该LTDC配置是没问题的。
从2)可以看出,SRAM配置也是没有问题的。
但是当外部的SRAM与LTDC配合使用时,就有问题了。搞不清楚是什么状况。
看了资料,FMS是挂在AHB3上的,LTDC是挂在APB2上面的,好像也没有相干扰吧。

求指教!!
打印函数:
[mw_shl_code=c,true] u32 i = 0;
while(1)
{
LCD_ShowNum(0,0,i++,6,32);
delay_ms(1);
}[/mw_shl_code]
SRAM配置:
[mw_shl_code=c,true]void SRAM_Init(void)
{
FMC_NORSRAM_TimingTypeDef SRAM_Timing;

/* 成员变量 Instance 和成员变量 Extended 实际上是用来在指定的时序模型下,寄存 */
/* 器基地址和扩展模式寄存器基地址 */
hsram.Instance = FMC_NORSRAM_DEVICE;
hsram.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
/* 时序参数配置 */
/* 地址建立时间 */
SRAM_Timing.AddressSetupTime = 0x00;        
/* 地址保持时间 */
SRAM_Timing.AddressHoldTime = 0x00;        
/* 数据建立时间 */
SRAM_Timing.DataSetupTime = 0x09;        
/* 总线周转阶段的持续时间 */
SRAM_Timing.BusTurnAroundDuration = 0x00;        
/* CLK 时钟输出信号的周期 */
SRAM_Timing.CLKDivision = 0x00;        
/* 同步突发 NOR FLASH 的数据延迟 */
SRAM_Timing.DataLatency = 0x00;
/* 异步模式配置 */
SRAM_Timing.AccessMode = FMC_ACCESS_MODE_A;        // 模式 A

/* */
/* 存储区块号 */
hsram.Init.NSBank = FMC_NORSRAM_BANK3;        // NE3
/* 地址/数据复用使能 */
/* 该变量仅对 NOR/PSRAM 有 效 */
hsram.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; // 设置为不使能
/* 存储器类型 */
hsram.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;        // SRAM
/* 存储器数据总线宽度 */
hsram.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;        // 存储器数据宽度为 16bit

hsram.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
hsram.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
hsram.Init.WrapMode = FMC_WRAP_MODE_DISABLE;
hsram.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
/* 存储器写使能 */
hsram.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;        // 存储器写使能
hsram.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;        
/* 是否使能扩展模式 */
/* 是否允许读写使用不同时序        */
hsram.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;        // 读写使用相同的时序
hsram.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
hsram.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
/* 启用/禁止 FMC 时钟输出到外部存储设备 */
hsram.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ASYNC;        // 禁止输出,这里不需要时钟输出。
// FMC_CONTINUOUS_CLOCK_SYNC_ASYNC FMC_CONTINUOUS_CLOCK_SYNC_ONLY


/* Initialize the SRAM controller */
/* HAL_SRAM_Init() 会调用 HAL_SRAM_Init() 进行底层IO配置 */
if(HAL_SRAM_Init(&hsram, &SRAM_Timing, &SRAM_Timing) != HAL_OK)
{
while(1);
}

}[/mw_shl_code]




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。