OpenEdv-开源电子网

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

关于stm32f103芯片 挂载sram 地址分配不成功问题

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-3-27
在线时间
15 小时
发表于 2018-10-12 14:07:03 | 显示全部楼层 |阅读模式
5金钱
硬件信息:芯片是stm32f103zet6
sram是is62wv102416dbll 45tli硬件连接关系:
A[0:19]   FSMC_A[0:19]--------------PF[0:5]  PF[12:15]   PG[0:5]  PD[11:13]   PE3
I/O[0:15]  FSMC_D[0:15]------------PD[14,15]  PD[0,1]  PE[7:15]  PD[8:10]
UB-------NBL1----------PE1
LB--------NBL0----------PE0
OE-------NOE------------PD4
WE-------NWE-----------PD5
CS1-------NE3------------PG10
CS2-------NE4------------PG12
软件配置如下:
#define Bank1_SRAM3_ADDR    ((u32)(0x60000000 | 0x08000000))

        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);
        //PD[0,1]  [4,5]  [8:15]使能
        GPIO_InitStructure.GPIO_Pin = 0xFF33;                                 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitStructure);
        //PE[0,1] [3] [7,15]使能
        GPIO_InitStructure.GPIO_Pin = 0xFF8B;                                 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOE, &GPIO_InitStructure);
        //PF[0:5] [12,15]使能
        GPIO_InitStructure.GPIO_Pin = 0xF03F;                                 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOF, &GPIO_InitStructure);
        //PG[0:5] [10] [12]使能
        GPIO_InitStructure.GPIO_Pin = 0x143F;                                 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOG, &GPIO_InitStructure);
                                             
        readWriteTiming.FSMC_AddressSetupTime = 0x00;         
        readWriteTiming.FSMC_AddressHoldTime = 0x00;                
        readWriteTiming.FSMC_DataSetupTime = 0x03;                 
        readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
        readWriteTiming.FSMC_CLKDivision = 0x00;
        readWriteTiming.FSMC_DataLatency = 0x00;
        readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;       


        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
       
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
        FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;//SRAM   
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
        FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
        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 = &readWriteTiming;
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;

        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);

        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);         




出现问题:程序运行,使用malloc申请空间,地址申请失败在malloc.c   的  my_mem_malloc函数中的   if(!mallco_dev.memmap[memx][offset])cmemb++;中mallco_dev.memmap[memx][offset]的值是0x0004,这个是什么原因?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-13 02:15:46 | 显示全部楼层
先测试你的外部SRAM是否正常驱动了,你可以试试网里面写满数据,然后读取下,是否正常。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-13 02:15:49 | 显示全部楼层
先测试你的外部SRAM是否正常驱动了,你可以试试网里面写满数据,然后读取下,是否正常。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 20:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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