历史上的今天
返回首页

历史上的今天

今天是:2025年03月17日(星期一)

正在发生

2020年03月17日 | stm32 使用FSMC连接bank1的第三个存储区程序参考及说明

2020-03-17 来源:eefocus

include “sram.h”

//////////////////////////////////////////////////////////////////////////////////


//使用NOR/SRAM的 Bank1.sector3,地址位HADDR[27,26]=10 

//对IS61LV25616/IS62WV25616,地址线范围为A0~A17 

//对IS61LV51216/IS62WV51216,地址线范围为A0~A18


define Bank1_SRAM3_ADDR ((u32)(0x68000000))

//初始化外部SRAM 

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,ENABLE);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);


GPIO_InitStructure.GPIO_Pin = 0xFF33;               //PORTD复用推挽输出  1111 1111 0011 0011

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;          //复用推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);



GPIO_InitStructure.GPIO_Pin = 0xFF83;               //PORTE复用推挽输出 1111 1111 1000 0011

GPIO_Init(GPIOE, &GPIO_InitStructure);


GPIO_InitStructure.GPIO_Pin = 0xF03F;               //PORTD复用推挽输出 1111 0000 0011 1111

GPIO_Init(GPIOF, &GPIO_InitStructure);


GPIO_InitStructure.GPIO_Pin = 0x043F;               //PORTD复用推挽输出 0000 0100 0011 1111

GPIO_Init(GPIOG, &GPIO_InitStructure);



readWriteTiming.FSMC_AddressSetupTime = 0x00;    //地址建立时间(ADDSET)为1个HCLK 1/36M=27ns

readWriteTiming.FSMC_AddressHoldTime = 0x00;     //地址保持时间(ADDHLD)模式A未用到 

readWriteTiming.FSMC_DataSetupTime = 0x03;       //数据保持时间(DATAST)为3个HCLK 4/72M=55ns(对EM的SRAM芯片)  

readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;

readWriteTiming.FSMC_CLKDivision = 0x00;

readWriteTiming.FSMC_DataLatency = 0x00;            //数据产生时间

readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;     //模式A 操作时序




FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;            //  这里我们使用NE3 ,也就对应BTCR[4],[5]。

FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;      //地址数据不复用

FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;           //   FSMC_MemoryType_SRAM存储器类型为SRAM

FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;     //存储器数据宽度为16bit  

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;              //关闭Wrapped burst access mode,只有在使能突发访问模式才有效

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配置


FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);  // 使能BANK3                                         

}


//在指定地址开始,连续写入n个字节. 

//pBuffer:字节指针 

//WriteAddr:要写入的地址 

//n:要写入的字节数 

void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n) 

for(;n!=0;n–) 

(vu8)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer; 

WriteAddr++; 

pBuffer++; 

//在指定地址开始,连续读出n个字节. 

//pBuffer:字节指针 

//ReadAddr:要读出的起始地址 

//n:要写入的字节数 

void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n) 

for(;n!=0;n–) 

pBuffer++=(vu8*)(Bank1_SRAM3_ADDR+ReadAddr); 

ReadAddr++; 

//////////////////////////////////////////////////////////////////////////////////////// 

//测试函数 

//在指定地址写入1个字节 

//addr:地址 

//data:要写入的数据 

void fsmc_sram_test_write(u8 data,u32 addr) 

FSMC_SRAM_WriteBuffer(&data,addr,1);//写入1个字节 

//读取1个字节 

//addr:要读取的地址 

//返回值:读取到的数据 

u8 fsmc_sram_test_read(u32 addr) 

u8 data; 

FSMC_SRAM_ReadBuffer(&data,addr,1); 

return data; 

}

推荐阅读

史海拾趣

ADATA公司的发展小趣事

