资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
本帖最后由 orange-208 于 2012-5-28 10:05 编辑 void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) SPI_FLASH_Write_SR(0x02);/使能状态寄存器中的写存储器 SST25V_DBSY();SPI_FLASH_Write_SR(0x02);/使能状态寄存器中的写存储器 SST25V_DBSY();实验目的:将数据写入外部FLASH中,然后再读出来显示在LCD上实验平台:基于STM32F103C8T6的彩屏开发板FLASH:SST25VF016Bflash_SST.c#include flash_SST.h#include spi.h#include delay.h/4Kbytes为一个Sector/16个扇区为1个Block/SST25VF016B/容量为2M字节,共有32个Block(块),512个Sector(扇区)/初始化SPI FLASH的IO口/修改状态寄存器,允许芯片存储器被写void SPI_Flash_Init(void)RCC-APB2ENR|=1CRH&=0XFFFFFF0F;GPIOA-CRH|=0X00000030; /PA9 推挽 GPIOA-ODR|=19; /PA9上拉SPIx_Init(); /初始化SPISPI_FLASH_Write_SR(0x02);/使能状态寄存器中的写存储器SST25V_DBSY(); /读取SPI_FLASH的状态寄存器/BIT76 5 4 3 2 1 0/SPR RVTB BP2 BP1 BP0 WEL BUSY/SPR:默认0,状态寄存器保护位,配合WP使用/TB,BP2,BP1,BP0:FLASH区域写保护设置/WEL:写使能锁定/BUSY:忙标记位(1,忙;0,空闲)/默认:0x00u8 SPI_Flash_ReadSR(void) u8 byte=0;SPI_FLASH_CS=0; /使能器件SPIx_ReadWriteByte(SST25_ReadStatusReg); /发送读取状态寄存器命令 byte=SPIx_ReadWriteByte(0Xff); /读取一个字节 SPI_FLASH_CS=1; /取消片选 return byte;/写SPI_FLASH状态寄存器/只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以写!void SPI_FLASH_Write_SR(u8 sr)SPI_FLASH_CS=0; /片选SPIx_ReadWriteByte(SST25_EnableWriteStatusReg);/使能写状态寄存器命令SPI_FLASH_CS=1; /取消片选SPI_FLASH_CS=0; /片选 SPIx_ReadWriteByte(SST25_WriteStatusReg); /发送写取状态寄存器命令 SPIx_ReadWriteByte(sr); /写入一个字节 SPI_FLASH_CS=1; /取消片选 /SPI_FLASH写使能/将WEL置位void SPI_FLASH_Write_Enable(void)SPI_FLASH_CS=0; /使能器件SPIx_ReadWriteByte(SST25_WriteEnable); /发送写使能 SPI_FLASH_CS=1; /取消片选 /SPI_FLASH写禁止/将WEL清零 void SPI_FLASH_Write_Disable(void) SPI_FLASH_CS=0; /使能器件SPIx_ReadWriteByte(SST25_WriteDisable); /发送写禁止指令 SPI_FLASH_CS=1; /取消片选 /读取芯片ID SST25VF016的是 0XBF41u16 SPI_Flash_ReadID(void)u16 Temp = 0; SPI_FLASH_CS=0; /发送读取ID命令 SPIx_ReadWriteByte(0x90);/发送24位的地址 SPIx_ReadWriteByte(0x00); SPIx_ReadWriteByte(0x00); SPIx_ReadWriteByte(0x00);/读取返回的16位值 Temp=SPIx_ReadWriteByte(0xFF)16); SPIx_ReadWriteByte(u8)(ReadAddr)8);SPIx_ReadWriteByte(u8)ReadAddr);for(i=0;i 16);SPIx_ReadWriteByte(Addr & 0xFF00) 8);SPIx_ReadWriteByte(Addr & 0xFF); /发送最初的两个数据SPIx_ReadWriteByte(Byte1);SPIx_ReadWriteByte(Byte2);SPI_FLASH_CS=1;SPI_Flash_Wait_Busy();/地址自动增加的写数据Bvoid AutoAddressIncrement_WordProgramB(u8 state,u8 Byte1, u8 Byte2)SPI_FLASH_Write_Enable();SPI_FLASH_CS=0;SPIx_ReadWriteByte(SST25_AAI_WordProgram);SPIx_ReadWriteByte(Byte1);SPIx_ReadWriteByte(Byte2);SPI_FLASH_CS=1;SPI_Flash_Wait_Busy();if(state=1)SPI_FLASH_Write_Disable();SPI_Flash_Wait_Busy();/结合AB构成的地址自动增加的连续数据的写入/具有先擦除待写区域的功能/pBuffer:为待写数据组/WriteAddr:所写数据的起始地址/NumByteToWrite:所要写的数据的长度void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)u16 i,temp;u32 secpos;u16 secoff;u16 secremain; /以下代码为擦除待写区域的代码secpos=WriteAddr/4096; /扇区(4K)地址0511 for SST25VF016secoff=WriteAddr96; /在扇区内的偏移secremain=4096-secoff;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号