stm32的SPI总结

发布者:EternalSunset最新更新时间:2019-04-27 来源: eefocus关键字:stm32  SPI总结  总线 手机看文章 扫描二维码
随时随地手机看文章

引脚介绍

SPI 包含 4 条总线,SPI 总线包含 4 条总线,分别为

——SS 、SCK、MOSI、MISO。它们的作用介绍如下 :

1)SS ( Slave Select):片选信号线,当有多个 SPI 设备与 MCU 相连时,每个设备

的这个片选信号线是与 MCU 单独的引脚相连的,而其他的 SCK、MOSI、MISO线则为多个设备并联到相同的 SPI 总线上,见图 15- 1。当 SS 信号线为低电平时,片选有效,开始SPI 通信。

2)SCK (Serial Clock):时钟信号线,由主通信设备产生,不同的设备支持的时钟

频率不一样,如 STM32 的 SPI 时钟频率最大为 f PCLK /2。

3)MOSI (MasterOutput, Slave Input):主设备输出 / 从设备输入引脚。主机的数据

从这条信号线输出,从机由这条信号线读入数据,即这条线上数据的方向为主机到从机。

4)miso主设备输入/ 从设备输出引脚。主机从这条信号线读入数据,从机的数据则由这条信号线输出,即在这条线上数据的方向为从机到主机。


GPIO配置

硬件连接

编程要点

初始化了 SPI1 复用到的 GPIO 引脚,启动了 GPIO 及 SPI1 外设

的时钟,并初始化了 SPI 的模式


1)SPI_Mode :STM32 的 SPI 设 备 可 以 工 作 于 主 机 模 式(SPI_Mode_Master)

或 从 机 模 式(SPI_Mode_Slave),这两个模式的最大区别为 SPI 的 SCK 信号线的时序,SCK 的时序是由通信中的主机产生的。若被配置为从机模式,STM32 的 SPI 模块将接受外来的 SCK 信号。本实验中 STM32 作为 SPI 通信中的主机,我们向这个成员赋值为主机模式(SPI_Mode_Master)。

2)SPI_DataSize :这个成员可以选择 SPI 每次通信的数据大小(称为数据帧)为8 位

还是 16 位。从 Flash 的数据手册我们可以查到,本 Flash 通信的数据帧大小为 8 位,

STM32 的 SPI 模块设置要与之相同。

3)SPI_CPOL 和 SPI_CPHA :这 两 个 成 员 即 配 置 SPI 的 时 钟 极 性(CPOL) 和

时 钟 相 位(CPHA),这两个配置影响到 SPI 的通信模式,该设置要符合将要互相通信的设备的要求。CPOL 分别可以取 SPI_CPOL_High(SPI 通信空闲时 SCK 为高电平)和

SPI_CPOL_Low(SPI 通信空闲时 SCK 为低电平)。CPHA则可以取 SPI_CPHA_1Edge

(在 SCK 的奇数边沿采集数据) 和 SPI_CPHA_2Edge (在 SCK 的偶数边沿采集数

据) 。

查阅本 Flash 的使用手册,见图 15- 6。可以了解到这个 Flash 支持以 SPI 的模式 0 和模式 3通信。即在 SPI 空闲时,SCK 为低电平,奇数边沿采样(模式 0);也可以在 SPI 空闲时,SCK 为高电平,偶数边沿采样(模式 3)。即无论 CPOL 的状态是什么,Flash的数据采样时刻为 SCK 的上升沿。我们在本实验配置使用它的模式 3,即把 CPOL 赋值为

SPI_CPOL_High ;


2)4 ) SPI_NSS : 本 成 员 配 置 NSS 引 脚 的 使 用 模 式 , 可 以 选 择 为 硬 件 模 式(SPI_NSS_Hard )与软件模式(SPI_NSS_Soft),在硬件模式中的 SPI 片选信号由硬件自动产生,而软件模式则需要我们亲自把相应的 GPIO 端口拉高或置低产生非片选和片选信

号。如果外界条件允许,硬件模式还会自动将 STM32 的 SPI 设置为主机。本实验使用软件模式,向这个成员赋值为 SPI_NSS_Soft 。

5)SPI_BaudRatePrescaler :本成员设置波特率分频值,分频后的时钟即为 SPI 的 SCK

信号线的时钟频率。这个成员参数可设置为 f PCLK 的 2、4、6、8、16、32、64、128、

256 分频。本实验向这个成员赋值为 SPI_BaudRatePrescaler_4,即 f PCLK 的 4 分频。

6)SPI_FirstBit :所有串行的通信协议都会有 MSB 先行(高位数据在前)还是 LSB

先行(低位数据在前)的问题,而 STM32 的 SPI 模块可以通过这个结构体成员,对这个特性 编 程 控 制 。 据 Flash 的 通 信 时 序 , 我 们 向 这 个 成 员 赋 值 为 MSB 先 行

(SPI_FirstBit_MSB)。

7)SPI_CRCPolynomial :这是 SPI 的 CRC 校验中的多项式,若我们使用 CRC 校验

时,就使用这个成员的参数(多项式)来计算 CRC 的值。由于本实验的 Flash 不支持 CRC校验,所以我们向这个结构体成员赋值为7 实际上是没有意义的。

