STM32 SPI初始化和使用

来源:本站
导读:目前正在解读《STM32 SPI初始化和使用》的相关信息,《STM32 SPI初始化和使用》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32 SPI初始化和使用》的详细说明。
简介:STM32 SPI初始化和使用

串行外设接口(SPI)。初始化步骤:

1、连接SPI外设时钟,通过RCC->APB2ENR设置。

2、连接被复用的GPIO的外设时钟,也是通过RCC->APB2ENR设置

为什么还要连接GPIO时钟,参见STM32参考手册8.1.4节。

手册上这么说的:对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。

3、设置被复用的GPIO为推挽输出,并设置时钟。

不能设置为开漏输出。设置成开漏输出时,示波器上看输出是锯齿波,而不是需要的方波。

4、通过配置SPIx->CR1来设置SPI 的工作模式。最后使能SPI

5、收发数据。

收发数据可以使用同一个函数,因为SPI是同步输入输出的,在发送数据的时候已经在接受数据。

配置SPI1代码如下:

void SPI1_Init(void){ RCC->APB2ENR |= 1<<12;//使能SPI1 时钟 RCC->APB2ENR |= 1<<2; //配置服用功能输出 GPIOA->CRL&=0X000FFFFF; GPIOA->CRL|=0XBBB00000;//PA5.6.7 复用,推挽输出 50M时钟 (不能配置成开漏,否则输出为锯齿波) GPIOA->ODR|=0X7<<5; SPI1->CR1|=0<<11;//8bit数据格式 SPI1->CR1|=0<<10;//全双工模式 SPI1->CR1|=1<<9; //软件nss 管理 SPI1->CR1|=1<<8; SPI1->CR1|=0<<7; //MSBfirst SPI1->CR1|=7<<3; //设置时钟Fsck=Fcpu/256 SPI1->CR1|=1<<2; //SPI 主机 SPI1->CR1|=1<<1; //空闲模式下 SCK为 1 CPOL=1 SPI1->CR1|=1<<0; //数据采样从第二个时间边沿开始 SPI1->CR1|=1<<6; //使能 SPI }

现在可以读写数据了:

u8 SPI1_ReadWriteByte(u8 data){ //while((SPI1->SR && 1<<7) == 0); //等待SPI1空闲 while((SPI1->SR && 1<<1)==0); //等待发送缓冲区空 SPI1->DR = data; while((SPI1->SR && 1<<0)==0); return SPI1->DR;}

提醒:《STM32 SPI初始化和使用》最后刷新时间 2024-03-14 01:22:35,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32 SPI初始化和使用》该内容的真实性请自行鉴别。