查看: 2991|回复: 3

[经验] 在很多单片机调试通过的 NRF24L01库

[复制链接]
  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-2-17 20:12:35 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 党国特派员 于 2016-2-18 09:40 编辑

    最近看到一些论坛里,有些人调试这个,很多的时候都不成功。所以共享一个自己使用的在很多MCU上调试通过的NRF24L01库。这个库是从mbed上移植过来的,相当的稳定。而且对于开发者来说使用起来也很简单。
    先看下这个库的目录结构:
    NRF240L01_LIB

    ├─Driver
    │          NRF24L01P.c
    │         NRF24L01P.h
    │     
    └─Hal
               │ spi_api.h
               │
               └─Target
                        └─GD32F150R
                                    gd32f1x0_spi_api.c
    其中Drvier是nRF24L01P是基于HAL下的spi_api.h实现的驱动,这个我们是不用管。我们需要做的就是实现特定平台下 spi_api.h定义的函数。例如上面代码实现了GD32F105系统MCU的spi_api接口。那么spi_api.h有些什么东西呢,其实也很简 单,只需要实现5个函数,看代码就知道了:
    1. #ifndef _SPI_API_H
    2. #define _SPI_API_H

    3. #include <stdint.h>
    4.         /*
    5.         * 函数名:spi_Init
    6.         * 描述  :SPI接口初始化
    7.         * 输入  :
    8.         * 输出  :
    9.         * 调用  :api接口
    10.         */
    11.         void spi_Init(void);
    12.         /*
    13.         * 函数名:spi_write
    14.         * 描述  :用于向NRF读/写一字节数据
    15.         * 输入  :写入的数据
    16.         * 输出  :读取得的数据
    17.         * 调用  :api接口
    18.         */
    19.         uint8_t spi_write(uint8_t dat);
    20.         
    21.         void spi_ce_enable(uint8_t newValue);
    22.         
    23.         void spi_cs_enable(uint8_t newValue);
    24.         
    25.         void spi_setCE(int ce);
    26.         
    27.         int spi_getCE();

    28. #endif

    复制代码
    就是SPI的初始化,读写操作。每个MCU不尽相同,大家去实现自己所用MCU的就可以了。
    主程序调用就更简单了,首先声名一个全局的nRF24L01的实例 extern NRF_Class_cb_TypeDef nrf_obj;然后在main函数里调用初始化,上电,设置等一些函数,就可以了。还是发代码给大家看比较清楚:
    1. extern NRF_Class_cb_TypeDef nrf_obj;
    2. char txbuf[20];

    3. int main()
    4. {

    5.         nrf_obj.initialize();
    6.         
    7.         nrf_obj.powerUp();
    8.         //
    9.         nrf_obj.setAirDataRate(NRF24L01P_DATARATE_2_MBPS);
    10.         //设置传输大小
    11.         nrf_obj.setTransferSize(sizeof(txbuf),NRF24L01P_PIPE_P0);
    12.         //设置为发送模式 如果是接收则调用 nrf_obj.setReceiveMode
    13.         nrf_obj.setTransmitMode();
    14.         nrf_obj.enable();
    15.         
    16.         while(1)
    17.         {
    18.                 result = nrf_obj.write(NRF24L01P_PIPE_P0,(char*)&txbuf,sizeof(txbuf));
    19.                 if( result == -1)
    20.                 {
    21.                         wait_us(100);
    22.                 }

    23.         }
    24. }
    复制代码
    OK,搞定,希望对大家有用。
    nRF240L01_lib.rar (12.49 KB, 下载次数: 58, 售价: 2 与非币)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-10-29 22:48
  • 签到天数: 731 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-2-17 23:01:29 | 显示全部楼层
    我记得NRF24L01是用SPI接口驱动的,但是这里给出的代码是关于I2C的,什么情况?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2023-7-25 22:49
  • 签到天数: 385 天

    连续签到: 1 天

    [LV.9]以坛为家II

     楼主| 发表于 2016-2-18 09:41:12 | 显示全部楼层
    suyong_yq 发表于 2016-2-17 23:01
    我记得NRF24L01是用SPI接口驱动的,但是这里给出的代码是关于I2C的,什么情况? ...

    谢谢你的指正,已经修正了。那个I2C当时是为了MPU6050写的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-23 13:44
  • 签到天数: 243 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2016-2-18 10:13:50 | 显示全部楼层
    多谢分享。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 03:00 , Processed in 0.144534 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.