zoukankan      html  css  js  c++  java
  • 进阶之路(基础篇)

    主机端:

     1 /*********************************
     2 代码功能:SPI数据传输(主机端)
     3 引脚说明:
     4     SS/CS:片选(高电平屏蔽,低电平启用)
     5     MOSI :主机送出信号
     6     MISO :主机结收信号
     7     CLK     :时钟脉冲
     8 SPI成员:
     9     begin();
    10         功能 :初始化SPI,设置CLK,MISO和SS为输出,将SCK和MOSI拉低,将SS拉高。
    11         形式 :SPI.begin();
    12         返回值:none
    13     setBitOrder();
    14         功能:设 置进入和输出SPI总线比特(bit)的顺序:LSBFIRST(低位开始)或者 MSBFIRST (高位开始)。
    15         形式:SPI.setBitOrder(order);
    16         参数:order:LSBFIRST或 MSBFIRST
    17         返回值:none
    18     setClockDivider();
    19         功能:设置SPI串行通信时钟的分频系数
    20         形式:setClockDivider(SPI_CLOCK);
    21         参数(SPI_CLOCK)
    22             SPI_CLOCK_DIV2      //2分频,系统时钟的 1/2
    23             SPI_CLOCK_DIV4      //4分频,系统时钟的 1/4
    24             SPI_CLOCK_DIV8      //8分频,系统时钟的 1/8
    25             SPI_CLOCK_DIV16     //16分频,系统时钟的 1/16
    26             SPI_CLOCK_DIV32      //32分频,系统时钟的 1/32
    27             SPI_CLOCK_DIV64      //64分频,系统时钟的 1/64
    28             SPI_CLOCK_DIV128     //128分频,系统时钟的 1/128
    29     setDataMode();
    30         功能:设置数据模式
    31         形式:SPI.setDataMode(mode);
    32         参数(mede):
    33             SPI_MODE0  CPOL = 0 CPHA = 0
    34             SPI_MODE1  CPOL = 0 CPHA = 1
    35             SPI_MODE2  CPOL = 1 CPHA = 0
    36             SPI_MODE3  CPOL = 1 CPHA = 1
    37             时钟极性CPOL: 即SPI空闲时,时钟信号SCLK的电平(1:空闲时高电平; 0:空闲时低电平)
    38             时钟相位CPHA: 即SPI在SCLK第几个边沿开始采样(0:第一个边沿开始; 1:第二个边沿开始)
    39     transfer();
    40         功能:在SPI上传输一个字节(byte),发送和接收都是这个函数
    41         形式:SPI.transfer(val);
    42         参数(val):要发送的字节
    43         返回值:从 bus 上读取字节。(读操作使用的时候)
    44     end();
    45         功能:结束传输
    46         形式:end();
    47         参数:无
    48         返回值:无
    49 创作时间:2016*10*10
    50 作者邮箱:jikexianfeng@outlook.com
    51 ********************************/
    52 #include<SPI.h>                            //共用MOSI从机输入线
    53 void setup()
    54 {
    55   Serial.begin(115200);                    //串口通信波特率
    56   Serial.println("start ...");
    57   digitalWrite(SS,HIGH);                //SS高电平表示从器件未被选中,从器件不工作,MISO输出高阻;
    58   SPI.begin();                            //初始化SPI串口
    59   SPI.setClockDivider(SPI_CLOCK_DIV8);    //设置SPI的时钟速率为8分频
    60 }
    61 void loop()
    62 {
    63   char c;
    64   digitalWrite(SS,LOW);                     //启动周边选择
    65   for(const char *p = "Hello world!
    ";c = *p;p++)    //送出测试的字符
    66   {
    67     SPI.transfer(c);        //SPI输出数据
    68     Serial.print(c);        //串口输出数据
    69   }
    70   digitalWrite(SS,HIGH);    //使从器件不工作
    71   delay(1000);
    72 }

    从机端:

     1 /*********************************
     2 代码功能:SPI数据传输(从机端)
     3 创作时间:2016*10*14
     4 作者邮箱:jikexianfeng@outlook.com
     5 ********************************/
     6 #include<SPI>
     7 char buf[100];                            //设置缓冲区
     8 volatile byte pos;                        //定义一个共享的字符
     9 volatile boolean process_it;            //定义一个共享的整型
    10 
    11 void setup(void)
    12 {
    13     //通信串口设置
    14   Serial.begin(115200);                    //设置串口和波特率
    15   Serial.println("start slave");
    16   //SPI总线设置
    17   pinMode(MISO,OUTPUT);                    //拉高屏蔽主机输出线
    18   SPCR |= _BV(SPE);                        //打开ISP在从机
    19   SPI.setBitOrder(MSBFIRST);            //传输方式高位开始
    20   SPI.setDataMode(SPI_MODE0);            //设置SPI数据模式
    21   SPI.setClockDivider(SPI_CLOCK_DIV8);    //设置SPI的时钟速率为8分频
    22   //中断使用数据
    23   pos = 0;
    24   process_it = false;            //
    25   SPI.attachInterrupt();        //准备好中断
    26 }
    27   //ISR终端服务程序
    28 ISR(SPI_STC_vect)
    29 {
    30   byte c = SPDR;        //从SPI寄存器读取数据
    31   if(pos < sizeof(buf))    //判断空间是否使用完
    32   {
    33     buf[pos++] =c;
    34     if(c =='
    ')
    35       process_it = true;
    36   }
    37 }
    38 void loop(void)
    39 {
    40   if(process_it)    //判读数据是否写入结束
    41   {
    42     String stringOne = String(buf);
    43     Serial.print(stringOne);
    44     buf[pos] = 0;
    45     pos = 0;
    46     process_it = false;
    47   }
    48 }
  • 相关阅读:
    【POJ】1204 Word Puzzles
    【POJ】1816 Wild Words
    【HDOJ】1247 Hat’s Words
    【HDOJ】2609 How many
    【POJ】1035 Spell checker
    【POJ】2418 Hardwood Species
    【POJ】1056 IMMEDIATE DECODABILITY
    数列有序!
    绝对值排序
    C语言合法标识符
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/6824342.html
Copyright © 2011-2022 走看看