基于STM32F10x系列的SPI笔记

SPI
定义:SPI是串行外设接口(Serial peripheral interface)的缩写,SPI是一种高速的,同步的,全双工通信协议。它只占用四个引脚,分别是MISO、MOSI、NSS、SCLK。
在这里插入图片描述
1、SPI的单机通信连接方式:
在这里插入图片描述
这个官方数据手册上的图可能看的比较晦涩不太容易懂,于是我自己总结如下:
在这里插入图片描述
2.SPI的多机通信方式:
官方数据手册多机通信图
在这里插入图片描述
SPI的四种模式:
在这里插入图片描述
CPOL:时钟极性
当CPOL为0时,SCLK时钟空闲状态为低电平
当CPOL为1时,SCLK时钟空闲状态为高电平
CPHA:时钟相位
当CPHA为0时,数据在SCLK的第一边沿开始采集,在第二边沿开始数据采样输出
当CPHA为1时,数据在SCLK的第二边沿开始采集,在下一个边沿开始数据采样输出

SPI一般采用第三种模式CPOL=0,CPHA=1。
SPI的缺点:SPI数据传输没有流控制,也没有应答机制(不知道什么时候数据传输完毕)。
硬件SPI的GPIO引脚配置:NSS/CS(片选)设置为输出模式,其它三个引脚设置为复用功能模式。
软件SPI的GPIO引脚配置:MISO引脚设置为输入模式,其它三个引脚设置为输出模式。

RC522的SPI配置参数:

void SPI_Configuration(SPI_TypeDef* SPIx)
{
	SPI_InitTypeDef SPI_InitStruct;

	SPI_RCC_Configuration(SPIx);

	SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;	//SPI1的时钟=36MHz/8=4.5MHz,要看从机芯片手册
	SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;	//设置SPI为全双工双线双向通信
	SPI_InitStruct.SPI_Mode = SPI_Mode_Master;						//主机角色
	SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;					//接收和发送都是8bit,要看从机芯片手册
	SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;							//串行时钟空闲的时候高电平还是低电平,看从机芯片手册
	SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;						//进行数据采样的时候是在时钟的哪个边沿,看从机芯片手册
	SPI_InitStruct.SPI_NSS = SPI_NSS_Hard;							//软件控制
	SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;					//最高有效位优先,要看从机芯片手册
	SPI_InitStruct.SPI_CRCPolynomial = 7;							//要看从机芯片手册,RC522通信过程出现crc校验
	SPI_Init(SPIx, &SPI_InitStruct);
	
	SPI_GPIO_Configuration(SPIx);

	SPI_SSOutputCmd(SPIx, ENABLE);
	SPI_Cmd(SPIx, ENABLE);
}

PS注意!!!:配置SPI的参数时必须遵守其对应的硬件数据手册,否则一些参数配置不对会直接影响你找半天不知道是什么原因导致你的SPI无法正常通信!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值