本帖最后由 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]
降下来也是会软件重启。
我把系统时钟从180MHz降到100MHz,结果居然神奇的不会了。
一周热门 更多>