ESP8266 Arduino Core.SPI函数列表

这个是我们在Arduino内部可以使用的所有的SPI函数

封装的类,你使用之前的初始化,引脚变动什么的

https://www.arduino.cc/en/Reference/SPI

1.begin()
    该功能用于初始化SPI通信。
    语法:SPI.begin()
    参数:无;
    返回值:无;

这个函数是使用SPI必须使用的一个函数

2.end()
    该功能用于关闭SPI通信。
    语法:SPI.end()
    参数:无;
    返回值:无;

这个函数用于释放SPI引脚

3.setBitOrder()
    设置数据传输顺序。
    语法:SPI.setBitOrder(order)
    参数:
        order,传输顺序,取值为:
        ~ LSBFIRST,低位在前;
        ~ MSBFIRST,高位在前。
    返回值:无;

4.setClockDivider()
    设置通信时钟。时钟信号由主机产生,从机不用配置。但主机的SPI时钟频率应该在从机允许的处理速度范围内。
    语法:SPI.setClockDivider(divider)
    参数:
        divider,SPI通信的时钟是由系统时钟分频得到的。可使用的分频配置为:
        ~ SPI_CLOCK_DIV2,2分频;
        ~ SPI_CLOCK_DIV4,4分频(默认配置);
        ~ SPI_CLOCK_DIV8,8分频;
        ~ SPI_CLOCK_DIV16,16分频;
        ~ SPI_CLOCK_DIV32,32分频;
        ~ SPI_CLOC K_DIV64,64分频;
        ~ SPI_CLOCK_DIV128,128分频;
    返回值:无;

5.setDataMode()
    该功能用于设置数据模式。
    语法:SPI.setDataMode(mode)
    参数:
        mode,可配置的模式,包括:
        ~ SPI_MODE0;
        ~ SPI_MODE1;
        ~ SPI_MODE2;
        ~ SPI_MODE3;
    返回值:无;
    注意点:
    SPI四种模式中,SPI的相位(CPHA)和极性(CPOL)分别可以为0或者1,对应的4种组合构成了4种模式:
    ~ SPI_MODE0:CPOL=0,CPHA=0;
    ~ SPI_MODE1:CPOL=0,CPHA=1;
    ~ SPI_MODE2:CPOL=1,CPHA=0;
    ~ SPI_MODE3:CPOL=1,CPHA=1;
    时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(1是空闲时高电平,0是空闲时低电平)。
    时钟相位CPHA:即SPI在SCLK第几个边沿开始采样(0是第一个边沿开始,1是第二个边沿开始)

6.transfer()
    该功能用于传输1B的数据,参数为发送的数据,返回值为接收到的数据。SPI是全双工通信,因此每发送1B的数据,也会接收到1B的数据。
    语法:SPI.transfer(val)
    参数:
        val,要发送的字节数据。
    返回值:从机返回的1B数据;

7.transfer16()
    该功能用于传输2B的数据,参数为发送的数据,返回值为接收到的数据。
    语法:SPI.transfer16(val)
    参数:
        val,要发送的16位(uint16_t)数据。
    返回值:从机返回的2B数据;
    注意点:发送的uint16_t数据,其实底层也是分开两个字节分别发送两次,接收到的2B数据,也会重新组装成uint16_t数据;

8.transferBuf()
    该功能用于传输一个缓冲区数据,参数为发送的缓冲区buf。
    语法:SPI.transfer(buf,count)
    参数:
        buf,要发送的缓冲区(uint8_t*)数据。
        count,缓冲区的大小。
    返回值:无;
    注意点:虽然没有返回值,但是从从机传输回来的数据会替换掉buf缓冲区的数据,所以调用完整个方法之后,buf里面的数据就是从机返回的数据;

9.pins()
    该功能用于切换SPI引脚映射,需要在SPI.begin()之前调用SPI.pins(6,7,8,0)。
    语法:SPI.pins(sck, miso, mosi, ss)
    参数:
        sck,时钟引脚,固定为6;
        miso,主设备输入,从设备输出引脚,固定为7;
        mosi,主设备输出,从设备输入,固定为8;
        ss,使能信号引脚,固定为0。
    返回值:无;

在这里我再写一次SPI的接口一些说明:

串行外围设备接口(SPI)是微控制器使用的同步串行数据协议,用于在短距离内快速与一个或多个外围设备进行通信。它也可以用于两个微控制器之间的通信。

通过SPI连接,总会有一个主设备(通常是微控制器)来控制外围设备。通常,所有设备共有三行:

  • MISO(Master In Slave Out)-从站线路,用于向主机发送数据,

  • MOSI(Master Out Slave In)-用于将数据发送到外围设备的主线,

  • SCK(串行时钟)-同步主设备生成的数据传输的时钟脉冲

每条设备专用一条线:

  • SS(从设备选择)-主设备可用来启用和禁用特定设备的每个设备上的引脚。

