/****************************************************************************
* 文件名: FM25CL64B.c
* 内容简述: 本模块实现铁电存储器数据的读写 使用用SPI方式 最大20MHZ
* 即在72M主频下 最快可以设置为4分频=18MHZ
* 文件历史:
* 版本号 日期 作者 说明
* v0.1 2012-5-8 hnren 创建该文件
*
*/
/* Includes ------------------------------------------------------------------*/
#include "FM25CL64.h"
#define FM25CL64_WREN_INST 0x06 //写使能
#define FM25CL64_WRDI_INST 0x04 //写失能
#define FM25CL64_RDSR_INST 0x05 //读状态寄存器
#define FM25CL64_WRSR_INST 0x01 //写状态寄存器
#define FM25CL64_WRITE_INST 0x02 //写数据
#define FM25CL64_READ_INST 0x03 //读数据
#define FM25CL64_STATUS_REG 0x00 //状态寄存器数据 清空
#define FM25CL64_INIT_INST 0x09 //
//-------只要配置此处就可以通信--------
#define FM25CL64_SPI SPI1 //使用SPI几的方式
#define FM25CL64_CS_HIGH() GPIOB->BSRR=GPIO_Pin_0|GPIO_Pin_1;
#define FM25CL64_CS_LOW() GPIOB->BRR=GPIO_Pin_1;
//-------------------------------------
//向FLASH中写入一个字节数据(ZJ)
static u8 FM25CL64_SPI_Byte(u8 Temp);
//1. 读状态
static u8 ReadState();
//2. 检测读状态
static u8 Check_Start();
//3. 写使能
static void WriteEnable();
//4. 写状态
static void WriteState();
//向FLASH中写入一个字节数据(ZJ)
static u8 FM25CL64_SPI_Byte(u8 Temp)
{
/*等待发送寄存器空*/
while((FM25CL64_SPI->SR & SPI_I2S_FLAG_TXE)==RESET);
/*发送一个字节*/
FM25CL64_SPI->DR = Temp;
/* 等待接收寄存器有效*/
while((FM25CL64_SPI->SR & SPI_I2S_FLAG_RXNE)==RESET);
return (FM25CL64_SPI->DR);
}
//1. 读状态
static u8 ReadState()
{
u8 r;
FM25CL64_CS_LOW();
r=FM25CL64_SPI_Byte(FM25CL64_RDSR_INST);
r=FM25CL64_SPI_Byte(0);
FM25CL64_CS_HIGH();
return(r);
}
//2. 检测读状态
static u8 Check_Start()
{
u8 i=0,r=255;
do
{
r=ReadState();
i++;
} while ((r&0x01)&& i<254);
if (i>=254)
return 1;
return 0;
}
//3. 写使能
static void WriteEnable()
{
FM25CL64_CS_LOW();
FM25CL64_SPI_Byte(FM25CL64_WREN_INST);
FM25CL64_CS_HIGH();
}
//4. 写状态<---- 基本没什么用
static void WriteState()
{
WriteEnable();
FM25CL64_CS_LOW();
FM25CL64_SPI_Byte(FM25CL64_WRSR_INST);
FM25CL64_SPI_Byte(FM25CL64_STATUS_REG);
FM25CL64_CS_HIGH();
Check_Start();
}
//5. 读存储器内容子程序
u8 Read_FM25CL64_Byte(u16 addre)
{
u8 dat;
FM25CL64_CS_LOW();
FM25CL64_SPI_Byte(FM25CL64_READ_INST);
FM25CL64_SPI_Byte((addre&0xFF00)>>8);
dat=FM25CL64_SPI_Byte((addre&0x00FF));
dat=FM25CL64_SPI_Byte(0);
FM25CL64_CS_HIGH();
return(dat);
}
//6. 读存储器内容子程序(多字节)
u8 Read_FM25CL64_nByte(u16 addre,u8* buff,u16 len)
{
u8 dat=0;
FM25CL64_CS_LOW();
FM25CL64_SPI_Byte(FM25CL64_READ_INST);
FM25CL64_SPI_Byte((addre&0xFF00)>>8);
FM25CL64_SPI_Byte((addre&0x00FF));
for (int i=0;i<len;i++)
{
buff[i]=FM25CL64_SPI_Byte(0);
}
FM25CL64_CS_HIGH();
return(dat);
}
//7. 写存储器内容子程序
u8 Write_FM25CL64_Byte(u16 addre,u8 dat)
{
WriteEnable();
FM25CL64_CS_LOW();
FM25CL64_SPI_Byte(FM25CL64_WRITE_INST);
FM25CL64_SPI_Byte((addre&0xFF00)>>8);
FM25CL64_SPI_Byte((addre&0x00FF));
FM25CL64_SPI_Byte(dat);
FM25CL64_CS_HIGH();
return(dat);
}
//8. 写存储器内容子程序(多字节)
void Write_FM25CL64_nByte(u16 addre,u8* buff,u16 len)
{
WriteEnable();
FM25CL64_CS_LOW();
FM25CL64_SPI_Byte(FM25CL64_WRITE_INST);
FM25CL64_SPI_Byte((addre&0xFF00)>>8);
FM25CL64_SPI_Byte((addre&0x00FF));
for (int i=0;i<len;i++)
{
FM25CL64_SPI_Byte(buff[i]);
}
FM25CL64_CS_HIGH();
}
STM32 FM25CL64B 铁电存储器
5星 · 超过95%的资源 需积分: 50 89 浏览量
2012-12-29
15:21:00
上传
评论 6
收藏 2KB ZIP 举报
chinayzren
- 粉丝: 2
- 资源: 2
最新资源
- Edge浏览器下载文件提示 “无法安全下载” 的解决方法
- 基于springboot+layui的医院日常耗材管理系统.zip
- 计算机毕业设计-ASP.NET教育报表管理系统-权限管理模块(源代码+)-毕设源码实例.zip
- 计算机毕业设计-ASP.NET教务信息管理系统的设计与实现(源代码+)-毕设源码实例.zip
- 免费计算机毕业设计-线上公司求职招聘系统的设计与实现(包含论文+源码)
- Eleven的精益供应链管理-碓胤咨询龚胤全.rar
- 5套光伏、储能、充电收益测算表.zip
- C2 供应链集成演示平台操作手册(详细版).rar
- 3套光储充一体化站CAD+PDF图纸.zip
- c++游戏开发,本人开发的c++小游戏飞机大战(二)源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页