最新STM32学习重点spi剖析.docx

上传人:b****4 文档编号:11791223 上传时间:2023-04-01 格式:DOCX 页数:6 大小:237.42KB
下载 相关 举报
最新STM32学习重点spi剖析.docx_第1页
第1页 / 共6页
最新STM32学习重点spi剖析.docx_第2页
第2页 / 共6页
最新STM32学习重点spi剖析.docx_第3页
第3页 / 共6页
最新STM32学习重点spi剖析.docx_第4页
第4页 / 共6页
最新STM32学习重点spi剖析.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

最新STM32学习重点spi剖析.docx

《最新STM32学习重点spi剖析.docx》由会员分享,可在线阅读,更多相关《最新STM32学习重点spi剖析.docx(6页珍藏版)》请在冰豆网上搜索。

最新STM32学习重点spi剖析.docx

最新STM32学习重点spi剖析

一、SPI简介

SPI是英语SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接口。

是Motorola首先在其MC68HCXX系列处理器上定义的。

SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32也有SPI接口。

SPI接口一般使用4条线:

MISO主设备数据输入,从设备数据输出。

MOSI主设备数据输出,从设备数据输入。

SCLK时钟信号,由主设备产生。

CS从设备片选信号,由主设备控制。

SPI主要特点有:

可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。

SPI总线四种工作方式SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。

如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。

时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。

如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。

SPI主模块和与之通信的外设备时钟相位和极性应该一致。

不同时钟相位下的总线数据传输时序见下图:

二、STM32的SPI介绍

STM32的SPI功能很强大,SPI时钟最多可以到18Mhz,支持DMA,可以配置为SPI协议或者I2S协议。

本节,我们将利用STM32的SPI来读取外部SPIFLASH芯片(W25X16),这节,我们使用STM32的SPI1的主模式,STM32的主模式配置步骤如下:

1)配置相关引脚的复用功能,使能SPI1时钟。

我们要用SPI1,第一步就要是能SPI1的时钟,SPI1的时钟通过APB2ENR的第12位来设置。

其次要设置SPI1的相关引脚为复用输出,这样才会连接到SPI1上否则这些IO口还是默认的状态,也就是标准输入输出口。

这里我们使用的是PA5、6、7这3个(SCK.、MISO、MOSI,CS使用软件管理方式),所以设置这三个为复用IO。

2)设置SPI1工作模式。

这一步全部是通过SPI1_CR1来设置,我们设置SPI1为主机模式,设置数据格式为8位,然后通过CPOL和CPHA位来设置SCK时钟极性及采样方式。

并设置SPI1的时钟频率(最大18Mhz),以及数据的格式(MSB在前还是LSB在前)。

3)使能SPI1。

这一步通过SPI1_CR1的bit6来设置,以启动SPI1,在启动之后,我们就可以开始SPI通讯了。

Spi.h文件的内容:

#ifndef_SPI_H_

#define_SPI_H_

#include"stm32f10x.h"

#defineSPI_CE_H()GPIO_SetBits(GPIOE,GPIO_Pin_6)

#defineSPI_CE_L()GPIO_ResetBits(GPIOE,GPIO_Pin_6)

#defineSPI_CSN_H()GPIO_SetBits(GPIOE,GPIO_Pin_7)

#defineSPI_CSN_L()GPIO_ResetBits(GPIOE,GPIO_Pin_7)

voidSPI2_Init(void);

u8Spi_RW(u8dat);

#endif

Spi.c文件内容:

#include"spi.h"

voidSPI2_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

SPI_InitTypeDefSPI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//PORTB时钟使能

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);//SPI2时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC,ENABLE);//使能PE/C端口时钟

/*配置SPI_NRF_SPI的SCK,MISO,MOSI引脚,GPIOB^13,GPIOB^14,GPIOB^15*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);

/*配置SPI_NRF_SPI的CE引脚PE6,和SPI_NRF_SPI的CSN引脚PE7:

*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//PE67推挽

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOE,&GPIO_InitStructure);//初始化指定IO

/*配置SPI_NRF_SPI的IRQ引脚,*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉输入

GPIO_Init(GPIOC,&GPIO_InitStructure);

SPI_CSN_L();

SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//双线全双工

SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//主模式

SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//数据大小8位

SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;//时钟极性,空闲时为低

SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;//第1个边沿有效,上升沿为采样时刻

SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;//NSS信号由软件产生

SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_16;//SPI_BaudRatePrescaler_88分频,9MHz

市场环境所提供的创业机会是客观的,但还必须具备自身的创业优势,才能使我们的创业项目成为可行。

作为大学生的我们所具有的优势在于:

SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;//高位在前

SPI_InitStructure.SPI_CRCPolynomial=7;//CRC值计算的多项式

SPI_Init(SPI2,&SPI_InitStructure);

(五)DIY手工艺品的“价格弹性化”/*EnableSPI2*/

SPI_Cmd(SPI2,ENABLE);

大学生购买力有限,即决定了要求商品能价廉物美,但更注重的还是在购买过程中对精神文化爱好的追求,满足心理需求。

}

u8Spi_RW(u8dat)

培养动手能力□学一门手艺□打发时间□兴趣爱好□{

/*当SPI发送缓冲器非空时等待*/

(5)资金问题while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);

(2)东西全/*通过SPI2发送一字节数据*/

SPI_I2S_SendData(SPI2,dat);

3、消费“多样化”/*当SPI接收缓冲器为空时等待*/

(3)心态问题while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);

3、消费“多样化”/*ReturnthebytereadfromtheSPIbus*/

9、如果你亲戚朋友送你一件DIY手工艺制品你是否会喜欢?

returnSPI_I2S_ReceiveData(SPI2);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1