ADATA科技成立于2001年,是一家专注于提供存储解决方案的公司,以下是该公司发展的五个相关故事:

  1. 公司成立与初期发展: ADATA科技成立于2001年,总部位于台湾新北市,最初致力于生产和销售DRAM模块。随着存储技术的不断发展,公司逐渐扩展了业务范围,涵盖了闪存产品、固态硬盘、移动存储设备等多个领域。

  2. 技术创新与产品推出: ADATA科技在存储领域进行了持续的技术创新,并推出了一系列具有竞争力的产品。公司不断提升产品性能、降低成本,并注重产品的设计和用户体验。除了传统的DRAM模块,公司还推出了闪存卡、固态硬盘、移动硬盘等产品,满足了不同客户和市场的需求。

  3. 市场拓展与国际化发展: ADATA科技积极拓展国内外市场,并逐步实现了国际化发展。公司产品远销全球各地,与全球范围内的主要零售商、电子产品制造商建立了合作关系。通过与合作伙伴的紧密合作,公司产品在国际市场上得到了广泛认可和好评。

  4. 品牌建设与市场影响力: ADATA科技通过持续的品牌建设活动,不断提升了在存储领域的市场影响力。公司参加各类行业展会、展示活动,并投入大量资源进行市场推广和宣传。同时,公司还与体育、文化等领域开展赞助活动,提升品牌知名度和美誉度。

  5. 未来展望与持续发展: 作为一家专注于存储解决方案的企业,ADATA科技将继续致力于技术创新和产品开发。公司将不断改进现有产品,推出更多性能更好、功能更丰富的存储产品,以满足不断变化的市场需求。同时,公司还将继续拓展国际市场,加强与合作伙伴的合作,实现业务的持续增长和发展。

Adafruit公司的发展小趣事

Adafruit Industries是一家总部位于美国纽约的开源硬件公司,致力于设计和制造创意电子产品。以下是该公司发展的五个相关故事:

  1. 公司创立与初期阶段: Adafruit Industries由Limor Fried于2005年创立,起初是一个个人项目。Limor Fried(也被称为Ladyada)是一位热衷于开源硬件和电子制作的工程师,她在创办Adafruit之前就已经是开源硬件社区的活跃成员。最初,Adafruit专注于销售自制的电子配件和模块,并提供相关的教育资源和项目指南。

  2. 开源文化的推动者: Adafruit是开源硬件运动的积极推动者之一,致力于促进开源硬件的发展和普及。公司提倡知识共享和技术开放,通过在GitHub上发布开源硬件项目和提供详细的教程,鼓励更多人参与到电子制作和创客活动中来。

  3. 产品线的不断扩展: 随着市场需求的增长和公司规模的扩大,Adafruit逐渐扩展了产品线,涵盖了各种电子配件、传感器、开发板等。公司还推出了一系列DIY电子套件,旨在帮助用户学习电子制作和编程技能。Adafruit的产品以其高品质和易用性而著称,受到了全球创客和电子爱好者的青睐。

  4. 教育和社区建设: Adafruit积极参与教育和社区建设工作,通过在线教程、视频教程、工作坊等方式,向学生和爱好者传授电子知识和技能。公司还定期举办各种活动和比赛,鼓励创客社区的互动和交流,推动创新和创意的产生。

  5. 持续创新和发展: 作为一家持续创新的公司,Adafruit不断推出新产品和解决方案,不断满足客户不断增长的需求。公司还与各种组织和机构合作,推动开源硬件的发展和应用,努力成为开源硬件领域的领先者和推动者。随着时间的推移,Adafruit将继续秉承其开源和创新的精神,为全球创客社区带来更多的惊喜和机会。

ALLEN BRADLEY公司的发展小趣事

ALLEN BRADLEY 公司是一家享有盛誉的电子行业企业,其发展历程有许多引人注目的里程碑。以下是关于 ALLEN BRADLEY 公司发展的五个相关故事:

  1. 公司成立和早期发展: ALLEN BRADLEY 公司于1903年由Lynde Bradley和Dr. Stanton Allen 在美国威斯康星州的密尔沃基市成立。最初,公司主要从事制造电气开关、继电器和其他电气控制设备。他们的产品质量和可靠性使其迅速成为当时工业领域的领先供应商之一。

  2. 工业自动化的先驱: 在20世纪上半叶,ALLEN BRADLEY 公司成为工业自动化领域的先驱之一。他们开发了许多创新的产品和技术,如PLC(可编程逻辑控制器),这项技术彻底改变了工厂和生产线的运作方式。PLC的普及使得生产自动化水平大幅提高,为工业生产效率的提升做出了重要贡献。

  3. 公司的扩张与国际化: 随着业务的不断壮大,ALLEN BRADLEY 公司开始向全球扩张。他们在世界各地建立了销售和服务网络,为客户提供更加全面的支持。逐步建立的全球业务网络使得 ALLEN BRADLEY 成为了全球工业自动化领域的领先品牌之一。

  4. 汇丰电气(Rockwell Automation)的收购: 1990年,汇丰电气公司(Rockwell International)收购了 ALLEN BRADLEY 公司。这一收购加强了两家公司在工业自动化领域的实力,并进一步巩固了其在全球市场上的地位。汇丰电气公司将 ALLEN BRADLEY 公司的产品整合到其工业自动化解决方案中,为客户提供更加全面的解决方案和服务。

  5. 持续创新与发展: ALLEN BRADLEY 公司一直致力于持续创新和技术发展。他们不断推出新产品,引领着工业自动化技术的发展方向。通过不断地投资研发和技术创新,ALLEN BRADLEY 公司在工业自动化领域保持着领先地位,并为客户提供更加先进、高效的解决方案。

