ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:55.95KB ,
资源ID:21709396      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21709396.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32驱动SPI接口FLASH文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

STM32驱动SPI接口FLASH文档格式.docx

1、向器件发送获得地址的命令连续发送三个任意数据在发送第四个任意数据时在DO口上读出器件地址。注意,发送完读地址后,从机会将数据自动传给主机的SPI数据寄存器中,用户只要到该寄存器中取数就可以了。好的,既然用到写命令那么我们写来写这两个最基础的程序。写数据函数:/*FunctionName:SPI_FLASH_SendByteDescription通过SPI总线发送一字节数据,再通过SPI总线返回一字节数据Inputbyte要发送的数据Output从机返回的数据被SPI_FLASH_ReadDeviceID调用*/u8SPI_FLASH_SendByte(u8byte)等待SPI发送寄存器里的数据

2、发送结束 while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)=RESET);发送数据*/SPI_I2S_SendData(SPI1,byte);等待接收完一字节数据 while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)返回接收到的数据returnSPI_I2S_ReceiveData(SPI1);现在我们再来看看读器件地址函数:SPI_FLASH_ReadDeviceID(void)读器件地址1返回 :器件地址 :u32Temp0;SPI_FLASH_CS_LOW(),是一个宏定义,就是拉低CS

3、(PA4)SPI_FLASH_CS_LOW();/*W25X_DeviceID=0XAB,是读器件地址的命令,发送完该命令后连续发三个任意数字,在发第五个任意数后可以读出地址SPI_FLASH_SendByte(0XAB); SPI_FLASH_SendByte(0XFF);ReadafromFLASH*/ TempSPI_FLASH_SendByte(0XFF);失能芯片*/ SPI_FLASH_CS_HIGH(); /*返回器件地址*/ returnTemp;像温度传感器一样,WX25X16也有很多的命令,具体的命令看下图:(4)擦除扇区WX25X16是2M的字节,共分为8页,每页是256

4、个字节的大小。可以采用页写入的方式写入数据。这里需要注意的是,采用页写入时,每写入一个字节的数据地址会自动加1,当写满一页后会从该页的起始位置写起,即覆盖掉已写的数据。如果想写完一页后进入下一页继续写入数据那么就要在写入数据的起始地址上加上256(页的大小就是256),比如我是从0开始写的,写到255时一页写完,那么要在第二页开始写,那么要将写入的地址变成(0+256),这一点大家一定要注意。在写入数据前先要对芯片进行擦除。芯片的擦除主要有一下几个步骤:发送写使能命令等待写使能命令执行结束选中芯片发送擦除命令发送要擦除的起始地址释放芯片等待擦除命令执行结束这里要注意的是,并不是发送任何命令都需

5、要等待命令执行结束的,WX25X16手册规定以下几个操作要等待命令执行结束:1.数据擦除2.对状态寄存器写的操作(例如数据写入失能结会改变状态寄存器中的BUSY位)首先看发送写使能命令:SPI_FLASH_WriteEnable允许想芯片内写入数据NoneReturn被SPI_FLASH_SectorErase调用SPI_FLASH_WriteEnable(void)SelectFLASH:ChiplowSendWriteEnableinstructionSPI_FLASH_SendByte(0X06);Deselecthigh等待命令执行结束SPI_FLASH_WaitForWriteEnd

6、执行写使能会值位状态寄存器中的BUSY位,只有BUSY位变为0时说明写使能命令执行完成*调用SPI_FLASH_WaitForWriteEnd(void)FLASH_StatusStatusRegisterSPI_FLASH_SendByte(0X05);LoopaslongmemorybusywithwritecycledodummytogenerateneededbyputvaluestatusregisterinvariableSPI_FLASH_SendByte(Dummy_Byte);while(FLASH_Status0X01)SET);progress下面看看数据擦除函数SPI_

7、FLASH_SectorEraseErasesspecifiedsector.SectorAddr:addresssectorerase.SPI_FLASH_WriteEnable() SPI_FLASH_WaitForWriteEnd() SPI_FLASH_SendByte()SPI_FLASH_SectorErase(u32SectorAddr)发送使能写命令SPI_FLASH_WriteEnable();/*使能写命令是一个写状态寄存器的命令,所以要等待该命令执行完,才能写其他命令*/SPI_FLASH_WaitForWriteEnd();发送擦除扇区命令SPI_FLASH_SendB

8、yte(0X20);发送要擦除的起始地址SPI_FLASH_SendByte(SectorAddr0xFF0000)16);SectorAddrmediumnibble0xFF00)8);SPI_FLASH_SendByte(SectorAddr0xFF);从机的数据手册规定(12页)规定,对于写擦除命令,要等待命令执行完才能执行下一命令*/这里要注意,发送擦除地址时要发送三个8位的地址。(5)写入数据由于我们是选择的的页写入的方式,所以这里的程序又点小复杂,大家慢慢看,好好理解。SPI_FLASH_BufferWriteWritesblockFLASH.Inthisfunction,then

9、umberWRITEcyclesreduced,usingPageWRITE sequence.-pBufferpointerbuffercontainingbewrittenFLASH.WriteAddrFLASHsinternalto.NumByteToWritebytesSPI_FLASH_BufferWrite(u8*pBuffer,u32WriteAddr,u16NumByteToWrite)NumOfPage=0,NumOfSingl=0,Addr=0,count=0,temp=0;/*Addr记录的数据是用来判断写入的数据是否从页的起始地址开始写,如果Addr=0,则表示从起始地

10、址开始写,SPI_FLASH_PageSize=256*/Addr=WriteAddr%SPI_FLASH_PageSize;/*count记录的是从开始写的地址到该页结束处共有多少字节*/count=SPI_FLASH_PageSize-Addr;/*NumOfPage指示要写的数据要占几个整页*/ NumOfPage=NumByteToWrite/*NumOfSingl指示的是要写的数据在写完整页后还剩下的部分*/ NumOfSingl/*判断是否从页的起始处开始写起,Addr=0说明从起始处写起*/ if(Addr=0) if(NumOfPage=0)/说明要写的数据的大小不足1页 SP

11、I_FLASH_PageWrite(pBuffer,WriteAddr,NumByteToWrite); else/要写的数据大于1页 while(NumOfPage-)/将整页的数据写完 SPI_FLASH_PageWrite(pBuffer,WriteAddr,SPI_FLASH_PageSize); WriteAddr+=SPI_FLASH_PageSize; pBuffer SPI_FLASH_PageWrite(pBuffer,WriteAddr,NumOfSingl);/不是从起始地址开始写 /要写的数据小于一页 if(NumOfSinglcount)/要写入的数据大于从开始写处到页结束之间的空间大小 tempNumOfSinglcount; /*先写完该页*/ SPI_FLASH_PageWrite(pBuffer,WriteAddr,count); /*多余的数据转到下页写*/+= SPI_FLASH_PageWrite(pBuffer,WriteAddr,temp);/要写的数据小于从开始写处到页结束之间的空间大小NumByteToWrite); /要写的数据大于一页 NumByteToWrite-=count;count);(NumOfPage-)SPI_FLASH_PageSize); if(NumOfSingl!0)NumOfSingl);上面的函数用到了

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1