当前位置>首页> 问答> 科技前沿 > 正文

STM32F407上FSMC的SRAM驱动问题,总是有个别字节不出来不对

问题描述:

各位:我用的是STM32F407IGT6 驱动IS61Wv25616BLL-10TLI。在测试SRAM过程中发现,写入的数据读出来去总是有个别地址数据不对(整个512KB也就30个左右字节有问题,地址是随机的)。但是通过仿真器直接看Memory里的数据确是对的。如果通过修改代码,在出错的地址从新读一次,也能读出正确数据。在开发板上读写每次都是正常的。自己画的主板仅仅调整了CS(代码也做了相应调整)可就是总有上述问题。难道是布线问题?数据线、地址线、一定要等长?频率不高啊,168MHZ,。然后8分频后一样出错。我看网络上说SRAM问题的基本都是STM的用户,难道真有什么特别要注意的地方?一下是我的源码请大侠指正:void SRAM_Init(void){  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;  FSMC_NORSRAMtimingInitTypeDef  p;  GPIO_InitTypeDef GPIO_InitStructure;     /* Enable GPIOs clock */  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF |                         RCC_AHB1Periph_GPIOG , ENABLE);  /* Enable FSMC clock */  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);   /*-- GPIOs Configuration -----------------------------------------------------*//* +-------------------+--------------------+------------------+------------------+ +                       SRAM pins assignment                                   + +-------------------+--------------------+------------------+------------------+ | PD0   FSMC_D2  | PE0   FSMC_NBL0 | PF0   FSMC_A0 | PG0  FSMC_A10 | | PD1   FSMC_D3  | PE1   FSMC_NBL1 | PF1   FSMC_A1 | PG1  FSMC_a11 | | PD4   FSMC_NOE | PE3   FSMC_A19  | PF2   FSMC_A2 | PG2  FSMC_A12 | | PD5   FSMC_NWE | PE4   FSMC_A20  | PF3   FSMC_A3 | PG3  FSMC_A13 | | PD8   FSMC_D13 | PE7   FSMC_D4   | PF4   FSMC_A4 | PG4  FSMC_A14 | | PD9   FSMC_D14 | PE8   FSMC_D5   | PF5   FSMC_A5 | PG5  FSMC_A15 | | PD10  FSMC_D15 | PE9   FSMC_D6   | PF12  FSMC_A6 | PG9  FSMC_NE2 | | PD11  FSMC_A16 | PE10  FSMC_D7   | PF13  FSMC_A7 |------------------+ | PD12  FSMC_A17 | PE11  FSMC_D8   | PF14  FSMC_A8 | | PD13  FSMC_A18 | PE12  FSMC_D9   | PF15  FSMC_A9 | | PD14  FSMC_D0  | PE13  FSMC_D10  |------------------+ | PD15  FSMC_D1  | PE14  FSMC_D11  | |                   | PE15  FSMC_D12  | +-------------------+--------------------+*/  /* GPIOD configuration */  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);  //cs1  GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);   GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |                                 GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |                                GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;  GPIO_Init(GPIOD, &GPIO_InitStructure);  /* GPIOE configuration */  GPIO_PinAFConfig(GPIOE, GPIO_PinSource0 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource1 , GPIO_AF_FSMC);  //GPIO_PinAFConfig(GPIOE, GPIO_PinSource2 , GPIO_AF_FSMC);  //GPIO_PinAFConfig(GPIOE, GPIO_PinSource3 , GPIO_AF_FSMC);  //GPIO_PinAFConfig(GPIOE, GPIO_PinSource4 , GPIO_AF_FSMC);  //GPIO_PinAFConfig(GPIOE, GPIO_PinSource5 , GPIO_AF_FSMC);  //GPIO_PinAFConfig(GPIOE, GPIO_PinSource6 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0  | GPIO_Pin_1  | //GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 |                                GPIO_Pin_7  | GPIO_Pin_8  | GPIO_Pin_9  | GPIO_Pin_10 |                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |                                GPIO_Pin_15;  GPIO_Init(GPIOE, &GPIO_InitStructure);  /* GPIOF configuration */  GPIO_PinAFConfig(GPIOF, GPIO_PinSource0 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource1 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource2 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource3 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource4 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource5 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource12 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource13 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource14 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOF, GPIO_PinSource15 , GPIO_AF_FSMC);    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0  | GPIO_Pin_1  | GPIO_Pin_2  | GPIO_Pin_3 |                                 GPIO_Pin_4  | GPIO_Pin_5  |                                 GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;       GPIO_Init(GPIOF, &GPIO_InitStructure);  /* GPIOG configuration */  GPIO_PinAFConfig(GPIOG, GPIO_PinSource0 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOG, GPIO_PinSource1 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOG, GPIO_PinSource2 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOG, GPIO_PinSource3 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOG, GPIO_PinSource4 , GPIO_AF_FSMC);  GPIO_PinAFConfig(GPIOG, GPIO_PinSource5 , GPIO_AF_FSMC);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0  | GPIO_Pin_1  | GPIO_Pin_2  | GPIO_Pin_3 |                                 GPIO_Pin_4  | GPIO_Pin_5  ;   GPIO_Init(GPIOG, &GPIO_InitStructure);/*-- FSMC Configuration ------------------------------------------------------*/    p.FSMC_AddressSetupTime = 6;    p.FSMC_AddressHoldTime = 3;    p.FSMC_DataSetupTime = 6;    p.FSMC_BusTurnAroundDuration = 0x1;   p.FSMC_CLKDivision = 0;      p.FSMC_DataLatency = 0;    p.FSMC_AccessMode = FSMC_AccessMode_A;  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;   FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;     FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;    FSMC_NORSRAMInitStructure.FSMC_burstAccessMode = FSMC_BurstAccessMode_Disable;   FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;   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 = &p;   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);   }uint32_t SRAM_Test(void){ uint32_t NumHalfwordToWrite=0,Errtimes=0;  uint32_t WriteAddr=0;  uint32_t ReadAddr;  uint16_t Buffer;  for (NumHalfwordToWrite=0; NumHalfwordToWrite

