spiflash(stm32spiflash的编程).doc

上传人:自*** 文档编号:126246406 上传时间:2020-03-23 格式:DOC 页数:10 大小:34.50KB
返回 下载 相关 举报
spiflash(stm32spiflash的编程).doc_第1页
第1页 / 共10页
spiflash(stm32spiflash的编程).doc_第2页
第2页 / 共10页
spiflash(stm32spiflash的编程).doc_第3页
第3页 / 共10页
spiflash(stm32spiflash的编程).doc_第4页
第4页 / 共10页
spiflash(stm32spiflash的编程).doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《spiflash(stm32spiflash的编程).doc》由会员分享,可在线阅读,更多相关《spiflash(stm32spiflash的编程).doc(10页珍藏版)》请在金锄头文库上搜索。

1、本帖最后由 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#

2、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

3、_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); /

4、发送读取状态寄存器命令 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_ReadWr

5、iteByte(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_

6、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);/读取返回的1

7、6位值 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();/地址自动增加的写数据B

8、void 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();/结合

9、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;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号