历史上的今天

今天是:2024年10月30日(星期三)

正在发生

2020年10月30日 | 调试好的nRF24L01库文件 单片机源程序

发布者:Ziran520 来源: 51hei关键字:nRF24L01  库文件  单片机 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

#include "nRF24L01Drv.h"

#include "USART.h"

#include "stdio.h"

#include "config.h"

#include

#include "spi.h"


/**

* 1.改多路方法:

* NUM_USED_PIPE 改为使用的路数, RX_ADDRESS 分别指定 RX的地址,

* RX_PLOAD_WIDTH 改为每一路的PAYLOAD

* NRF24L01_RxPacket 里面知道是哪一路在接收

*

*

* 2. 发送时自动将CONFIG 备份,然后切换TX后再切换回去

*   并且备份RX_ADDR_P0

*

* 3. 通道0,1 支持40位地址写入, 但是通道2,3,4,5只支持1位写入,其他地址与1通道相同

*

* 4. NRF24L01_TxPacket 支持写入TX_PLOAD_WIDTH 个字节

*

* 5. NRF24L01_RxPacket 第一个参数是PIPE_NUMBER, 第二个参数是 读入的 buffer

*

*

* **/

#define NUM_USED_PIPE 3


const u8 TX_ADDRESS[TX_ADR_WIDTH] = {0x35, 0x30, 0x30, 0x30, 0x35};

const u8 RX_ADDRESS[6][RX_ADR_WIDTH] = {{0x33, 0x30, 0x30, 0x30, 0x33}, {0x34, 0x30, 0x30, 0x30, 0x33}, {0x35, 0x00, 0x00, 0x00, 0x00}};

u8 RX_PLOAD_WIDTH[6] = {0x02, 0x02, 0x02, 0x00, 0x00, 0x00};


u8 SPI_RW(u8 tr_data)

{

        u16 bit_ctr;

        for (bit_ctr = 0; bit_ctr < 8; bit_ctr++) // output 8-bit

        {

                NRF_MOSI = (tr_data & 0x80); // output 'uchar', MSB to MOSI

                tr_data = (tr_data << 1);         // shift next bit into MSB..

                NRF_SCK = 1;                                 // Set SCK high..

                tr_data |= NRF_MISO;                 // capture current MISO bit

                NRF_SCK = 0;                                 // ..then set SCK low again

        }

        return (tr_data); // return read uchar

}


/*********************************************/

/* 函数功能:给24L01的寄存器写值(一个字节) */

/* 入口参数:reg   要写的寄存器地址          */

/*           value 给寄存器写的值            */

/* 出口参数:status 状态值                   */

/*********************************************/

u8 NRF24L01_RW_Reg(u8 reg, u8 value)

{

        u16 status;


        NRF_CSN = 0;                  // CSN low, init SPI transaction

        status = SPI_RW(reg); // select register

        SPI_RW(value);                  // ..and write value to it..

        NRF_CSN = 1;                  // CSN high again


        return (status); // return nRF24L01 status uchar

}

/*************************************************/

/* 函数功能:读24L01的寄存器值 (一个字节)      */

/* 入口参数:reg  要读的寄存器地址               */

/* 出口参数:value 读出寄存器的值                */

/*************************************************/

u8 NRF24L01_Read_Reg(u8 reg)

{

        u8 reg_val;


        NRF_CSN = 0;                        // CSN low, initialize SPI communication...

        SPI_RW(reg);                        // Select register to read from..

        reg_val = SPI_RW(0xFF); // ..then read registervalue

        NRF_CSN = 1;                        // CSN high, terminate SPI communication


        return (reg_val); // return register value

}

/*********************************************/

/* 函数功能:读24L01的寄存器值(多个字节)   */

/* 入口参数:reg   寄存器地址                */

/*           *pBuf 读出寄存器值的存放数组    */

/*           len   数组字节长度              */

/* 出口参数:status 状态值                   */

/*********************************************/

u8 NRF24L01_Read_Buf(u8 reg, u8 *pBuf, u8 len)

