TA的每日心情 | 怒 2023-7-25 22:49 |
---|
签到天数: 385 天 连续签到: 1 天 [LV.9]以坛为家II
|
本帖最后由 党国特派员 于 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个函数,看代码就知道了:- #ifndef _SPI_API_H
- #define _SPI_API_H
- #include <stdint.h>
- /*
- * 函数名:spi_Init
- * 描述 :SPI接口初始化
- * 输入 :
- * 输出 :
- * 调用 :api接口
- */
- void spi_Init(void);
- /*
- * 函数名:spi_write
- * 描述 :用于向NRF读/写一字节数据
- * 输入 :写入的数据
- * 输出 :读取得的数据
- * 调用 :api接口
- */
- uint8_t spi_write(uint8_t dat);
-
- void spi_ce_enable(uint8_t newValue);
-
- void spi_cs_enable(uint8_t newValue);
-
- void spi_setCE(int ce);
-
- int spi_getCE();
- #endif
复制代码 就是SPI的初始化,读写操作。每个MCU不尽相同,大家去实现自己所用MCU的就可以了。
主程序调用就更简单了,首先声名一个全局的nRF24L01的实例 extern NRF_Class_cb_TypeDef nrf_obj;然后在main函数里调用初始化,上电,设置等一些函数,就可以了。还是发代码给大家看比较清楚:- extern NRF_Class_cb_TypeDef nrf_obj;
- char txbuf[20];
- int main()
- {
- nrf_obj.initialize();
-
- nrf_obj.powerUp();
- //
- nrf_obj.setAirDataRate(NRF24L01P_DATARATE_2_MBPS);
- //设置传输大小
- nrf_obj.setTransferSize(sizeof(txbuf),NRF24L01P_PIPE_P0);
- //设置为发送模式 如果是接收则调用 nrf_obj.setReceiveMode
- nrf_obj.setTransmitMode();
- nrf_obj.enable();
-
- while(1)
- {
- result = nrf_obj.write(NRF24L01P_PIPE_P0,(char*)&txbuf,sizeof(txbuf));
- if( result == -1)
- {
- wait_us(100);
- }
- }
- }
复制代码 OK,搞定,希望对大家有用。
nRF240L01_lib.rar
(12.49 KB, 下载次数: 58, 售价: 2 与非币)
|
|