当前位置: 首页 > java >正文

STM32使用HAL库驱动铁电存储FM25CL64

环境

1.STM32CubeMX 6.15
2.keil_mdk
3,stm32f767

STM32CUBE配置

在这里插入图片描述
FM25CL64是SPI驱动的,频率不超过20MHz.配置好后,直接生成了。注意,不要用硬件NSS,软件控制比较好。

代码

1.头文件
在这里插入图片描述

#ifndef __FRAM_H
#define __FRAM_H#include "main.h"
#include "spi.h"#define FRAM_COM_PORT	hspi1#define Fram_SetCS(x)		HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,(x))//状态寄存器   X表示无意义,默认值是0
//  BIT7      BIT6      BIT5      BIT4      BIT3      BIT2      BIT1      BIT0
//  WPEN      X(0)      X(0)      X(0)      BP1       BP0       WEL       X(0)
//  WEL:      1为写使能,0为禁止写
//  BP0,BP1:  块保护
//  WPEN:     #define FRAM_WREN   0x06    //写入使能,即设置WEL位       在写操作(WRSR和WRITE)之前,必须先发本命令
#define FRAM_WRDI   0x04    //写入禁止,即清除WEL位       本操作会禁止写操作(WRSR和WRITE),此后即使发送(WRSR和WRITE)也无效
#define FRAM_RDSR   0x05    //读状态寄存器
#define FRAM_WRSR   0x01    //写状态寄存器,前序操作为FRAM_WREN
#define FRAM_READ   0x03    //读
#define FRAM_WRITE  0x02    //写,前序操作为FRAM_WRENuint8_t Fram_ReadReg(void);
//void Fram_WriteReg(uint8_t dat);
void Fram_ReadData(uint16_t addr, uint8_t *dat, uint16_t len);
void Fram_WriteData(uint16_t addr, const uint8_t *dat, uint16_t len);#endif

2.C文件

