https://static.assets-stash.eet-china.com/album/old-resources/2009/5/10/cda4cb17-da10-4253-b308-9c4fc899c783.rar
这是一个简易的读写,所有操作倾向与对页的操作
STM32的硬件SPI很容易,程序几乎没怎么调试就正常了!
关于对扇区,对块的操作,请参考手册自行更改
代码参考了彩虹大虾的代码
#ifndef _SPI_FLASH_H_
#define _SPI_FLASH_H_ 1
#include "stm32f10x_lib.h"
#define FLASH_CHREAD 0x0B
#define FLASH_CLREAD 0x03
#define FLASH_PREAD 0xD2
#define FLASH_BUFWRITE1 0x84
#define FLASH_IDREAD 0x9F
#define FLASH_STATUS 0xD7
#define PAGE_ERASE 0x81
#define PAGE_READ 0xD2
#define MM_PAGE_TO_B1_XFER 0x53 // 将主存储器的指定页数据加载到第一缓冲区
#define BUFFER_2_WRITE 0x87 // 写入第二缓冲区
#define B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86 // 将第二缓冲区的数据写入主存储器(擦除模式)
#define Dummy_Byte 0xA5
/* Select SPI FLASH: ChipSelect pin low */
#define Select_Flash() GPIO_ResetBits(GPIOB, GPIO_Pin_2)
/* Deselect SPI FLASH: ChipSelect pin high */
#define NotSelect_Flash() GPIO_SetBits(GPIOB, GPIO_Pin_2)
void SPI_Flash_Init(void); //SPI初始化
u8 SPI_Flash_ReadByte(void); //flash操作基本函数,读一个字节
u8 SPI_Flash_SendByte(u8 byte); // FLASH操作基本函数,发送一个字节
void FlashPageEarse(u16 page); //擦除指定的页,页范围0-4095
void FlashPageRead(u16 page,u8 *Data); //读取整页,页范围0-4095
void FlashPageWrite(u16 page,u8 *Data); //写一整页,页范围0-4095
void FlashWaitBusy(void); //Flash忙检测
void FlashReadID(u8 *ProdustID); //读取flashID四个字节
#endif
用户377235 2013-4-3 08:57
用户1313238 2012-4-14 08:58
用户1665687 2011-5-6 10:56
用户399238 2011-4-29 14:21
用户462086 2011-2-28 16:02
用户1478494 2009-12-19 16:09
用户3961 2009-10-21 18:13
用户1049014 2009-7-19 23:12
用户227783 2009-5-12 19:32
tengjingshu_112148725 2009-5-12 13:57