主机端:

 /*********************************
代码功能: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>
char buf[]; //设置缓冲区
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;
}
}

进阶之路(基础篇) - 008 SPI数据传输(库函数方法)的更多相关文章

  1. SPI数据传输(库函数方法)

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

  2. docker进阶之路-基础篇 | 一:环境搭建

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061747.html 一.准备工作 查看内核 Docker 要求 CentOS ...

  3. docker进阶之路-基础篇 | 二:portainer安装与基本使用

    转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12061755.html ​简介 Portainer 是轻量级,跨平台,开源的管理D ...

  4. python之路基础篇

    基础篇 1.Python基础之初识python 2.Python数据类型之字符串 3.Python数据类型之列表 4.Python数据类型之元祖 5.Python数据类型之字典 6.Python Se ...

  5. Python学习之路基础篇--10Python基础,函数进阶

    1 命名空间 对于Python 来说命名空间一共有三种 1 内置命名空间 —— Python 解释器 就是Python 解释器一启动就可以使用的名字,储存在内置命名空间中.内置的名字在启动解释器的时候 ...

  6. 《成神之路-基础篇》JVM——Java内存模型(已完结)

    Java内存模型 本文是<成神之路系列文章>的第一篇,主要是关于JVM的一些介绍. 持续更新中 Java内存模型 JVM内存结构 VS Java内存模型 VS Java对象模型(Holli ...

  7. 从零开始的程序逆向之路基础篇 第二章——用OllyDbg(OD)分析一个简单的软件

    作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43469-1-1.html 0x00知识回顾 (由于笔者省事,没开XP虚拟机,而且没关闭A ...

  8. ESP8266开发之旅 基础篇⑤ ESP8266 SPI通信和I2C通信

        设备与设备之间的通信往往都伴随着总线的使用,而用得比较多的就当属于SPI总线和I2C总线,而恰巧NodeMcu也支持这两种总线通信,所以本章的主要内容就是讲解ESP8266 SPI和I2C总线 ...

  9. [一天一个进阶系列] - MyBatis基础篇

    前言:一直以来,很多人都是拿来主义,只停留在会使用的阶段,从未去研究挖掘其原理,剖析本质.现在慢慢探讨一下其内幕,抛砖引玉 一.简介 1)常用的持久化框架 Hibernate:是一款Java世界中最著 ...

随机推荐

  1. Spring(二十一):Spring JdbcTemplate、NamedParameterJdbcTemplate具名参数

    JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...

  2. SQL Server 多条查询结果组合

    假如存在下面这张表users: 1.通过sql语句返回总人数.男生总数和女生总数 select count(1) '总人数', (select count(1) from users u2 where ...

  3. 壮士断腕!WordPress宣布停止使用React

    WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站,也可以把WordPress当作一个内容管理系统(CMS)来使用. WordPr ...

  4. mysql存储过程,游标实例

    CREATE DEFINER=`root`@`%` PROCEDURE `vir`.`task_payment_byonlinedown`()begin declare _mobile varchar ...

  5. it 建设工具一览

    一 基础建设清单 =============================================== 1 jira, 2 maven,nexus   http://blog.csdn.ne ...

  6. PDF文档输出

    参考:http://ajava.org/article-685-1.html Flexpaper> 参数说明: Flexpaper参数说明SwfFile (String) 需要使用Flexpap ...

  7. Zoning and LUN Masking

    In a SAN ( Storage Area Network ), if all the hosts are allowed to access all the drives in the SAN, ...

  8. Linux多线程同步之相互排斥量和条件变量

    1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会 ...

  9. 高仿美团主界面&lt;一&gt;

    声明:本demo还未完好,正在持续更新中... 先上图吧: 这个小demo资源图片全是用青花瓷抠出来的,如今仅仅是完毕了 一部分. 会持续更行中. . .有兴趣的朋友能够关注我,我们一起coding, ...

  10. Java中equals()和hashCode()的关系以及重写equals()和hashCode()的重要性

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6580647.html  一:关系 如果两个对象相等(equal),它们的hashcode一定相同: 如果两个对 ...