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. BootstrapTable+KnockoutJS

    BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查   前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用 ...

  2. SQL Server | Mysql 对表的unique 的实现方式

    在ANSI SQL 标准中unique 有两种实现方式 1.是可以插入多个空值.也就是说多个null值看成是互不相同的. 2.是只可以插入一个空值,也主是说把所有的空值看也是相同的. 在SQL Ser ...

  3. eclipse 插件安装

    203.208.46.146 www.google.com203.208.46.146 dl.google.com203.208.46.146 dl-ssl.google.com

  4. c语言中-----分配内存函数

    原型: void * realloc(void *p, size_t  size); realloc 可以对给定的指针所指的空间进行扩大 或者 缩小, 原有内存的数据保持不变.当然,对于缩小,则缩小部 ...

  5. 一套手写ajax加一般处理程序的增删查改

    倾述下感受:8天16次驳回.这个惨不忍睹. 好了不说了,说多了都是泪. 直接上代码 : 这个里面的字段我是用动软生成的,感觉自己手写哪些字段太浪费时间了,说多了都是泪 ajax.model层的代码: ...

  6. 使用 system.io.filesysteminfo 来查找文件。

    如何快速搜索你想找到文件呢.大家知道Windows系统自带了搜索,很方便,下面介绍自己编写的也可以达到同样的效果.注意.有些文件的访问需要更高的权限.这里暂且去掉那些文件目录的搜索.不然会出现erro ...

  7. bmob云 实现注册和登录的功能

    向大家介绍一款我感觉非常溜的一款后端云服务bmob云 借助bmob云我们可以实现注册和登录页面的功能,下面就让我给大家演示一下借助bmob云服务实现这两个功能吧.  1. 用户是一个应用程序的核心.对 ...

  8. Android核心基础

    第三代移动通讯技术(3rd Generation) ,支持高速数据传输的蜂窝移动通讯技术.3G与2G的主要区别是传输数据的速度. 1987年,第一台模拟制式手机(1G)问世,只能进行语音通话,型号:摩 ...

  9. [Jobdu] 题目1517:链表中倒数第k个结点

    给出一个链表的头指针,要求找到倒数第k个节点,并输出这个节点的值 例子: 先看一个例子,链表为:1 2 3 4 5 6,倒数第2个节点就是5,倒数第一个节点就是6,以此类推.这里的链表有头节点,就是说 ...

  10. java中对象模型与数据库中的关系模型

    实体类还需要配置到hibernate.cfg.xml中,以便Hibernate初始化实体类与数据库表的映射关系.如果只配置了映射关系,而没有配置到hibernate.cfg.xml中,Hibernat ...