OpenEdv-开源电子网

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

stm32f103zet6使用外部sram 65WV102416DBLL 无地址分配

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-3-27
在线时间
15 小时
发表于 2018-10-10 14:38:14 | 显示全部楼层 |阅读模式
3金钱
使用stm32f103zet6新品,外置65WV102416DBLL,配置fsmc 但是分配空间失败,一直没有分配到空间
代码如下:
#define Bank1_SRAM3_ADDR    ((u32)(0x60000000 | 0x08000000))       
                                                    
void FSMC_SRAM_Init(void)
{       
        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);

        GPIO_InitStructure.GPIO_Pin = 0xFF33;                                  //PORTD¸′óÃíÆíìêä3ö
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //íÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = 0xFF8B;                                  //PORTE¸′óÃíÆíìêä3ö
        GPIO_Init(GPIOE, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = 0xF03F;                                  //PORTD¸′óÃíÆíìêä3ö
        GPIO_Init(GPIOF, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = 0x143F;                                  //PORTD¸′óÃíÆíìêä3ö  143F
        GPIO_Init(GPIOG, &GPIO_InitStructure);
                                             
        readWriteTiming.FSMC_AddressSetupTime = 0x00;         //μØÖ·½¨á¢ê±¼ä£¨ADDSET£©Îa1¸öHCLK 1/36M=27ns
        readWriteTiming.FSMC_AddressHoldTime = 0x00;         //μØÖ·±£3Ö걼䣨ADDHLD£©Ä£ê½AÎ′óÃμ½       
        readWriteTiming.FSMC_DataSetupTime = 0x03;                 //êy¾Y±£3Ö걼䣨DATAST£©Îa3¸öHCLK 4/72M=55ns(¶ÔEMμÄSRAMD¾Æ¬)         
        readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
        readWriteTiming.FSMC_CLKDivision = 0x00;
        readWriteTiming.FSMC_DataLatency = 0x00;
        readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;         //Ä£ê½A FSMC NOR ¿ØÖÆÆ÷ê±Dò ′æ′¢Æ÷ààDí¡¢RAMêy¾Y¿í¶è¡¢AMμØÖ··¶Î§¡¢óÃμÄFSMC BANK¡¢FSMC1¤×÷Ä£ê½μÄ3õê¼»ˉμè

//μØÖ·μÄ·ÖÅ䣬μØÖ·óëÆ¬Ñ¡1ò13£¬ò2¾íêÇËμÆ÷¼t1òÔØÔúÄĸöƬѡòy½ÅéÏ£¬¾í1춨áË·ÃÎêμØÖ··¶Î§oíFSMC_NORSRAMInitStructure.FSMC_Bank
//0x60000000~0x63FFFFFF                FSMC_Bank1_NORSRAM1
//0x64000000~0x67FFFFFF                FSMC_Bank1_NORSRAM2
//0x68000000~0x6BFFFFFF                FSMC_Bank1_NORSRAM3
//0x6C000000~0x6FFFFFFF                FSMC_Bank1_NORSRAM4
        FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;//  ÕaàïÎòÃÇê1óÃNE3 £¬ò2¾í¶Ôó|BTCR[4],[5]¡£
       
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; //½ûÖ1μØÖ·êy¾YÏ߸′óÃ
        FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;//SRAM   
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//′æ′¢Æ÷êy¾Y¿í¶èÎa16bit  
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable;1رÕí»·¢·ÃÎêÄ£ê½
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; //μè′yDÅoÅóÅÏè¼¶£¬Ö»óDÔúê1Äüí»·¢·ÃÎêÄ£ê½2ÅóDD§
        FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;  //1رÕWrapped brust access mode Ö»óDÔúê1Äüí»·¢·ÃÎêÄ£ê½2ÅóDD§
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; //μè′yDÅoÅéèÖã¬Ö»óDÔúê1Äüí»·¢·ÃÎêÄ£ê½2ÅóDD§
        FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;        //′æ′¢Æ÷D′ê1Äü
        FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;  //ê1Äü/1رÕμè′yDÅÏ¢éèÖã¬Ö»Ôúê1Äüí»·¢·ÃÎêÄ£ê½2ÅóDD§
        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; // ¶áD′ê1óÃÏàí¬μÄê±Dò
        FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; //1رÕwrite burst mode
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; // ¶áD′ê1óÃÏàí¬μÄê±Dò
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;  // ¶áD′ê1óÃÏàí¬μÄê±Dò

        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //3õê¼»ˉFSMCÅäÖÃ

        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);  // ê1ÄüBANK1                                                                                       
}

望各位大神帮忙看一下哪地方不对

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-11 02:12:58 | 显示全部楼层
参考我们例程找问题吧,发一堆代码很难看。。。
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-3-27
在线时间
15 小时
 楼主| 发表于 2018-10-11 08:21:09 | 显示全部楼层
正点原子 发表于 2018-10-11 02:12
参考我们例程找问题吧,发一堆代码很难看。。。

原子哥,程序设置硬件连接地址线是随便连接的,数据线对应连接,然后配置将i/o口全部使能,设置复用模式,出现的情况是分配地址就分配不上去,参照实例了,实在没发现问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-12 02:27:53 | 显示全部楼层
ddboy 发表于 2018-10-11 08:21
原子哥,程序设置硬件连接地址线是随便连接的,数据线对应连接,然后配置将i/o口全部使能,设置复用模式 ...

没毛病,地址线可以乱接。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2018-3-27
在线时间
15 小时
 楼主| 发表于 2018-10-12 08:51:19 | 显示全部楼层
正点原子 发表于 2018-10-12 02:27
没毛病,地址线可以乱接。

调试的使用一直没有分配成功地址,跟踪了一下看到在分配地址的函数中my_mem_malloc()中的mallco_dev.memmap[memx][offset]的值一直是0x0004,导致
if(!mallco_dev.memmap[memx][offset])cmemb++;
                else cmemb=0;       
一直执行的是else下面的语句,所以分配出来的是0xffffffff错误地址
这个是什么原因?
谢谢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-13 02:27:21 | 显示全部楼层
ddboy 发表于 2018-10-12 08:51
调试的使用一直没有分配成功地址,跟踪了一下看到在分配地址的函数中my_mem_malloc()中的mallco_dev.memm ...

你先确定下驱动是否正确,往SRAM写满数据,然后重读,看有没有毛病
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-13 02:27:26 | 显示全部楼层
ddboy 发表于 2018-10-12 08:51
调试的使用一直没有分配成功地址,跟踪了一下看到在分配地址的函数中my_mem_malloc()中的mallco_dev.memm ...

你先确定下驱动是否正确,往SRAM写满数据,然后重读,看有没有毛病
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 21:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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