一.对HAL库片外flash操作解读

一.配置说明设置为主模式,理解上(mcu对flash)的操作,mcu相当于主,flash相当于从设备。下面的选项顾名思义,就是对spi主从设备的选项模式。关于时钟极性和相位的设置(两者解决着对数据的接收方式)。根据时钟极性(CPOL)及相位(CPHA)不同,SPI有四种工作模式。时钟极性(CPOL)定义了时钟空闲状态电平:CPOL=0为时钟空闲时为低电平CPOL=1为时钟空闲时为高电平时钟相位(CPHA)定义数据的采集时间。CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采
摘要由CSDN通过智能技术生成

一.配置说明在这里插入图片描述
设置为主模式,理解上(mcu对flash)的操作,mcu相当于主,flash相当于从设备。
下面的选项顾名思义,就是对spi主从设备的选项模式。

在这里插入图片描述
关于时钟极性和相位的设置(两者解决着对数据的接收方式)。
根据时钟极性(CPOL)及相位(CPHA)不同,
SPI有四种工作模式。
时钟极性(CPOL)定义了时钟空闲状态电平:
CPOL=0为时钟空闲时为低电平
CPOL=1为时钟空闲时为高电平
时钟相位(CPHA)定义数据的采集时间。
CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。
CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。
一般采取默认即可,如有特别需求可以进行调整

在这里插入图片描述
此处为片选硬件上的选择方式,
解读上来讲,就是从一个io口输入或输出电平,
从而决定片选对象的接收和发送数据,一般根据电路或自己的实际情况选择,如果硬件电路上出现了片选,就跟据硬件电路来。如果硬件上没有则,可以使能output或者input进行配置。
在这里插入图片描述

使用(disable),如此硬件电路,f_cs就是片选引脚,根据此引脚进行配置即可

在这里插入图片描述
2.代码补充

在spi.c初始化中添加
初始化函数中添加
 __HAL_SPI_ENABLE(&hspi1);                    //使能SPI1
 SPI1_ReadWriteByte(0Xff);                           //启动传输


//SPI速度设置函数
//SPI速度=fAPB1/分频系数
//@ref SPI_BaudRate_Prescaler:SPI_BAUDRATEPRESCALER_2~SPI_BAUDRATEPRESCALER_2 256
//fAPB1时钟一般为42Mhz:
void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
{
   
    assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//判断有效性
    __HAL_SPI_DISABLE(&SPI1_Handler);            //关闭SPI
    SPI1_Handler.Instance->CR1&=0XFFC7;          //位3-5清零,用来设置波特率
    SPI1_Handler.Instance->CR1|=SPI_BaudRatePrescaler;//设置SPI速度
    __HAL_SPI_ENABLE(&SPI1_Handler);             //使能SPI
    
}
//SPI1 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI1_ReadWriteByte(u8 TxData)
{
   
    u8 Rxdata;
    HAL_SPI_TransmitReceive(&SPI1_Handler,&TxData,&Rxdata,1, 1000);       
 	return Rxdata;          		    //返回收到的数据		
}


flash.h文件中添加
//EN25X系列/Q系列芯片列表	   

#define EN25Q80 	0XEF13 	
#define EN25Q16 	0XEF14
#define EN25Q32 	0XEF15
#define EN25Q64 	0XEF16
#define EN25Q128	0XEF17
//#define EN25Q64 	0XC816
//#define EN25Q64 	0X1C16		//GD25QXX
//#define EN25Q64 	0X2016		//XM25QHXX
#define EN25Q64 	0XC216		//MXIC
//#define EN25Q128	0XC817
#define EN25Q256 	0XEF18

extern u16 EN25QXX_TYPE;					//定义EN25QXX芯片型号		   

#define	EN25QXX_CS 		PBout(14)  		//EN25QXX的片选信号


//指令表
#define EN25X_WriteEnable		0x06 
#define EN25X_WriteDisable		0x04 
#define EN25X_ReadStatusReg1	0x05 
#define EN25X_ReadStatusReg2	0x35 
#define EN25X_ReadStatusReg3	0x15 
#define EN25X_WriteStatusReg1   0x01 
#define EN25X_WriteStatusReg2   0x31 
#define EN25X_WriteStatusReg3   0x11 
#define EN25X_ReadData			0x03 
#define EN25X_FastReadData		0x0B 
#define EN25X_FastReadDual		0x3B 
#define EN25X_PageProgram		0x02 
#define EN25X_BlockErase		0xD8 
#define EN25X_SectorErase		0x20 
#define EN25X_ChipErase			0xC7 
#define EN25X_PowerDown			0xB9 
#define EN25X_ReleasePowerDown	0xAB 
#define EN25X_DeviceID			0xAB 
#define EN25X_ManufactDeviceID	0x90 
#define EN25X_JedecDeviceID		0x9F 
#define EN25X_Enable
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值