{

        u16 status, uchar_ctr;


        NRF_CSN = 0;                  // Set CSN low, init SPI tranaction

        status = SPI_RW(reg); // Select register to write to and read status uchar


        for (uchar_ctr = 0; uchar_ctr < len; uchar_ctr++)

                pBuf[uchar_ctr] = SPI_RW(0xFF); //


        NRF_CSN = 1;


        return (status); // return nRF24L01 status uchar

}

/**********************************************/

/* 函数功能:给24L01的寄存器写值(多个字节)  */

/* 入口参数:reg  要写的寄存器地址            */

/*           *pBuf 值的存放数组               */

/*           len   数组字节长度               */

/**********************************************/

u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len)

{

        u8 status, u8_ctr;

        NRF_CSN = 0;

        status = SPI_RW(reg); //发送寄存器值(位置),并读取状态值

        for (u8_ctr = 0; u8_ctr < len; u8_ctr++)

                SPI_RW(*pBuf++); //写入数据

        NRF_CSN = 1;

        return status; //返回读到的状态值

}


/*********************************************/

/* 函数功能:24L01接收数据                   */

/* 入口参数:rxbuf 接收数据数组              */

/* 返回值: 1   成功收到数据                 */

/*          0   没有收到数据                 */

/*********************************************/

u8 NRF24L01_RxPacket(u8 *pipe_num, u8 *rxbuf)

{

        u8 fifo_state;

        u8 state;

        u8 i;

        unsigned char revale = 0;


        fifo_state = NRF24L01_Read_Reg(FIFO_STATUS); //读取状态寄存器的值

        state = NRF24L01_Read_Reg(STATUS);                         //清除TX_DS或MAX_RT中断标志

        //TX1_write2buff(state);

        if (!(fifo_state & _BV(RX_EMPTY))) //接收到数据

        {

                NRF_CSN = 0;

                i = SPI_RW(RF24_NOP); // IRQ收发完成中断响应,16位CRC,主发送

                *pipe_num = (i >> RX_P_NO) & 0x07;

                NRF_CSN = 1;

                NRF_CE = 0;                                                                                                                  //SPI使能

                NRF24L01_Read_Buf(RD_RX_PLOAD, rxbuf, RX_PLOAD_WIDTH[*pipe_num]); // read receive payload from RX_FIFO buffer

                                                                                                                                                  //   NRF24L01_RW_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器

                NRF24L01_RW_Reg(WRITE_REG + STATUS, state);                                                  //清除TX_DS或MAX_RT中断标志

                NRF24L01_RW_Reg(FLUSH_RX, 0xFF);                                                                  //清除TX_DS或MAX_RT中断标志

                revale = RX_PLOAD_WIDTH[*pipe_num];

        }

        NRF_CE = 1;


        return revale; //没收到任何数据

}

/**********************************************/

/* 函数功能:设置24L01为发送模式              */

/* 入口参数:txbuf  发送数据数组              */

/* 返回值; 0x10    达到最大重发次数,发送失败*/

/*          0x20    成功发送完成              */

/*          0xff    发送失败                  */

/**********************************************/

u8 NRF24L01_TxPacket(u8 *txbuf)