以上是 ALLEN BRADLEY 公司发展的五个相关故事,这些故事展示了该公司在电子行业中的重要地位和不断发展壮大的历程。

Cypress(赛普拉斯)公司的发展小趣事

近年来,随着汽车电子、物联网等应用领域的快速发展,Cypress也制定了新的发展战略。公司将以MCU+存储+USB为核心产品,为汽车电子、物联网等应用领域提供完整的嵌入式系统解决方案。为了实现这一目标,Cypress将继续加大研发投入,推动技术创新和产品升级。同时,公司还将加强与国际合作伙伴的合作,共同开拓新的市场和应用领域。

Electro-Films Inc Semi-Films Div公司的发展小趣事

在20世纪80年代初,Electro-Films Inc. 的创始人意识到了电子行业中对高性能薄膜材料的需求日益增加。因此,公司决定成立一个专门负责薄膜材料研发的部门,即Semi-Films Division。这个部门在成立之初就面临着巨大的挑战,但团队凭借对技术的执着追求和不懈努力,成功开发出了具有优良电气性能和机械性能的薄膜产品,为公司赢得了首批客户。

福声科技(FUET)公司的发展小趣事

福声科技(FUET)的初创可以追溯到几年前,当时电子产业正蓬勃发展,对高质量电声元器件的需求日益增长。公司创始人凭借在电声领域的深厚积累,决定成立一家专注于电声产品研发、生产和销售的企业。初期,福声科技聚焦于贴片式无源蜂鸣器、高分贝报警器等产品,凭借其高性价比和稳定的性能,迅速在家电、移动通讯设备等领域获得市场认可,为公司的后续发展奠定了坚实基础。

问答坊 | AI 解惑

基于LabVIEW的信号输出与数据采集系统

基于LabVIEW的信号输出与数据采集系统…

查看全部问答>

职业规划与职业危机

一个看上去很美的职业生涯,往往是有心人策划出来并锲而不舍地为之努力,才能成就的。然而,能在从业之初就有很明确职业规划的人,毕竟是少数,很多人的职业规划是在工作3-5年间慢慢建立起来的,甚至还有一部分人一辈子也没有明确的职业规划。   ...…

查看全部问答>

2410板子正常启动wince之后超级终端如何显示的??

小弟现在在搞wince 编译了一个内核下载到2410的开发板里面,但是现在暂时没有VGA的接口显示屏幕, 我想问一下正常启动wince在超级终端里面应该显示什么样子的??我总觉的我的有点问题ID[1] { chainInfo.dwLoadAddress: 0X00000000 chainInfo.dw ...…

查看全部问答>

Wince6.0 中文模拟器

我从这里下载wince6.0中文模拟器,然后安装到VS2005里面。最后还装了一个wince6.0。 同时也装了ActiveSync4.5. 但是这个wince6.0的中文模拟器CHSEmu Emulator,通过ActiveSync4.5 一直连接不上。 不知道是为什么?但同时我装Windows mobile 5.0 ...…

查看全部问答>

请问wince环境下如何通过gprs远程无线与exchange服务器同步?

windowsmobile下手机上有个内置的activesync客户端一直在运行的,wince下不知道有没有这个东西,如果有,使用方式和wm下是一样的吗?谢谢…

查看全部问答>

请教大家下面IC的型号和厂商?

请各位大侠和兄弟姐妹帮忙,先在此谢过了。…

查看全部问答>

利用2510-AT型自动调谐温度控制源表自动优化热电制冷器PID系数

概述 许多热电制冷器(TEC)控制器采用PI或PID(比例、积分、微分)环路实现温度控制。虽然这些环路可以提供精密的温度控制,但却要求适当的P(比例)、I(积分)、D(微分)值。在很多情况下,这些P(比例)、I(积分)、D(微分)值是通过试验和误 ...…

查看全部问答>

EK-LM3S811_ND Rev3在部分XP系统下驱动安装问题

首先,提一点我的EK-LM3S811_ND Rev3板载调试器用的是LMeb3601.然后呢,我就在我的XP系统上安装的驱动,一开始只能装一个就是如图所示的COM7,其余两个如何也装不上,我当时怀疑是板子的问题,查资料,询问有经验的人,两天过后突然想,是不是我的 ...…

查看全部问答>