1、SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或
2、下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。不同时钟相位下的总线数据传输时序见下图:二、STM32的SPI介绍STM32的SPI功能很强大,SPI时钟最多可以到18Mhz,支持DMA,可以配置为SPI协议或者I2S协议。本节,我们将利用STM32的SPI来读取外部SPI FLASH芯片(W25X16),这节,我们使用STM32的SPI1的主模式, STM32的主模式配置步骤如下:1)配置相关引脚的复用功能,使能SPI1时钟。我们要用SPI1,第一步就要是能SPI1的时钟,SPI1的时钟通过APB2ENR的第12位来设置。其次要设置SPI1的相关引脚为复用输出,这样才
3、会连接到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文件的内容:#ifnd
4、ef _SPI_H_#define _SPI_H_#include stm32f10x.h#define SPI_CE_H() GPIO_SetBits(GPIOE, GPIO_Pin_6) #define SPI_CE_L() GPIO_ResetBits(GPIOE, GPIO_Pin_6)#define SPI_CSN_H() GPIO_SetBits(GPIOE, GPIO_Pin_7)#define SPI_CSN_L() GPIO_ResetBits(GPIOE, GPIO_Pin_7)void SPI2_Init(void);u8 Spi_RW(u8 dat);#endifSpi
5、.c 文件内容:spi.hvoid SPI2_Init(void) GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );/PORTB时钟使能 RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );/SPI2时钟使能 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIO
6、C, ENABLE); /使能PE/C端口时钟 /*配置 SPI_NRF_SPI的 SCK,MISO,MOSI引脚,GPIOB13,GPIOB14,GPIOB15 */ 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);
7、 /*配置SPI_NRF_SPI的CE引脚PE6,和SPI_NRF_SPI的 CSN 引脚PE7:*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; /PE6 7 推挽 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOE, &/初始化指定IO /*配置SPI_NRF_SPI的IRQ引脚,*/ GPIO_InitStructure.GPIO_Pin
8、= GPIO_Pin_0;/GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ; /下拉输入 GPIO_Init(GPIOC, & SPI_CSN_L(); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /双线全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /主模式 SPI_InitStructure.SPI_Data
9、Size = 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分频,
10、9MHz 市场环境所提供的创业机会是客观的,但还必须具备自身的创业优势,才能使我们的创业项目成为可行。作为大学生的我们所具有的优势在于: SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /高位在前 SPI_InitStructure.SPI_CRCPolynomial = 7; /CRC值计算的多项式 SPI_Init(SPI2, &SPI_InitStructure);(五)DIY手工艺品的“价格弹性化” /* Enable SPI2 */ SPI_Cmd(SPI2, ENABLE);大学生购买力有限,即决定了要求商品能价廉物美,但更注重
11、的还是在购买过程中对精神文化爱好的追求,满足心理需求。u8 Spi_RW(u8 dat) 培养动手能力 学一门手艺 打发时间 兴趣爱好 /* 当 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、消费“多样化” /* Return the byte read from the SPI bus */ 9、如果你亲戚朋友送你一件DIY手工艺制品你是否会喜欢? return SPI_I2S_ReceiveData(SPI2);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2