{

        u8 state;

[1] [2]
关键字:nRF24L01  库文件  单片机 引用地址:调试好的nRF24L01库文件 单片机源程序

上一篇:stc-isp单片机下载软件与STC-USB驱动安装说明(教程)
下一篇:单片机波形发生器Proteus仿真程序

推荐阅读

在2018年,将人工智能和区块链匹配在一起的人可能是想要快速“致富”的骗子。毕竟,这两个概念是科技界最热门且最不被理解的两个概念。 区块链,这个由比特币所引出的数据库设计,最近成为所有描绘愿景只为割韭菜的人最受欢迎的途径。虽然这种组合很容易被嘲笑,但是将区块链应用于人工智能的想法吸引了越来越多的严肃企业家和风险投资家,其中许多人都有...
昨夜我们欣赏了AMD二代霄龙处理器的红外线透视照,来自德国硬件媒体HardwareLuxx的大神级人物OC_Burner,但是翻阅资料发现,这并不是他第一次如此对待AMD处理器,此前就已经以同样的方式观察过三代锐龙,但好像没有引起多少人注意,所以再来回顾一下。这次的观察对象是一颗6核心12线程的锐龙5 3600,将其散热顶盖、钎焊散热材质去掉,放在红外线下观...
“到2035年节能汽车与新能源汽车销量各占50%;汽车产业实现电动化转型,燃料电池保有量达到100万辆左右;传统能源动力乘用车全部为混合动力,新能源汽车成为主流,销量占比达50%以上。”10月27日,在上海举办的2020年中国汽车工程学会年会上,中国工程院院士、中国汽车工程学会理事长、清华大学教授李骏代表中国汽车工程学会发布了《节能与新能源汽车技术...
10月27-29日,中国 MEMS 制造大会暨微纳制造与传感器展览会在苏州如期举办。大会旨在汇聚全球MEMS制造产业资源,加强MEMS设计、研发、加工制造、封装测试等全产业链联动关系,促进以MEMS制造为主线的产业资源垂直整合,加速突破我国MEMS制造领域发展瓶颈。在29日召开的MEMS制造大会上,上海矽睿科技股份有限公司(以下简称“矽睿科技”)产品工程高级总...

史海拾趣

问答坊 | AI 解惑

大三学生~~~模电~~~

本帖最后由 paulhyde 于 2014-9-15 09:47 编辑 开学即是大三了,可是依然觉得心里空荡荡的,对电子专业的掌握情况实在是少的可怜。 明年的全国电子设计大赛,我们这一届自然是绝对的主力,可是以现在的实力应战,毫无疑问,肯定是铩羽而归。虽然 ...…

查看全部问答∨

SEED-DVS6467创新故事

行业背景 数字视频监控行业最重要的产品就是DVS和DVR。 DVR(Digital Video Recorder,硬盘录像机)是随着计算机技术的发展,在最近几年中才逐渐发展起来的视频监控设备。在安防行业中,传统的视频监控工程中普遍使用磁带式的长延时录像机,这种 ...…

查看全部问答∨

Verilog 黄金参考指南

Verilog 黄金参考指南…

查看全部问答∨

基于DSP的数字化IGBT逆变点焊电源控制系统的研究

随着微机技术及DSP在焊接领域的应用不断深入,使得点焊焊机的数字化成为必然趋势。逆变电源技术在电阻焊接领域的成功应用,为点焊设备的精密化、智能化提供了广阔的开发和应用前景。目前,以IGBT为开关器件的逆变主电路技术已经开发成熟,以新一代 ...…

查看全部问答∨

WinCE图像界面显示问题

自己自定义裁剪了一个WinCE操作系统,经过一段时间的琢磨,WinCE下LCD的驱动程序基本上调试通过了,但是系统启动以后LCD屏没有任何显示。请问: 如何才可以让系统在启动的时候可以显示WinCE界面,就像WinXP一样呢: 是否需要在系统定制的时候有 ...…

查看全部问答∨

vs2003的wince4.1模拟器怎么与PC同步?

我在网上查了一天了,都没个头绪。有说wince5.0下可以同步,但在微软网站上也没找到下载,只有一个Windows Mobile 5.0 Emulator Images for Smartphone,但下了也装不了,提示需要vs2005。 有谁帮个忙!…

查看全部问答∨

怎么让wince在RAM中运行

我把wince5.0 download在flash中,结果运行时发现好多模块都在flash中运行, 速度很慢,也没法debug. 我在config.bib中已经加了 CONFIG     COMPRESSION=ON     KERNELFIXUPS=ON platform.bib中定义为    Tes ...…

查看全部问答∨

WINCE怎么拦截窗口以外的鼠标消息?

wince没有鼠标钩子,如何拦截窗口之外的鼠标消息?…

查看全部问答∨

vca810放大问题

本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 为什么vca810一旦放大,就产生自激?很费解啊    …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved