stm32f407操作Flash-1(读取Flash的设备ID)

这里先解释一下Flash类似闪存,和EEPROM一样,掉电不易失

第一步:看电路原理图得出:
在这里插入图片描述
第二步:配置CubeMX
注意:PH2引脚没有NSS片选功能,我们使用它的输出功能就好
在这里插入图片描述
第三补:看Flash的数据手册:
在这里插入图片描述
在这里插入图片描述
时序分析:
片选信号使能后,主机发送0x90代表主机要获取Flash的制造商ID和设备ID了
再发送24bit的地址0
读取的时候就可以调用HAL库读取设备ID了
制造商ID是固定的:0xef,设备ID和设备有关
下面上代码:

/*********读写一个字节*******/

extern SPI_HandleTypeDef hspi1;
uint8_t sFLASH_SendByte(uint8_t byte)
{
	uint8_t SEND_DATA = byte;
	uint8_t RECV_DATA = 0;
	HAL_SPI_TransmitReceive(&hspi1,&SEND_DATA,&RECV_DATA,1,0);
	return RECV_DATA;
}
/*读取设备制造商的ID*/
uint16_t sFLASH_ReadID(void)
{
	/*选中外设芯片,这是SPI协议的片选信号使能的操作*/
	sFLASH_CS_LOW();
	/*发送制造商ID的指令*/
	sFLASH_SendByte(W25X_ManufactDeviceID);//0x90
	
	/*发送24bit地址,一次8bit,发送三次*/
	sFLASH_SendByte(sFLASH_DUMMY_BYTE); // 0x00
	sFLASH_SendByte(sFLASH_DUMMY_BYTE);
	sFLASH_SendByte(sFLASH_DUMMY_BYTE);
	
	uint16_t RECV_ID = 0;
	/*读取第一个ID*/
	RECV_ID = sFLASH_SendByte(sFLASH_DUMMY_BYTE);	
	//printf("ID 1 = %x\n",RECV_ID);//0xef
	/*读取第二个ID*/
	RECV_ID =RECV_ID << 8 | sFLASH_SendByte(sFLASH_DUMMY_BYTE) ;
	/*放弃片选*/
	sFLASH_CS_HIGH();
	return RECV_ID;
	
}
main:
 /* USER CODE BEGIN 2 */
	printf("usart init ok\n");
  /* USER CODE END 2 */
	
	uint16_t DEVICE_ID = 0;
	DEVICE_ID = sFLASH_ReadID();
	printf("DEVICE ID = 0x%x\n",DEVICE_ID);

最后上才艺,展示结果嘻嘻
在这里插入图片描述
在这里插入图片描述
与数据手册所给结果完全一致!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值