主机端:

 /*********************************
 代码功能:SPI数据传输(主机端)
 引脚说明:
     SS/CS:片选(高电平屏蔽,低电平启用)
     MOSI :主机送出信号
     MISO :主机结收信号
     CLK     :时钟脉冲
 SPI成员:
     begin();
         功能 :初始化SPI,设置CLK,MISO和SS为输出,将SCK和MOSI拉低,将SS拉高。
         形式 :SPI.begin();
         返回值:none
     setBitOrder();
         功能:设 置进入和输出SPI总线比特(bit)的顺序:LSBFIRST(低位开始)或者 MSBFIRST (高位开始)。
         形式:SPI.setBitOrder(order);
         参数:order:LSBFIRST或 MSBFIRST
         返回值:none
     setClockDivider();
         功能:设置SPI串行通信时钟的分频系数
         形式:setClockDivider(SPI_CLOCK);
         参数(SPI_CLOCK)
             SPI_CLOCK_DIV2      //2分频,系统时钟的 1/2
             SPI_CLOCK_DIV4      //4分频,系统时钟的 1/4
             SPI_CLOCK_DIV8      //8分频,系统时钟的 1/8
             SPI_CLOCK_DIV16     //16分频,系统时钟的 1/16
             SPI_CLOCK_DIV32      //32分频,系统时钟的 1/32
             SPI_CLOCK_DIV64      //64分频,系统时钟的 1/64
             SPI_CLOCK_DIV128     //128分频,系统时钟的 1/128
     setDataMode();
         功能:设置数据模式
         形式:SPI.setDataMode(mode);
         参数(mede):
             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:第二个边沿开始)
     transfer();
         功能:在SPI上传输一个字节(byte),发送和接收都是这个函数
         形式:SPI.transfer(val);
         参数(val):要发送的字节
         返回值:从 bus 上读取字节。(读操作使用的时候)
     end();
         功能:结束传输
         形式:end();
         参数:无
         返回值:无
 创作时间:2016*10*10
 作者邮箱:jikexianfeng@outlook.com
 ********************************/
 #include<SPI.h>                            //共用MOSI从机输入线
 void setup()
 {
   Serial.begin();                    //串口通信波特率
   Serial.println("start ...");
   digitalWrite(SS,HIGH);                //SS高电平表示从器件未被选中,从器件不工作,MISO输出高阻;
   SPI.begin();                            //初始化SPI串口
   SPI.setClockDivider(SPI_CLOCK_DIV8);    //设置SPI的时钟速率为8分频
 }
 void loop()
 {
   char c;
   digitalWrite(SS,LOW);                     //启动周边选择
   for(const char *p = "Hello world!\n";c = *p;p++)    //送出测试的字符
   {
     SPI.transfer(c);        //SPI输出数据
     Serial.print(c);        //串口输出数据
   }
   digitalWrite(SS,HIGH);    //使从器件不工作
   delay();
 }

从机端:

 /*********************************
 代码功能:SPI数据传输(从机端)
 创作时间:2016*10*14
 作者邮箱:jikexianfeng@outlook.com
 ********************************/
 #include<SPI>
 ];                            //设置缓冲区
 volatile byte pos;                        //定义一个共享的字符
 volatile boolean process_it;            //定义一个共享的整型

 void setup(void)
 {
     //通信串口设置
   Serial.begin();                    //设置串口和波特率
   Serial.println("start slave");
   //SPI总线设置
   pinMode(MISO,OUTPUT);                    //拉高屏蔽主机输出线
   SPCR |= _BV(SPE);                        //打开ISP在从机
   SPI.setBitOrder(MSBFIRST);            //传输方式高位开始
   SPI.setDataMode(SPI_MODE0);            //设置SPI数据模式
   SPI.setClockDivider(SPI_CLOCK_DIV8);    //设置SPI的时钟速率为8分频
   //中断使用数据
   pos = ;
   process_it = false;            //假
   SPI.attachInterrupt();        //准备好中断
 }
   //ISR终端服务程序
 ISR(SPI_STC_vect)
 {
   byte c = SPDR;        //从SPI寄存器读取数据
   if(pos < sizeof(buf))    //判断空间是否使用完
   {
     buf[pos++] =c;
     if(c =='\n')
       process_it = true;
   }
 }
 void loop(void)
 {
   if(process_it)    //判读数据是否写入结束
   {
     String stringOne = String(buf);
     Serial.print(stringOne);
     buf[pos] = ;
     pos = ;
     process_it = false;
   }
 }

