STM32 学习笔记--SPI通信配置

2023-11-01 140浏览
百检网是一家专业的第三方检测平台,汇聚众多拥有权威资质的第三方检测机构为你提供一站式的检测服务,做检测就上百检网。百检网让检测从此检测,一份报告全国通用,专业值得信赖。
SPI时序

SPI时序图如下:

STM32做为主机设计SPI时序一般选用CPOL=1/CPHA=1;SPI通信配置

1、时钟使能。GPIO时钟使能RCC->APB2ENR,SPI时钟使能RCC->APB2ENR设置。(为什么还要连接GPIO时钟,参见STM32参考手册8.1.4节。手册上这么说的:对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。)

2、配置GPIO工作模式。配置GPIO片选,由软件管理(即自定义引脚),推挽输出,上拉;配置SPI引脚SCK、MOSI、MISO所用到的引脚为复用功能;GPIOX->CR1 GPIOX->ODR;

3、SPI设置工作模式。通过配置SPIx->CR1来设置SPI 的工作模式。配置工作模式为全双工,主机模式,SCK闲时电平为高,第二个时钟沿(上升沿)采样数据,内部从机选择软件管理模式。设置SPI的时钟频率(*大18MHZ),设置数据格式(MSB在前还是LSB在后),内部从机选择设置为主机(置1)。

4、使能SPI,启动传输。

5,因为SPI是同步输入输出的,在发送数据的时候已经在接受数据。通过检测SPIx->SR**位的状态来决定要进行发送和接受数据。通过读取SPIx->DR位的来发送和接受数据。SPIx->SR寄存器图:SPIx->DR寄存器图

#include "spi.h"

//SPI口初始化

//这里针是对SPI1的初始化

void SPI1_Init(void)

{

RCC->APB2ENR|=1<<2; //PORTA时钟使能

RCC->APB2ENR|=1<<12; //SPI1时钟使能

//这里只针对SPI口初始化

GPIOA->CRL&=0X000FFFFF;

GPIOA->CRL|=0XBBB00000;//PA5.6.7复用

GPIOA->ODR|=0X7<<5; //PA5.6.7上拉

//这里只针对SPI——CS口初始化

GPIOA->CRL&=0XFFFFF0FF;

GPIOA->CRL|=0X00000300;//PA2推挽输出

GPIOA->ODR|=1<<2; //PA2上拉

SPI1->CR1|=0<<10;//全双工模式

SPI1->CR1|=1<<9; //软件nss管理

SPI1->CR1|=1<<8;

SPI1->CR1|=1<<2; //SPI主机

SPI1->CR1|=0<<11;//8bit数据格式

SPI1->CR1|=1<<1; //空闲模式下SCK为1 CPOL=1

SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始,CPHA=1

SPI1->CR1|=7<<3; //Fsck=Fcpu/256

SPI1->CR1|=0<<7; //MSBfirst

SPI1->CR1|=1<<6; //SPI设备使能

SPI1_ReadWriteByte(0xff);//启动传输(主要作用:维持MOSI为高)

}

//SPI1 速度设置函数

//SpeedSet:0~7

//SPI速度=fAPB2/2^(SpeedSet+1)

//APB2时钟一般为72Mhz

void SPI1_SetSpeed(u8 SpeedSet)

{

SpeedSet&=0X07; //限制范围

SPI1->CR1&=0XFFC7;

SPI1->CR1|=SpeedSet<<3; //设置SPI1速度

SPI1->CR1|=1<<6; //SPI设备使能

}

//SPI1 读写一个字节

//TxData:要写入的字节

//返回值:读取到的字节

u8 SPI1_ReadWriteByte(u8 TxData)

{

u16 retry=0;

while((SPI1->SR&1<<1)==0)//等待发送区空

{

retry++;

if(retry>0XFFFE)return 0;

}

SPI1->DR=TxData; //发送一个byte

retry=0;

while((SPI1->SR&1<<0)==0) //等待接收完一个byte

{

retry++;

if(retry>0XFFFE)return 0;

}

return SPI1->DR; //返回收到的数据

}


百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台