Arduino Language Reference-Functions-SPI-Functions

本篇文章均翻译自官方文档,为博主自用。方便博主提高英语水平。

必须注意的是,翻译不可能完全正确,若有矛盾之处或不能理解之处,需要查看原英文资料,并在comment中告知。

SPISettings

SPISettings

Description

SPISettings 对象用于配置您的 SPI 设备的 SPI 端口。所有 3 个参数被组合成一个单独的 SPISettings 对象,该对象被传递给 SPI.beginTransaction()

当所有的设置都是常量时,应该直接在 SPI.beginTransaction() 中使用 SPISettings。请参见下面的语法部分。对于常量,这种语法结果会产生更小更快的代码。

如果您的任何设置是变量,您可以创建一个 SPISettings 对象来保存这 3 个设置。然后你可以给这个对象命名,传递给 SPI.beginTransaction()。当您的设置不是常量时,创建一个命名的 SPISettings 对象可能更有效率,特别是当最大速度是一个被计算或配置的变量,而不是您直接输入到您的草图中的数字。

Syntax

SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)) 注意:所有 3 个设置都是常量时最好

SPISettings mySetting(speedMaximum, dataOrder, dataMode) 注意:任何设置是变量时最好

Parameters

speedMaximum:通信的最大速度。对于一个额定速度高达 20 MHz 的 SPI 芯片,使用 20000000。
dataOrder:MSBFIRST 或 LSBFIRST
dataMode:SPI_MODE0, SPI_MODE1, SPI_MODE2 或 SPI_MODE3

Returns

无。

SPI.begin()

SPI.begin()

Description

通过将 SCK、MOSI 和 SS 设置为输出,将 SCK 和 MOSI 拉低,SS 拉高来初始化 SPI 总线。

Syntax

SPI.begin()

Parameters

无。

Returns

无。

SPI.beginTransaction()

SPI.beginTransaction()

Description

初始化 SPI 总线。注意,在调用此函数之前,必须调用 SPI.begin()

Syntax

SPI.beginTransaction(mySettings)

Parameters

mySettings: 选择的设置(参见 SPISettings)。

Returns

无。

SPI.endTransaction()

SPI.endTransaction()

Description

停止使用SPI总线。通常,在取消选中芯片后调用此函数,以允许其他库使用SPI总线。

Syntax

SPI.endTransaction()

Parameters

无。

Returns

无。

SPI.end()

SPI.end()

Description

禁用 SPI 总线(保持引脚模式不变)。

Syntax

SPI.end()

Parameters

无。

Returns

无。

SPI.setBitOrder()

SPI.setBitOrder()

Description

此函数不应在新项目中使用。请使用 SPISettingsSPI.beginTransaction() 来配置 SPI 参数。

设置移出和移入 SPI 总线的位的顺序,可以是 LSBFIRST(最低有效位优先)或 MSBFIRST(最高有效位优先)。

Syntax

SPI.setBitOrder(order)

Parameters

order: LSBFIRST 或 MSBFIRST

Returns

无。

SPI.setClockDivider()

SPI.setClockDivider()

Description

此函数不应在新项目中使用。请使用SPISettingsSPI.beginTransaction()来配置SPI参数。

设置SPI时钟分频器,相对于系统时钟。在基于AVR的板上,可用的分频器有2、4、8、16、32、64或128。默认设置是SPI_CLOCK_DIV4,这将SPI时钟设置为系统时钟频率的四分之一(对于16 MHz的板为4 MHz)。

对于Arduino Due: 在Due上,系统时钟可以被1到255之间的值分频。默认值是21,这将时钟设置为4 MHz,与其他Arduino板一样。

Syntax

SPI.setClockDivider(divider)

Parameters

divider(仅限AVR板):

  • SPI_CLOCK_DIV2
  • SPI_CLOCK_DIV4
  • SPI_CLOCK_DIV8
  • SPI_CLOCK_DIV16
  • SPI_CLOCK_DIV32
  • SPI_CLOCK_DIV64
  • SPI_CLOCK_DIV128

chipSelectPin:外围设备CS引脚(仅限Arduino Due)divider:1到255之间的一个数(仅限Arduino Due)

Returns

无。

SPI.setDataMode()

SPI.setDataMode()

Description

此函数不应在新项目中使用。请使用 SPISettingsSPI.beginTransaction() 来配置SPI参数。

设置SPI数据模式:即时钟极性和相位。有关详细信息,请参阅Wikipedia上关于 SPI 的文章。

Syntax

SPI.setDataMode(mode)

Parameters

mode:

  • SPI_MODE0
  • SPI_MODE1
  • SPI_MODE2
  • SPI_MODE3

chipSelectPin - 外设设备CS引脚(仅限Arduino Due)

Returns

无。

SPI.transfer()

SPI.transfer()

Description

SPI传输基于同时发送和接收:接收到的数据将返回在receivedVal(或receivedVal16)中。在缓冲传输的情况下,接收到的数据将就地存储在缓冲区中(旧数据将被接收到的数据替换)。

Syntax

receivedVal = SPI.transfer(val)
receivedVal16 = SPI.transfer16(val16)
SPI.transfer(buffer, size)

Parameters

  • val: 通过总线发送的字节
  • val16: 通过总线发送的两个字节的变量
  • buffer: 要传输的数据数组

Returns

接收到的数据。

SPI.usingInterrupt()

SPI.usingInterrupt()

Description

如果您的程序将在中断中执行SPI事务,请调用此函数以在SPI库中注册中断号或名称。这允许SPI.beginTransaction()防止使用冲突。请注意,在调用beginTransaction()时,usingInterrupt()中指定的中断将被禁用,并在endTransaction()中重新启用。

Syntax

SPI.usingInterrupt(interruptNumber)

Parameters

interruptNumber:关联的中断号。

Returns

无。

最后修改:2024 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