OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5248|回复: 2

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

[复制链接]

16

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-11-24
在线时间
30 小时
发表于 2016-12-20 18:09:35 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 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]




read.png
write.png
softreset.png

最佳答案

查看完整内容[请看2#楼]

降下来也是会软件重启。 我把系统时钟从180MHz降到100MHz,结果居然神奇的不会了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2016-11-24
在线时间
30 小时
 楼主| 发表于 2016-12-20 18:09:36 | 显示全部楼层
正点原子 发表于 2016-12-26 00:49
试试不那么快打印数据看看

降下来也是会软件重启。
我把系统时钟从180MHz降到100MHz,结果居然神奇的不会了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-12-26 00:49:30 | 显示全部楼层
试试不那么快打印数据看看
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 06:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表