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. 逻辑(if)、关系、数字、条件运算符

    if语句 if-else if-else  if(a==0){1} else if (a>0){2}  else{3}  特点:1.2.3只有一个括号会被执行  陷阱  1.if(a!=0)  ...

  2. android小知识之EditText输入框之值监控以及类型限制(数字,英语字母,下划线,是否为星号密码)

    1.设置EditText的值监听事件 . <span style="font-size:14px;color:#990000;"> EditText ed=new Ed ...

  3. Spring Boot MyBatis 连接数据库

    最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,Github上有代码:https://gi ...

  4. LINQ to SQL的CRUD操作

    创建数据对象模型 sqlmetal /code:"C:\MyProjects\VS2008\Data\LinqConsoleApp2\LinqConsoleApp2\northwnd.cs& ...

  5. hdoj 2620 Bone Collector(0-1背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 思路分析:该问题为经典的0-1背包问题:假设状态dp[i][v]表示前i件物品恰放入一个容量为v ...

  6. 基于xml文件实现系统属性配置管理

    文章标题:基于xml文件实现系统属性配置管理 . 文章地址: http://blog.csdn.net/5iasp/article/details/11774501 作者: javaboy2012 E ...

  7. 一步一步学android之控件篇——ScrollView

    一个手机的屏幕大小是有限的,那么我要显示的东西显示不下怎么办?这就会使用到ScrollView来进行滚动显示,他的定义如下: 可以看到ScrollView是继承于FrameLayout的,所以Scro ...

  8. IOS框架概览

    iOS是执行在iPhone.iPod Touch或iPad上的操作系统,之前叫做iPhone OS,iOS与Mac OS X有共同的基础架构和底层技术.但iOS是依据移动设备的特点而设计的,所以和Ma ...

  9. BootStrap 智能表单系列 四 表单布局介绍

    表单的布局分为自动布局和自定义布局两种: 自动布局就是根据配置项中第二级配置项中数组的长度来自动使用不同的bootstrap栅格,通过设置autoLayout为true可以实现自动布局 自动以布局就是 ...

  10. 关于js封装框架类库之DOM操作模块(一)

    在前端开发的过程中,javascript极为重要的一个功能就是对DOM对象的操作,而对其封装就是为了更好地进行DOM操作,提高浏览器的支持效率 现在给出一个案例:页面创建三个div,然后给其添加样式 ...