当器件的从选择引脚为低电平时,它与主机通信。较高时,它将忽略主节点。这使你可以让多个SPI器件共享相同的MISO,MOSI和CLK线。

要为新的SPI器件编写代码,需要注意以下几点:

  • 你的设备可以使用的最大SPI速度是多少?这由SPISettings中的第一个参数控制。如果你使用的芯片的额定频率为15 MHz,则使用15000000。Arduino将自动使用等于或小于SPISettings的数字的最佳速度。

  • 数据首先移入最高有效位(MSB)还是最低有效位(LSB)?这由第二个SPISettings参数MSBFIRST或LSBFIRST控制。大多数SPI芯片使用MSB优先数据顺序。

  • 数据时钟为高电平还是低电平时是否空闲?采样是在时钟脉冲的上升沿还是下降沿上?这些模式由SPISettings中的第三个参数控制。

SPI标准是宽松的,每个设备在实现上都略有不同。这意味着编写代码时必须特别注意设备的数据表。

一般来说,有四种传输方式。这些模式控制数据是否在数据时钟信号的上升沿或下降沿移入和移出(称为时钟相位),以及在高电平或低电平时时钟空闲(称为时钟极性)。根据该表,四种模式将极性和相位组合在一起:

时钟极性,时钟相位,输出边沿,数据抓取

(0)

相关推荐

  • UC头条:嵌入式面试知识点总结

    我最近在找工作呀,哪位大佬有合适的工作机会,可以推荐一下呀. 坐标北京,嵌入式软件工程师. 一.MCU对比 问题: 问题一:STM32F1和F4的区别? 解答: 参看:STM32开发–STM32初识 ...

  • 嵌入式开发中常用的几种通信接口总结

    在嵌入式系统中,板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线. 以下内容为常用板上通信接口:包括I2C.SPI.UART.1-Wire: I2C总线 I2C总线是一种同步. ...

  • 详解SPI协议

    SPI是Serial Peripheral Interface的简称,是由Motorola公司推出的一种高速.全双工的总线协议,可以实现一对一.一对多芯片通信. SPI接口信号 SPI由SCLK.CS ...

  • SPI协议,MCP2515裸机驱动详解,收藏吧用得着

    SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH, ...

  • 编过SPI的程序吗?时钟相位和时钟极性是什么?

    什么是SPI通讯总线 SPI总线的英文全称为S"Serial Periphral Interface",意思是串行外设接口,由于通讯距离比较短,适用于芯片级别的短距离通讯.SPI的 ...

  • Delphi 日期函数列表

    引用单元 :DateUtils CompareDate 比较两个日期时间值日期部分的大小 CompareDateTime 比较两个日期时间值的大小 CompareTime 比较两个日期时间值时间部分的 ...

  • (7)[转载]缠论插件V3.02函数列表

    原文地址:缠论插件V3.02函数列表作者:草帽路飞1.1函数列表1.1.1 函数名大写函数名函数说明依赖关系加入版本VERSION版本无@since1.01DATE发布日期无@since1.01JXZ ...

  • Arduino在中断函数里面怎么延时

    Arduino在中断函数里面怎么延时 Arduino里面有两种中断,一种是内部中断,就象系统时钟那样,一直在那儿持续,轮询到中断信号,以最高的优先级去执行.另一种是外部中断,输入中断信号,以低于内部中 ...

  • ecshop 函数列表大全

    所有函数功能说明: lib_time.php gmtime() P: 获得当前格林威治时间的时间戳 /$0 server_timezone() P: 获得服务器的时区 /$0 local_mktime ...

  • ecshop函数列表大全ecshop二次开发相关资料

    ecshop函数列表大全ecshop二次开发相关资料 \所有函数功能说明: lib_time.php gmtime() P: 获得当前格林威治时间的时间戳 /$0 server_timezone() ...

  • ecshop函数列表大全

    所有函数功能说明: lib_time.php gmtime() P: 获得当前格林威治时间的时间戳 /$0 server_timezone() P: 获得服务器的时区 /$0 local_mktime ...

  • 数据有效性9:使用INDEX函数创建动态级联列表

    在前面的文章中,我们介绍了使用OFFSET函数来创建动态更新的级联列表,本文介绍使用INDEX函数创建动态级联列表的方法和技巧. 准备工作表 首先准备两个工作表,"Data"工作表 ...

  • PQ-M及函数:文本中按给定列表保留所需字符内容

    小勤:上次试了<要删的内容很复杂,列举不完,那能不能想要啥就提取啥?>文章中的方法,但发现里面的List.Select函数的判断都是针对连续的字符的,所以用了each _>" ...

  • 公式来了!PQ里的列表排序函数超级好用!

    昨天,在文章<将内容按字符出现次数排列?这个在Excel里的难题因为PQ而轻松解决!>,通过多个步骤的操作,实现了相应的排序效果,但是,原文中的操作方法也存在一个bug: 即在有相同内容的 ...