SPI数据传输(库函数方法)的更多相关文章

  1. 进阶之路(基础篇) - 008 SPI数据传输(库函数方法)

    主机端: /********************************* 代码功能:SPI数据传输(主机端) 引脚说明: SS/CS:片选(高电平屏蔽,低电平启用) MOSI :主机送出信号 M ...

  2. 通过底层AVR方法实现SPI数据传输

    主机端: /********************************* 代码功能:通过底层AVR方法实现SPI数据传输(主机端) 创作时间:2016*10*17 使用资源: 更低阶的 aTme ...

  3. 进阶之路(基础篇) - 009 通过底层AVR方法实现SPI数据传输

    主机端: /********************************* 代码功能:通过底层AVR方法实现SPI数据传输(主机端) 创作时间:2016*10*17 使用资源: 更低阶的 aTme ...

  4. Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化

    我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...

  5. Linux驱动 - SPI驱动 之四 SPI数据传输的队列化

    我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返 ...

  6. MicroSD卡(TF卡)SPI模式实现方法

    现在我们手机的内存卡多为Micro SD卡,又叫TF卡,所以Micro SD卡比SD卡常见.自己曾经也想写写SD卡的读取程序,但又不想特地再去买个SD卡,这时想起手机内存卡不是和SD卡很像吗?在网上查 ...

  7. STM32建立project库函数方法

    (1)打开keilMDK主界面能够看到project中有一个默认的project,点击这个project名字,然后选择菜单Project->Close Project,就关闭掉这个project ...

  8. C++批量加载动态库函数方法

    1.枚举定义enum  {    // 0 - GigE DLL (implicitly called)    Func_isVersionCompliantDLL,    Func_isDriver ...

  9. 嵌入式物联网之SPI接口原理与配置

    本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...

随机推荐

  1. CentOS中Device eth0 does not seem to be present错误解决办法

    今天克隆的虚拟机,当需要多台虚拟机的时候,试用克隆真是方便,不过遇到了 Device eth0 does not seem to be present 的问题,在网上找到遇到同样问题的解决方法, 很顺 ...

  2. mysql命令行工具

    mysql包相关命令行工具 [root@manage ~]# rpm -qa|grep mysql mysql-server-5.1.73-5.el6_7.1.x86_64 mysql-5.1.73- ...

  3. spring boot Swagger 集成

    1. pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww ...

  4. CentOS6.8 MySQL 5.6实现主从复制

    主库操作 1.将mysqldump命令添加到/usr/bin中 ln -s /application/mysql/bin/mysqldump /usr/bin/ 2.开启master上的log-bin ...

  5. 10、java中的抽象类

    当多个类中出现相同功能,但是功能主体不同,这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特点:1,抽象方法一定在抽象类中.2,抽象方法和抽象类都必须被abst ...

  6. json_encode和json_decode

    <?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ...

  7. HBase体系结构(转)

    HBase的服务器体系结构遵循简单的主从服务器架构,它由HRegion服务器(HRegion Server)群和HBase Master服务器(HBase Master Server)构成.HBase ...

  8. Discuz有关问题解决办法汇总

    1.Can not write to cache files, please check directory ./data/ and ./data/cache/ . 无法写入缓存 解决办法:在sour ...

  9. arcgis android 图上记录gps轨迹

    原文  arcgis android 图上记录gps轨迹 public class MainActivity extends Activity { MapView mMapView; Location ...

  10. linux iostat 性能指标说明

    Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视. 它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况. ...