软件SPI读写W25Q64

本文详细介绍了如何在STM32平台上使用软件SPI接口实现对W25Q64闪存的操作,包括MySPI模块的建立、引脚配置、SPI通信时序、读写ID号、页编程等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【stm32】软件SPI读写W25Q64

编码

首先建立MySPI模块
  1. 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入

  2. 包装四个SPI通信引脚

  3. 在初始化函数里,SS默认高电平,SCK默认是低电平

  4. 接下来开始写SPI的三个时序基本单元

    1. 开始函数

    2. 停止函数

    3. 交换一个字节

建立W25Q64模块
  1. 调用MySPI

  2. 参考手册指令集部分

    1. 比如要获取读ID号的指令

      1. 起始

      2. 先交换发送指令9F,随后连续交换接收三个字节(在括号“()”中的字节字段表示从设备上的DO引脚读取的数据。

      3. 停止

  3. 规定

    1. SPI起始之后第一个字节都是指令码
  4. 编写等待忙函数

    1. 读取状态寄存器1的最后一位

    2. 判断是不是1,等待忙

  5. 编写页编程

    1. 形参,32位地址、数组数据、Count(由于页编程最多依次写入256个字节数据,所以Count定义为16位,如果定义8位的,只能到255)

MySPI.c

#include "stm32f10x.h"                  // Device header

void MySPI_W_SS(uint8_t BitValue)
{
   
	GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue);
}

void MySPI_W_SCK(uint8_t BitValue)
{
   
	GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue);
}

void MySPI_W_MOSI(uint8_t BitValue)
{
   
	GPIO_WriteBit(GPIOA, GPIO_Pin_7, (BitAction)BitValue);
}

uint8_t MySPI_R_MISO(void)
{
   
	return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);
}

void MySPI_Init(void)
{
   
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	MySPI_W_SS(1);
	MySPI_W_SCK(0);
}

void MySPI_Start(void)
{
   
	MySPI_W_SS(0);
}

void MySPI_Stop(void)
{
   
	MySPI_W_SS(1);
}

uint8_t MySPI_SwapByte(uint8_t ByteSend)
{
   
	uint8_t i, ByteReceive = 0x00;
	
	for (i = 0; i < 8; i ++)
	{
   
		MySPI_W_MOSI(ByteSend & (0x80 >> i));
		MySPI_W_SCK(1);
		if (MySPI_R_MISO() == 1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值