stm32---软件SPI读写W25Q64(基于SPI模式0)

SPI通信图文概述:

代码:

软件SPI基层代码:

#include "stm32f10x.h"                  // Device header

/*对应的引脚号*/
#define CS   GPIO_Pin_4 
#define DO   GPIO_Pin_6
#define SLK  GPIO_Pin_5
#define DI   GPIO_Pin_7

/*模块需要使用到的端口:GPIOA或GPIOB*/
#define BUS GPIOA    

/*写SS片选的引脚位*/
void MySPI_W_SS(uint8_t BitValue)
{
	GPIO_WriteBit(BUS, CS,(BitAction)BitValue);
}
/*写SCK时钟的引脚位*/
void MySPI_W_SCK(uint8_t BitValue)
{
	GPIO_WriteBit(BUS, SLK,(BitAction)BitValue);
}
/*写MOSI(主设备输出从设备输入)的引脚位*/
void MySPI_W_MOSI(uint8_t BitValue)
{
	GPIO_WriteBit(BUS, DI,(BitAction)BitValue);
}
/*读MISO(主设备输入从设备输出)的引脚位*/
uint8_t MySPI_R_MISO(void)
{
	return GPIO_ReadInputDataBit(BUS, DO);
}

void MySPI_Init(void)
{
	//1.开启时钟(SPI输出模式为推挽输出,输入模式为上拉或浮空)
		/* 对输出引脚的配置 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启时钟
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
	GPIO_InitStructure.GPIO_Pin = CS | DI | SLK;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(BUS, &GPIO_InitStructure);
		/* 对输入引脚的配置 */
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = DO;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(BUS, &GPIO_InitStructure);
	
	//2.配置引脚的默认电平
	MySPI_W_SS(1);//默认不选中从机设备
	MySPI_W_SCK(0);//默认SCK低电平(为计划使用SPI的模式0)
	
}

/* 时序单元 */
//1.开始时序
void MySPI_Start(void)
{
	MySPI_W_SS(0);
}
//2.停止时序
void MySPI_Stop(void)
{
	MySPI_W_SS(1);
}
//3.主机从机交换字节数据(SPI模式0)
uint8_t MySPI_SwapByte(uint8_t ByteSend)
{
	uint8_t i;
	for(i = 0; i < 8; i++)
	{
		M
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值