0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SPI串行外设接口的特点概述

冬至子 来源:硬件工程师的小世界 作者:TTYY 2023-04-24 17:29 次阅读

一、概述

SPI是Serial Peripheral interface的缩写,是一种串行外设接口。全双工通信,有4根信号线,在MCU、SOC、FLASH、DSP芯片上常见。

SPI特点

SPI接口只有一个主机,可以有一个或者多个从机。时钟信号由主机发送,所以主机要读一个字节就需要发送一个字节,为从机提供时钟信号。当存在多个从机时由CS片选信号选择从机。

一主一从连接框图

图片

一主多从连接框图

图片

SPI的片选信号

如果是一主一从也可以不使用片选信号,此时从机SPI的接收数据中断使能,在中断ISR里处理数据;如果使用片选信号,可以不使用SPI硬件片选信号,可以使用一个带外部中断功能的IO作为CS。

SPI的4根信号

MISO: 主机输入/从机输出引脚。

MOSI: 主机输出/从机输入引脚。

CLK:串行时钟信号,由主机产生。

CS:从机片选信号,由主机控制。

当然,4根线也不是必须全用上,可以只发送或只接收。可以参考STM32的SPI介绍。

SPI的4种mode

所谓的模式,是指可以通过配置CPOL(时钟极性)来设定CLK空闲状态的电平是高还是低;通过配置CPHA(时钟相位)来设定在CLK的哪个沿进行数据采样和数据发送。CPOL和CPHA可以配置成0或1,所以组合有4种mode。

主机和从机的使用的mode要匹配对应。比如SPI FLASH只支持两种mode,所以主机初始化配置要注意。如下图FLASH只支持mode 0 和 mode 3:

图片

二、STM32程序初始化举例

void SPI1_Init(void)

{

//Enable SPI1 clock and GPIO clock for SPI1

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;

//Configure SPI1 pins: SCK, MISO and MOSI

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

//SPI1 Config

SPI_InitTypeDef SPI_InitStructure;

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;//主从机的配置相同

SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//主从机的配置相同

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;//主从机的配置相同

SPI_InitStructure.SPI_CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStructure);

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE);//使能接收中断

//Enable SPI1

SPI_Cmd(SPI1, ENABLE);

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7682

    浏览量

    344361
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348743
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89600
  • 时钟信号
    +关注

    关注

    4

    文章

    372

    浏览量

    28061
  • MCU芯片
    +关注

    关注

    3

    文章

    218

    浏览量

    11144
收藏 人收藏

    评论

    相关推荐

    串行外设接口SPI模块简析

    慕课苏州大学.嵌入式开发及应用.第四章.较复杂通信模块.串行外设接口SPI模块0 目录4 较复杂通信模块4.1 串行
    发表于 11-08 07:35

    一文读懂串行外设接口SPI

    串行外设接口SPI是什么?其有哪些部分组成呢?如何对串行外设
    发表于 12-16 06:28

    ADIuC812的串行外设接口(SPI)及其在LonWork

    ADIuC812的串行外设接口(SPI)及其在LonWorks智能节点中的应用:介绍了ADIuC812单片机的串行
    发表于 05-29 12:20 22次下载

    理解ATE SPI (串行外设接口)

    理解ATE SPI (串行外设接口) 大多数Maxim® ATE设计都采用了一个串行接口
    发表于 01-26 16:34 2397次阅读
    理解ATE <b class='flag-5'>SPI</b> (<b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>)

    STM32F2技术培训_串行外设接口_SPI

    STM32F2技术培训_串行外设接口_SPI
    发表于 12-03 17:36 0次下载

    一文读懂SPI串行外设接口

    SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。正是由于有了通信方式,我们才能够通过芯片控制
    发表于 04-27 15:19 1w次阅读

    TMS320F28x 串行外设接口SPI)参考指南

    串行外设接口SPI)是一种高速的同步串行输入。允许程序长度的串行位流的输出(I/O)端口(一个
    发表于 04-13 14:42 10次下载
    TMS320F28x <b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>(<b class='flag-5'>SPI</b>)参考指南

    dsPIC30F系列参考手册之串行外设接口SPI

    串行外设接口(Serial Peripheral Interface,SPI)模块是用于同其他外设或单片机进行通信的同 步
    发表于 06-22 08:20 5次下载
    dsPIC30F系列参考手册之<b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>(<b class='flag-5'>SPI</b>)

    PIC24F系列参考手册之串行外设接口SPI

    串行外设接口(Serial Peripheral Interface,SPI)模块是用于同其他外设或单片机器件进行通信 的同步
    发表于 06-24 03:20 3次下载
    PIC24F系列参考手册之<b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>(<b class='flag-5'>SPI</b>)

    PIC24H系列参考手册之串行外设接口SPI

    串行外设接口(Serial Peripheral Interface,SPI)模块是用于同其他外设或单片机器件进行通信 的同步
    发表于 06-25 03:20 4次下载
    PIC24H系列参考手册之<b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>(<b class='flag-5'>SPI</b>)

    PIC32系列参考手册之串行外设接口SPI

    本文主要介绍了PIC32系列参考手册之串行外设接口SPI)。
    发表于 06-06 17:28 6次下载

    SPI串行外设接口的编程说明资料免费下载

    本文档的主要内容详细介绍的是SPI串行外设接口的编程说明资料免费下载。
    发表于 03-25 08:00 2次下载
    <b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>的编程说明资料免费下载

    第9章:串行外设接口模块(SPI)PPT下载

    第9章:串行外设接口模块(SPI)PPT下载
    发表于 10-08 14:56 30次下载

    SPI 串行外设接口

    **SPI简介:**串行外设接口(Serial Peripheral Interface Bus)SPI是一种用于芯片通信的同步
    发表于 12-20 19:31 9次下载
    <b class='flag-5'>SPI</b> <b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>

    SPI串行外设接口设计实现

    SPI 全称为 Serial Peripheral Interface,译为串行外设接口。它是 Motorola 公司推出的一种相对高速的同步、全双工的通信总线协议。
    发表于 05-29 15:40 897次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>串行</b><b class='flag-5'>外设</b><b class='flag-5'>接口</b>设计实现