Mirf 库在使用 NRF24L01 的时候接触到,感觉很好用。但在用 Arduino101 的时候遇到一些问题,记录一下,对于底层不了解,希望有熟悉的同学能给点指点:

  1. 编译会提示 MirfHardwareSpiDriver.cpp 中的 SPI_2XCLOCK_MASK 未定义,查看 intel 目录下的 SPI 实现,没有这个定义,先不管3721,把这个改为相应常量 0x01 试试

    #include "MirfHardwareSpiDriver.h"
    uint8_t MirfHardwareSpiDriver::transfer(uint8_t data){
    return SPI.transfer(data);
    } void MirfHardwareSpiDriver::begin(){
    SPI.begin();
    SPI.setDataMode(SPI_MODE0);
    // SPI.setClockDivider(SPI_2XCLOCK_MASK);
    SPI.setClockDivider(0x01); // <- 这里改
    } void MirfHardwareSpiDriver::end(){
    } MirfHardwareSpiDriver MirfHardwareSpi;
  2. 编译可以通过了,并且上传成功,运行
    运行发现卡在 Mirf.isSending() 的判断中,一直无法发送完毕。查看 SPI 的文档,发现说 setClockDivider 接口不推荐,推荐使用 SPISettings 来做配置,并且在发送前后使用 SPI.beginTransaction() 和 SPI.endTransaction() 来包围起来。于是改一下 MirfHardwareSpiDriver.cpp:
    #include "MirfHardwareSpiDriver.h"
    uint8_t MirfHardwareSpiDriver::transfer(uint8_t data){
    // return SPI.transfer(data); // 这里改为如下,settings 里的速度参数可以调整
    uint8_t ret; SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
    ret = SPI.transfer(data);
    SPI.endTransaction();
    return ret;
    } void MirfHardwareSpiDriver::begin(){
    SPI.begin(); // 这里之后的都注释掉不用了
    /*
    SPI.setDataMode(SPI_MODE0);
    // SPI.setClockDivider(SPI_2XCLOCK_MASK);
    SPI.setClockDivider(0x01);
    */
    } void MirfHardwareSpiDriver::end(){
    } MirfHardwareSpiDriver MirfHardwareSpi;
  3. 编译、上传、运行
    可以正常发送了!不过在 Arduino101 上发送,在普通板上接收只有偶尔可以接收到数据,用普通板来下载同样程序进行发送,均可 100% 接收,调整速度参数也是一样的表现,真是不知道哪里的问题了

Arduino101 中使用 Mirf 库的问题(2016-04-04)的更多相关文章

  1. WebGIS中基于控制点库进行SHP数据坐标转换的一种查询优化策略

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 目前项目中基于控制点库进行SHP数据的坐标转换,流程大致为:遍 ...

  2. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  3. 在Linux中创建静态库.a和动态库.so

    转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...

  4. 详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法

    详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法 一 编译链接 1 在相应官网下载jsoncpp 2 解压得到jsoncpp-src-0.5.0文件 3 打开jsoncpp-src- ...

  5. iOS——Xcode中添加第三方库

    一.只有.h和.a文件的库 1.向项目中添加三方库文件 如果添加的第三方库只有.h和.a文件,直接把文件夹拖进项目下面,这时会弹出下面的提示框,一定要勾选下面选择的选项: 这里要注意,在Add to ...

  6. VS2010中添加lib库引用

    VS2010中添加lib库引用: 1 菜单  项目---> 属性--->配置属性-->链接器---->输入---附加依赖项,  加入库名,如: my_API.lib; 或是在c ...

  7. Android Studio中导入第三方库

    之前开发Android都是使用的eclipse,近期因为和外国朋友Timothy一起开发一款应用,他是从WP平台刚切换使用Android的,使用的开发环境时Android Studio,为了便于项目的 ...

  8. 如何恢复SQL Server 中的Master库

    如何恢复SQL Server 2005中的Master库 2011-05-10 16:34 Vegas Lee 博客园 我要评论(0) 字号:T | T   master库对于SQLServer来说, ...

  9. 在Linux中创建静态库和动态库

    我们通常把一些公用函数制作成函数库,供其它程序使用. 函数库分为静态库和动态库两种. 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库. 动态库在程序编译时并不会被连接到目标代码中 ...

随机推荐

  1. 编程习题——Maximum Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  2. .net中不能在DropDownList中选中多个项的解决方法

    页面中放有多个DropDownList,点击修改时候,需要根据值来设置两个DropDownList的选中项,当值为空时则需要选中默认值. 页面报错:不能在DropDownList中选中多个项. 直接粘 ...

  3. AAU账号分割

    import win.ui; import fsys.dlg; import string.list; /*DSG{{*/ var winform = win.form(text="aard ...

  4. [js - 算法可视化] 汉诺塔(Hanoi)演示程序

    前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...

  5. oracle 11g RAC ocfs2

    http://oracle-base.com/articles/linux/ocfs2-on-linux.php http://oracle-base.com/articles/11g/oracle- ...

  6. Nitrous.IO融资665万美元 帮助开发者省去配置调试等工作-CSDN.NET

    Intro to Computer Science Class Online (CS101) - Udacity Building a Search Engine Nitrous.IO融资665万美元 ...

  7. Oh, my goddess(bfs)

    Oh, my goddess 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Shining Knight is the embodiment of justice ...

  8. nyoj三个水杯(bfs)

    三个水杯 时间限制:1000 ms  |           内存限制:65535 KB 难度:4   描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互 ...

  9. HTML DOM 创建与修改

    修改 HTML 元素 修改 HTML DOM 意味着许多不同的方面: 改变 HTML 内容 改变 CSS 样式 改变 HTML 属性 创建新的 HTML 元素 删除已有的 HTML 元素 改变事件(处 ...

  10. gridview回顾

    第一看asp.net是在做项目之前,感觉收获也很大,第二次看gridview是在做完项目之后对GridView的回顾,这次的感觉是:我需要多想点,知识直到用时方觉少.直入正题吧,看gridview. ...