3回答

1收藏

[分享] 在很多单片机调试通过的 NRF24L01库

GD32 GD32 3925 人阅读 | 3 人回复 | 2016-02-17

本帖最后由 党国特派员 于 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, 下载次数: 60, 售价: 2 与非币)




喜欢在构思妙想,电子产品DIY是工作,也是一种爱好。
分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

suyong_yq

发表于 2016-2-17 23:01:29 | 只看该作者

我记得NRF24L01是用SPI接口驱动的,但是这里给出的代码是关于I2C的,什么情况?
板凳

党国特派员

发表于 2016-2-18 09:41:12 | 只看该作者

suyong_yq 发表于 2016-2-17 23:01
我记得NRF24L01是用SPI接口驱动的,但是这里给出的代码是关于I2C的,什么情况? ...

谢谢你的指正,已经修正了。那个I2C当时是为了MPU6050写的。
喜欢在构思妙想,电子产品DIY是工作,也是一种爱好。
地板

Paderboy

发表于 2016-2-18 10:13:50 | 只看该作者

多谢分享。。。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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