#include "fram.h"uint8_t Fram_ReadReg(void)
{uint8_t data[1];data[0] = FRAM_WREN;	//使能写入,上电后默认禁止Fram_SetCS(0);HAL_SPI_Transmit(&FRAM_COM_PORT,data,1,100);Fram_SetCS(1);Fram_SetCS(0);uint8_t tx_data[2] = {FRAM_RDSR, 0x00}; // 命令 + 空字节用于接收uint8_t rx_data[2];HAL_SPI_TransmitReceive(&FRAM_COM_PORT, tx_data, rx_data, 2, 100);uint8_t status = rx_data[1]; // 第二个字节是状态寄存器值Fram_SetCS(1);return status;
}void Fram_WriteReg(uint8_t dat)
{uint8_t data[1];data[0] = FRAM_WREN;	//使能写入,默认禁止Fram_SetCS(0);HAL_SPI_Transmit(&FRAM_COM_PORT,data,1,100);Fram_SetCS(1);//写状态寄存器    0x01Fram_SetCS(0);uint8_t tx_data[2] = {FRAM_WRSR, dat}; //uint8_t rx_data[2];HAL_SPI_TransmitReceive(&FRAM_COM_PORT, tx_data, rx_data, 2, 100);Fram_SetCS(1);}//void Fram_WriteData(uint16_t addr,uint8_t dat)
//{
//	Fram_SetCS(0);
//	uint8_t tx_data[4] = {FRAM_WRITE, addr >> 8, addr,dat}; // 命令 + 空字节用于接收
//	uint8_t rx_data[4];	
//  HAL_SPI_TransmitReceive(&FRAM_COM_PORT, tx_data, rx_data, 4, 10);
//	Fram_SetCS(1);
//}
void Fram_WriteData(uint16_t addr, const uint8_t *dat, uint16_t len)
{uint8_t cmd[3];
//	cmd[0] = FRAM_WREN;
//	Fram_SetCS(0);
//	HAL_SPI_Transmit(&FRAM_COM_PORT, cmd, 1, 100);
//	Fram_SetCS(1);cmd[0] = FRAM_WRITE;cmd[1] = addr >> 8;cmd[2] = addr & 0xFF;Fram_SetCS(0);HAL_SPI_Transmit(&FRAM_COM_PORT, cmd, 3, 100);HAL_SPI_Transmit(&FRAM_COM_PORT, (uint8_t*)dat, len, 100);Fram_SetCS(1);
}//void Fram_ReadData(uint16_t addr,uint8_t *dat)
//{
//	Fram_SetCS(0);
//	uint8_t tx_data[4] = {FRAM_READ, addr >> 8, addr,0x00}; // 命令 + 空字节用于接收
//	uint8_t rx_data[4];	
//  HAL_SPI_TransmitReceive(&FRAM_COM_PORT, tx_data, rx_data, 4, 10);
//	*dat = rx_data[3];
//	Fram_SetCS(1);
//}
void Fram_ReadData(uint16_t addr, uint8_t *dat, uint16_t len)
{uint8_t cmd[3];cmd[0] = FRAM_READ;cmd[1] = addr >> 8;cmd[2] = addr & 0xFF;Fram_SetCS(0);HAL_SPI_Transmit(&FRAM_COM_PORT, cmd, 3, 100);HAL_SPI_Receive(&FRAM_COM_PORT, dat, len, 100);Fram_SetCS(1);
}

使用

正常的文件包含后,首先使用Fram_ReadReg();读取状态寄存器的值,正常值应该是0x02,这个函数里面,使能了写入功能,因为手册上写,这个芯片上电默认是禁止写入的。
(在写入函数里面,每次写入新数据前,都使能写入功能)
如果一上电就使能了写入,可以修改数据写代码,注释掉每次写前使能写入功能代码。
在这里插入图片描述

然后就是写入和读取了。
在这里插入图片描述
在这里插入图片描述

http://www.xdnf.cn/news/20137.html

相关文章:

  • 用 Shields.io 定制 README 个性徽章
  • 嵌入式铁头山羊stm32-SAR型ADC模块介绍、采样时间、转换时间-Day24
  • Web与Nginx
  • MCP 和 Fuction Call 有什么不同
  • Python基础(①④内存管理机制)
  • 【Element Plus 表单组件样式统一 CSS 文字特效实现指南】
  • 啥是两化融合?
  • 算法模板(Java版)_哈希表
  • 手写Java泛型,彻底掌握它!
  • 结合prompt分析NodeRAG的build过程
  • MySQL事务的四大特性(ACID)
  • 代码随想录二刷之“贪心算法”~GO
  • HTML 基本结构
  • 一篇文章带你彻底搞懂 JVM 垃圾收集器
  • 大数据开发计划表(实际版)
  • Python入门教程之数学运算符
  • 基于单片机智能水龙头/智能洗漱台设计
  • STM32F103_Bootloader程序开发15 - 从Keil到vscode + EIDE + GCC的迁移实践
  • 8051单片机-成为点灯大师
  • STL重点
  • Web Session 机制深度解析
  • Windows 11使用技巧
  • 汉诺塔递归过程推导(详细+省流)
  • 2025 年高教社杯全国大学生数学建模竞赛A 题 烟幕干扰弹的投放策略完整成品 思路 模型 代码 结果 全网首发高质量!!!
  • 2025跨境独立站最新最完整的搭建流程
  • AI智汇社区凭什么半年估值破亿?这家公司让普通人也能玩转AI开发
  • 【IO】共享内存、信息量集
  • 【已更新文章+代码】2025数学建模国赛B题思路代码文章高教社杯全国大学生数学建模-碳化硅外延层厚度的确定
  • 《设计模式之禅》笔记摘录 - 19.备忘录模式
  • 新增MCP工具管理,AI对话节点新增工具设置,支持对接企业微信机器人,MaxKB v2.1.0版本发布