配置完这些结构体成员后,我们要调用SPI_Init() 函数把这些参数写入寄存器中,实现

SPI 的初始化,然后调用


关键字:stm32  SPI总结  总线 引用地址:stm32的SPI总结

上一篇:STM32F10XX中SPI的DMA发送数据
下一篇:stm32 spi从模式配置解答

推荐阅读最新更新时间:2024-11-13 16:27

STM32连续进中断问题+
STM32 有时候会不断进入中断,解决方法如下 1.串口初始化配置时,需要打开ORE 溢出中断,如下红色代码所示 void Usart_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 开启串口时钟 GPIO_PinAFConfig
[单片机]
如何使用STM32通用Bootloader让OTA更加Easy
随着物联网时代到来,越来越多的智能设备拥有了在线升级的能力,无论是系统更新,产品功能迭代还是漏洞修复都能在第一时间抵达用户手中的智能设备。 在线升级功能需要使用 OTA (Over-the-Air) 技术 ,OTA 技术简单地说就是通过网络来升级手中的智能设备,进而使用设备最新版本的功能。而 OTA 技术中必不可少的一环就是通过 Bootloader 来管理、升级设备固件。 由于 OTA 功能由多种复杂技术组成,因此添加 OTA 功能有一定的技术门槛。很多开发者遇到莫名其妙的问题,进而导致 OTA 升级失败,常见问题如下: 升级过程缺少专业的安全机制 APP 无法正常启动 程序莫名跑飞,出现 hardfault 固件搬运失
[单片机]
如何使用<font color='red'>STM32</font>通用Bootloader让OTA更加Easy
STM32系列第23篇--SPI
简介: SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 主机对外设的读写操作都是同步的,如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。 SPI接口一般使用4条线通信: MISO :主机输入从机输出 MOSI
[单片机]
<font color='red'>STM32</font>系列第23篇--<font color='red'>SPI</font>
基于STM32单片机的ADC与DMA配置的介绍与使用
本文使用ADC转换电位器输出的电压值,并用DMA模式传输转换的结果,每8次采样转换取平均值,做一个简单的数字滤波。 ADC的详细配置与使用 见之前的日记STM32中ADC的使用,只是最后增加一步配置DMA: DMA for ADC channels features configuration To enable the DMA mode for ADC channels group, use the ADC_DMACmd()funcTIon. To configure the DMA transfer request, use ADC_DMAConfig() func TI on. DMA的配置 (摘自STM32F3官
[单片机]
基于<font color='red'>STM32</font>单片机的ADC与DMA配置的介绍与使用
(3)I2C总线的字节格式,时钟同步和仲裁
字节格式 发送到SDA线上的每个字节必须是8位.每次传输的字节数量是不受限制的.每个字节后必须跟着一个ACK应答位.数据从最高有效位(MSB)开始传输.如果从机要执行一些功能后才能接收或者发送新的完整数据,比如说服务一个内部中断,那么它可以将时钟线SCL拉低来强制使主机进入wait状态.当从机准备好新的字节数据传输时,释放时钟线SCL,数据传输便继续进行. ACK和NACK 每个字节后都有ACK发生.ACK应答位允许接收器通知发送器字节成功接收了下一个字节可以发送了.主机产生所有的时钟脉冲,包括应答位的第9个时钟脉冲. ACK应答信号是如下定义的:在ACK的第9个时钟脉冲中发送器释放SDA线,所以接收器可以将SDA拉低,使得在
[单片机]
(3)I2C<font color='red'>总线</font>的字节格式,时钟同步和仲裁
STM32--SPI配置nrf24l01调试笔记
TX模式和RX模式 地址配置 //发送/接收地址一 const u8 TX_ADDRESS ={0x34,0x43,0x10,0x10,0x01}; //发送地址 const u8 RX_ADDRESS ={0x34,0x43,0x10,0x10,0x01}; //发送/接收地址二 const u8 TX_ADDRESS1 ={0x35,0x43,0x10,0x10,0x01}; //发送地址 const u8 RX_ADDRESS1 ={0x35,0x43,0x10,0x10,0x01}; 测试一 发送模块,发送模式配置成:发送地址一,接收地址二 void NRF24L01_TX_Mode(void) {
[单片机]
STM32使用LWIP库新建tcp_sever
main函数 区域1是lwip的初始化 void LwIP_Init(void) { struct ip_addr ipaddr; struct ip_addr netmask; struct ip_addr gw; mem_init();//内存堆初始化 memp_init();//内存池初始化 IP4_ADDR(&ipaddr, 192, 168, 16, 211); IP4_ADDR(&netmask, 255, 255 , 255, 0); IP4_ADDR(&gw, 192, 168, 16, 1); netif_add(&netif, &ipaddr, &netmask,
[单片机]
总线协议(ds18b20)读写详解
1、时序图 2、51c代码 3、总结 1、时序图 1、初始化 2、 写 3、 读 2、代码 #include reg52.h sbit DQ = P2^0; //定义总线的I/O管脚 void SendByte(unsigned char dat); void Delay4us() //延时4us { ; } void Delay(unsigned char j) //一个循环15us { unsigned char i; while(j--) { i = 5; while (--i); } } bit d18b20_qs() //
[单片机]
单<font color='red'>总线</font>协议(ds18b20)读写详解
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved