用户名 立即注册 找回密码

微雪课堂

搜索
微雪课堂 Arduino 查看内容

Arduino系列教程九:SPI

2015-4-26 19:38| 发布者: MyMX1213| 查看: 41027| 评论: 4|原作者: MyMX1213

摘要: 本章介绍Arduino的SPI接口

Arduino开发板ICSP接口中MOSI, MISO,SCKSPI接口,有的开发板D11,D12,D13管脚默认和SPI接口连接(如UNO PLUS,有的开发板默认不连接。Accessory Shield开发板中OLED则是通过SPI接口控制。但本章教程作为Arduino的入门教程,OLED的程序较为复杂,在这里不打算讲解OLED的程序。在这里一Arduino IDE自带的例程讲解如何使用ArduinoSPI接口。

点击File->Examples->SPI->DigitalPotControl打开工程。程序如下:

01// inslude the SPI library:
02 
03#include <SPI.h>
04 
05  
06 
07// set pin 10 as the slave select for the digital pot:
08 
09const int slaveSelectPin = 10;
10 
11  
12 
13void setup() {
14 
15  // set the slaveSelectPin as an output:
16 
17  pinMode (slaveSelectPin, OUTPUT);
18 
19  // initialize SPI:
20 
21  SPI.begin();
22 
23}
24 
25  
26 
27void loop() {
28 
29  // go through the six channels of the digital pot:
30 
31  for (int channel = 0; channel < 6; channel++) {
32 
33    // change the resistance on this channel from min to max:
34 
35    for (int level = 0; level < 255; level++) {
36 
37      digitalPotWrite(channel, level);
38 
39      delay(10);
40 
41    }
42 
43    // wait a second at the top:
44 
45    delay(100);
46 
47    // change the resistance on this channel from max to min:
48 
49    for (int level = 0; level < 255; level++) {
50 
51      digitalPotWrite(channel, 255 - level);
52 
53      delay(10);
54 
55    }
56 
57  }
58 
59  
60 
61}
62 
63  
64 
65void digitalPotWrite(int address, int value) {
66 
67  // take the SS pin low to select the chip:
68 
69  digitalWrite(slaveSelectPin, LOW);
70 
71  //  send in the address and value via SPI:
72 
73  SPI.transfer(address);
74 
75  SPI.transfer(value);
76 
77  // take the SS pin high to de-select the chip:
78 
79  digitalWrite(slaveSelectPin, HIGH);
80 
81}


程序分析:

程序开始先引入SPI头文件SPI.hSPI接口包含MOSI, MISO,SCK,CS四根线。其中MOSI, MISO,SCK已经固定引脚。而CS为片选引脚,可随意选择哪个引脚作为CS.程序中const int slaveSelectPin = 10;定义D10作为片选信号。

setup()函数中调用SPI.begin()初始化SPI接口。此处为默认设置。若要设置具体参数可使用如下语句初始化SPI.

1SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

SPISettings()函数设置SPI传输模式,SPI.beginTransaction()函数根据SPISettings()初始化SPI.

此处为设置SPI速率为14MHZ,高位先传输,模式0

1digitalWrite(slaveSelectPin, LOW);

传输SPI前先拉低片选管脚,使能SPI设备。

1SPI.transfer(val);

SPI传输函数,参数val为要发送的字节,函数返回值为接收到的数据。

1digitalWrite(slaveSelectPin, HIGH);


SPI传输结束释放片选管脚。


500

顶一下

刚表态过的朋友 (500 人)

相关阅读

发表评论

最新评论

引用 游客 2018-10-26 14:37
SPI.transfer(val);可以换成操作spi设备的函数吗?比如说RFID模块的读卡函数
引用 游客 2017-3-22 08:59
: 你好,我想知道,SPI.transfer(address)中的address是什么,应该写什么地址。。
这个是看具体是什么芯片的,OLED是要先传输一个寄存器地址然后再传输数据,这样就是写一个寄存器。address对应的是寄存器的地址。
引用 游客 2017-3-21 15:50
你好,我想知道,SPI.transfer(address)中的address是什么,应该写什么地址。。
引用 Ezio_神仙醋 2017-1-19 15:01
nice

查看全部评论(4)

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2025-4-1 15:26 , Processed in 0.019076 second(s), 21 queries .

返回顶部