阅读1324 关键字: STM32 FSMC sram
回答:
  • 杨美娟 2020-03-27
    你的外扩sram逆时针旋转90度你的电路就会好很多,目前就降低外部总线频率使用(常用数据或参与大规模运算的数据使用内部sram)。同时你的sram是10ns的,所以你要关注一下下面几个值的设计(与你设计的sram使用的频率有关,所以不好直接给出结果),  p.FSMC_AddressSetupTime = 6;    p.FSMC_AddressHoldTime = 3;    p.FSMC_DataSetupTime = 6;    p.FSMC_BusTurnAroundDuration = 0x1;   p.FSMC_CLKDivision = 0;      p.FSMC_DataLatency = 0;  你可以考虑使用示波器分析一下总线驱动速度。
这款类脑智能芯片,高效能、高容错、高实时,支持时间序列处理,近乎无损量化部署并已成功应用。你还在等什么?
相关推荐
电子内窥镜解决方案
公司电子内窥镜解决方案,针对临床痛点的解决方案,包括以下产品: 1、呼吸麻醉:可视喉镜系列产品,应对新冠疫情的可视化气道管理解决方案; 2、泌尿外科:硬质电子经皮肾镜;MPCNL术式,新型李逊镜肾结石清除解决方案; 3、肝胆外科:硬质电子胆道镜;PTCSL术式,新型电子硬镜(王平镜)肝内胆管结石及微创保胆解决方案。
领域:医学影像诊断技术
轻量化“数字孪生”3D引擎推动企业数字化转型发展
公司在 “数字孪生”核心支撑技术—3D轻量化领域已耕耘多年,形成了极具门槛的核心技术积累。截止目前,已为国内超过400家客户,涵盖制造业、工程建筑行业、高等院校,提供了3D轻量化产品及技术服务,应用于近500多个重大项目或系统平台建设。 主要产品与服务有: (1) 3D/BIM/GIS轻量化融合引擎(WebGL/服务器端渲染); (2) BIM/GIS施工管理平台; (3) CAD图纸轻量化引擎(WebGL); (4) 图模管理协同平台; (5) 汇报演示系统; (6) 图模查看工具; (7) 3D可视化沙盘搭建系统; (8) 搭建智慧工厂、化工、矿山、电力领域的3D设备模型交易平台。
领域:Web服务与集成软件
药物缓释鼻腔通气及术后支撑系统
国内首家专注鼻科医疗器械研发、生产和销售的科技公司,聚焦鼻腔领域的刚需,为更高效、舒适、安全、经济的临床解决方案提供支持。 核心产品是鼻腔支架,其有效性、舒适性、安全性 均远高于被替代器材。国内尚无厂家报批,门槛高,公司有更长的高利润窗口期。 智能镍钛记忆合金制成的中空填充鼻腔支架产品,即鼻腔微创支架,前鼻孔支架,后鼻孔支架。该系列支架在临床手术后可被安置到鼻腔,并牢固地附着在鼻腔所需位置,从而起到压迫、重塑、止血的作用,并保证顺畅通气,而目前临床常用的膨胀海绵之类的填充物会堵住鼻腔,鼻腔支架产品在有效鼻腔填塞压迫塑形的同时,可以在鼻腔中形成通气通道,不影响患者的通气。鼻腔支架是医疗耗材和治疗策略的改进,有并发症无法做鼻腔手术的病人,用一种新型的诊疗方式,替代手术方案。
领域:其他
植物精油芯片缓释技术在驱蚊手环中的应用与产业化
基于药用植物精油作为天然驱蚊剂的应用前景和存在的弊端分析,项目通过研究植物精油芯片缓释技术在驱蚊手环中的应用,从精油复配、浓度配比、包裹技术等方面进行研究测试,致力于生产自带舒适圈的植物精油驱蚊手环,实现长效保护、天然安全等功能,适用于不同场景不同人群。该技术充分利用药用植物精油的良好的环境相容性、怡人的香味、对人及哺乳动物无毒、无残留等优势,对日后研发出更多更稳定、高效、实用的驱蚊产品奠定了良好的基础。公司专业从事母婴驱蚊产品的研发和制造、分销和零售,具有全球视野,产品范围涵盖运用高分子缓释技术的纯植物驱蚊产品,及蚊虫叮后护理、灭蚊器等一系列产品。
领域:天然药物生物合成制备技术
激光质子刀关键技术突破及激光器产业化
质子疗法是肿瘤放射治疗的一种,该疗法将氢原子核中的质子通过粒子加速器释放高能量射线进行治疗。 由于质子束在组织中独特的吸收曲线(称为布拉格峰),它可以提供更好的剂量分布,允许在肿瘤部位沉积最大的破坏性能量,同时最大限度地减少沿路径对健康组织的损害。 全球首创激光驱动的离子加速:相比于目前质子疗法使用的传统加速器,激光驱动的离子束加速梯度高,能在很短的距离加速到很高的能量,具有源尺寸小、脉冲短、亮度高和能谱宽等特点,在等离子体电磁场诊断、核聚变质子快点火、质子照相、癌症治疗和温稠密物质产生等方面有着广阔的应用前景。 全国产化,全球顶尖的下一代小型化激光质子刀,既完成了对传统放疗的替代,又实现了对大型加速设备的源头创新,引发成本革命,是解决商业化痛点的终局方案。
领域:新型治疗、急救与康复技术
智慧林长制全面解决方案
林长制是以保护发展森林等生态资源为目标, 以压实地方党委政府领导干部责任为核心, 以制度体系建设为保障, 以监督考核为手段, 构建由地方党委政府主要领导担任总林长, 省、市、县、乡、村分级设立林(草)长, 聚焦森林草原资源保护发展重点难点工作, 实现党委领导、党政同责、属地负责、部门协同、全域覆盖、源头治理的长效责任体系。 公司的核心技术团队均有十余年从事“智慧城市”领域的经验,具备新型智慧林业顶层设计、全面解决方案、项目研发及实施的全过程管理能力;主导和参与的项目累计金额达数亿元。 公司具备测绘高级工程师、信息化中高级工程师、系统集成等中高级工程师数十人;具有地方标准和行业标准制定能力和丰富的经验;核心成员曾主导及参与出版发行行业信息化专著。 公司主营业务是智慧/数字林业,围绕林业系统的相关业务,是林业行业领域,提供智慧林长制全面解决方案的服务商。
领域:物联网应用软件
自拟中药汤是什么?
自拟中药汤是什么?
探讨自拟中药汤配合熏蒸推拿法治疗类风湿关节炎的临床效果。方法将52例类风湿关节炎患者分为观察组和治疗组各26例,实施自拟中药汤配合熏蒸推拿法治疗,对照组患者采用常规治疗,并比较两组患者的治疗效果。
关键词:临床效果,中药汤,类风湿关节炎,推拿法
波导耦合器专利申请
波导耦合器专利申请
波导耦合器是一种常用的微波器件,用于在不同波导系统之间传输微波信号。其工作原理基于电磁波在波导内的传输特性,通过特定的结构设计,实现不同波导之间的能量耦合和传输。波导耦合器的基本结构包括输入波导口、输出波导口和耦合部件。
关键词:平面弯曲,波导器件,波导耦合器
自动投切专利申请
自动投切专利申请
自动投切是通过自动装置来实现的。这种装置能够根据电网的运行状态,通过感应器对电容器的运行进行自动调控,并在需要时自动进行投切。自动投切装置在电力系统中有着广泛的应用,包括重要机房、计算机房等关键设备的电力保障,电力系统中重要设备、通信设备的备用电源,以及火灾、地震等紧急情况下的电力供应保障。
关键词:自动投切,实现方式,并联电容器
口令码变换算法的用途
口令码变换算法的用途
口令码变换算法通常涉及一系列的操作,用于将原始口令转换为另一种形式,以增强安全性或满足特定的应用需求。
关键词:保密,加解密,大型企业,财会
半刚性基层底拉应力研发方向
半刚性基层底拉应力研发方向
半刚性基层底拉应力是指半刚性路面基层底面在行车荷载作用下产生的拉应力。在路面结构中,半刚性基层起到提高整体承载能力并降低土基承受的荷载强度的作用。然而,半刚性基层本身的拉应力相对集中,若超过极限则可能导致路面结构损坏。
关键词:正交试验,底基层,半刚性基层,设计参数,拉应力,半刚性基层底拉应力
空压机组技术哪里有?
空压机组技术哪里有?
空压机组是一种将机械能转换成气体压力能的能源转换装备,主要由泵头组件、气罐组件和管阀组件等部分组成。泵头组件是空压机的核心部件,主要负责压缩空气,完成能量的转换;气罐组件是空压机的存储部件,负责储存压缩后的气体;管阀组件是空压机的输控部件,负责连接泵头和气罐输送气体,并控制气体流通。
关键词:城际动车组,实际应用,空压机组
直接横摆力矩控制技术哪里有?
直接横摆力矩控制技术哪里有?
直接横摆力矩控制(DYC)是一种车辆运动稳定的有效方法,它通过对车轮上纵向力的调节,直接构成对车辆质心的横摆力矩,以克服车辆的前轴或后轴侧滑,提高车辆的操纵稳定性。在车辆处于低附着系数路面、大侧向加速度等极限工况下行驶时,车轮上的侧偏力已处于饱和状态,此时无法单纯依靠转向控制来提高车辆的稳定性。然而,车轮上的纵向力往往还有很大的裕度可以被利用,DYC正是基于这一原理来提高车辆的操纵稳定性。
关键词:电机驱动,分布式驱动,横摆力矩,直接横摆力矩控制
碳酸盐含量的用途
碳酸盐含量的用途
碳酸盐含量主要指的是血液中的二氧化碳含量,这是人体新陈代谢产生的废气。通过测量呼气中的二氧化碳含量,可以确定碳酸盐含量,并用于计算氧合指数。在建筑材料、食品工业、医药和环保领域,碳酸盐都有着广泛的应用。
关键词:储层,岩心,体积分数,测井资料,塔拉,碳酸盐含量
官方社群
——    我要提问    ——

您已成功提交问答

专员将会在24小时内完成审核。