历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2021年02月22日 | STM8学习之nRF24L01

2021-02-22 来源:eefocus

简介:nRF24L01是收发双方都要编程的,同时调试一旦出错,不易判断哪方出错,所以可以采用分开调试。


收发过程:


发送 - 等待应答 - (自动重发)- 产生中断


接收 - 等待应答 - 产生中断


取消等待应答便可以实现单独调试发送方了,等发送方调试成功再调接收方。


SPI模拟函数:


u8 SPI_RW(u8 byte)


{


u8 i;


for(i=0;i < 8;i++)


{


if((byte & 0x80) == 0) //数据从最高位一位一位地输出到nRF24L01的MOSI


{ MOSI = 0; }


else


{ MOSI = 1; }


byte = (byte << 1); //向左循环8次,完成从高位输出,低位输入一个字节的同步模拟


SCK = 1; //上升沿输入nRF24L01的MOSI


if(MISO == 1)


{ byte |= 1; }


else


{ byte |= 0; } //可以不写,没有实际作用,方便查看与理解


SCK = 0; //下降沿输入单片机MISO


}


return (byte);


}


u8 SPI_RW_Reg(u8 reg, u8 value)


{


u8 status;


CSN = 0; // CSN置低,开始传输数据


status = SPI_RW(reg); // 选择寄存器,同时返回状态字


SPI_RW(value); // 然后写数据到该寄存器


CSN = 1; // CSN拉高,结束数据传输


return(status); // 返回状态寄存器


}


u8 SPI_Read(u8 reg)


{


u8 reg_val;


CSN = 0; // CSN置低,开始传输数据


SPI_RW(reg); // 选择寄存器


reg_val = SPI_RW(0); // 然后从该寄存器读数据


CSN = 1; // CSN拉高,结束数据传输


return(reg_val); // 返回寄存器数据


}


u8 SPI_Read_Buf(u8 reg, u8 *pBuf, u8 bytes)


{


u8 status, i;


CSN = 0; // CSN置低,开始传输数据


status = SPI_RW(reg); // 选择寄存器,同时返回状态字


for(i=0; i


pBuf[i] = SPI_RW(0); // 逐个字节从nRF24L01读出


CSN = 1; // CSN拉高,结束数据传输


return(status); // 返回状态寄存器


}


u8 SPI_Write_Buf(u8 reg, u8 *pBuf, u8 bytes)


{


u8 status, i;


CSN = 0; // CSN置低,开始传输数据


status = SPI_RW(reg); // 选择寄存器,同时返回状态字


delay_us(10);


for(i=0; i


SPI_RW(*pBuf++); // 逐个字节写入nRF24L01


CSN = 1; // CSN拉高,结束数据传输


return(status); // 返回状态寄存器


}


void SetRX_Mode(void)


{


//CE=0; //可以不进行拉低操作,考虑此时的效率


//SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC,主接收


CE = 1; // 从Standby I模式进入RX模式,开始接受数据


delay_us(1500); // 需要一定的延时,具体时间等待验证(手册上写的是130us)


}


// 接受数据函数


u8 RxPacket(u8* rx_buf)


{


u8 revale=0;


sta = SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况


if(RX_DR) // 判断是否接收到数据


{


CE = 0; // SPI使能


SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH); // read receive payload from RX_FIFO buffer


//SPI_RW_Reg(FLUSH_RX, 0Xff);


revale =1; // 读取数据完成标志


}


SPI_RW_Reg(WRITE_REG+STATUS,sta); // 接收到数据后RX_DR置高,写1清中断标志,同时清除RX FIFOS?


//SPI_RW_Reg(FLUSH_RX, 0Xff);


return revale; // 是否接受到数据的标志位


}


// 发送数据函数


void TxPacket(u8* tx_buf)


{


CE=0; //StandBy I模式


SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址


SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据


//SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送


CE=1; //置高CE,激发数据发送


delay_us(1000); //延时时间待最小确定,是否是130us?


}


// 初始化TX or RX Mode


void init_nRF(void)


{


delay_us(1000);


CE=0; // chip enable


CSN=1; // Spi disable


SCK=0; // Spi clock line init high


SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址


SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址


SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); // 频道0自动ACK应答允许


SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21


SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道工作为2.4GHZ,收发必须一致


//SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0X00); // disable the retr (TX mode)


SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); // 设置接收数据长度,本次设置为32字节


SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB


SPI_RW_Reg(WRITE_REG + CONFIG, 0X0F); // 0x0f for RX (0x0e for TX mode)


delay_ms(1);


}


第一步:


寄存器的读写操作。写进(如CONFIG)一个值,然后读出,可以检查nRF24L01是否正常,引脚配置与连接是否正确,SPI模拟时序函数是否可用等。


第二步:


然后再只调发送端。把自动应答关闭。


SPI_RW_Reg(WRITE_REG + EN_AA, 0X00); //取消通道0自动应答


SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0X00); //无接收通道


SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0X00); //取消自动重发功能


第三步:


最后调接收端,同样先把自动应答关闭。


SPI_RW_Reg(WRITE_REG + EN_AA, 0X00); //取消通道0自动应答


SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0X01); //使能接收通道0


推荐阅读

史海拾趣

APLUS Products公司的发展小趣事

随着国内市场的不断饱和,APLUS Products公司开始寻求国际化发展的道路。在XXXX年,公司成功打入欧洲市场,并在当地建立了分支机构。通过深入了解欧洲消费者的需求和偏好,公司不断优化产品设计和营销策略,逐渐赢得了欧洲消费者的认可和喜爱。

Axon' Cable公司的发展小趣事

Axon' Cable公司自1965年在法国成立起,便致力于通讯连接器的研发与生产。在创业初期,公司面临着资金短缺、技术瓶颈和市场竞争的诸多挑战。然而,Axon' Cable凭借其坚定的信念和不懈的努力,逐步突破了技术难关,并成功开发出了一系列具有竞争力的产品。这些产品在市场上得到了广泛认可,为公司的后续发展奠定了坚实的基础。

EFINIX公司的发展小趣事

为了加速Quantum™可编程加速器技术的商业化进程,EFINIX公司与中芯国际集成电路制造有限公司展开合作。中芯国际是世界领先的集成电路晶圆代工企业之一,其先进的制造能力为EFINIX公司提供了强有力的支持。双方合作仅用了不到六个月的时间,就成功交付了首批Quantum™可编程加速器产品样本,创造了行业内的里程碑。

杰力(EMC)公司的发展小趣事

为了确保产品质量和客户满意度,杰力建立了一套完善的质量管理体系。公司从原材料采购、生产制造到产品检测等各个环节都实行严格的质量控制和管理。同时,杰力还引进了先进的检测设备和技术手段,对产品质量进行全面检测和评估。这些措施使得杰力的产品在质量上得到了有效保障,并赢得了客户的信赖和好评。

Coherent Inc公司的发展小趣事

尽管电子行业竞争激烈,市场变化莫测,但Coherent Inc.始终保持着坚定的前行步伐。公司不断适应市场变化,调整战略方向,积极应对各种挑战。同时,公司也注重与合作伙伴的紧密合作,共同推动激光技术的创新和应用。这种坚定前行的态度,使得Coherent Inc.在电子行业中始终保持着领先的地位。

这五个故事只是Coherent Inc.发展历程中的一部分,但它们足以展示公司在电子行业中的崛起和发展。通过不断的探索、创新、收购与整合,以及坚定的前行态度,Coherent Inc.已经成为了激光技术领域的佼佼者,为电子行业的发展做出了重要贡献。

Advance Tapes公司的发展小趣事

随着电子行业的快速发展,对胶带产品的性能要求也越来越高。Advance Tapes公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发的投入,引进了一批高素质的研发人才,并与多家高校和研究机构建立了合作关系。经过不懈努力,Advance Tapes成功开发出了一系列具有高性能、高可靠性的胶带产品,得到了广大客户的认可。

问答坊 | AI 解惑

汽车电子之新秀--GPS导航

由后泠战所导致的一切军事上的科技发展,全球卫星定位系统也许可以算是对我们每天的生活造成正面的冲击. 我们可以想象一下,21世纪的世界, 被一组扩大的卫星网路系统所覆盖,而且各种飞行器与车辆间经由这些网路彼此连结着进行着行动间的数据通讯, ...…

查看全部问答>

替Richifang发表观点:台企不值得去

不知道Richifang原有的想法是什么,谈谈我见过的台企吧。基本上是一个模子刻出来的,工资很低,工作强度很大,而且你会觉得中国人(台湾的头头)管中国人真的很可怕,有时会让我想起来当初的汉奸的那股坏劲儿和狠劲儿。所以你会发现富士康血汗工厂 ...…

查看全部问答>

高速浮点除法子程序,比标准库要快得多

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑 //============================================================================================== // ----Function: float Float_DIV(float Data_A,float Data_B); // -Description: 浮点除法运 ...…

查看全部问答>

软件启用内部上拉电阻的问题

从PIC16F73单片机的资料中看到,有些I/O口可以使用软件启动内部上拉电阻。 请问: 为什么要启动内部上拉电阻? 使用C语言如何启动? 如果不启动会有什么后果? …

查看全部问答>

成都名企招聘驱动开发工程师

主要是从事文件系统驱动的开发: 1.熟悉windows驱动开发或熟悉linux驱动开发 2.扎实的C/C++基础(笔试主要内容,比较难) 3.有过文件系统开发经验者优先. 4.熟悉汇编者优先. 5.富有竞争力的福利和薪筹 有意者可发邮件到:RealBackup@163.com QQ:2 ...…

查看全部问答>

高深的问题

如下这个函数是在WINCE的BSP里面的,pTOC是ROMHDR结构,/* Routine to copy the flashed NK image to RAM */ int EverythingRelocate(void) {     LONG len;     ROMHDR *ptoc;     ULONG pc, *toc, offset, dest ...…

查看全部问答>

信号处理资源的个人评述(转载)

信号处理资源的个人评述(转载) 2010-09-28 11:23     转载自: http://blog.ednchina.com/yrwusignal/1770462/message.aspx 信号处理是一门理论性与实践性都非常强的学科。比如DSP这个所写,既可以是指偏理论性的数字 ...…

查看全部问答>

两种可提高LED光效的芯片发光层结构设计

LDE的芯片结构设计是一项非常复杂的系统工程,其内容涉及以提高注入效率和光效为目的电致发光结构设计、以提高学出光效率为目的的光引出结构设计和与光效密相关的电极设计等。 随着MOCVD外延生长技术和多量子阱结构的发展,人们在精确控制外延、掺杂 ...…

查看全部问答>

大家鉴定一下这个电容

最近在学校仓库淘到一堆电容,但不知道他上面的参数啥意思,大家帮忙看看 上面写有HEC字样,还有56uf 400MV  这个400MV啥意思?现在没相机,中午上图啊,呵呵…

查看全部问答>

汽车LED灯刚兴起即遇汽车市场低迷

今年汽车市场的不景气让刚刚兴起的汽车LED灯(LED车灯)兜头一盆冷水,LED灯厂家真是太悲剧了啊。   从2008年开始,国家陆续出台的一系列刺激汽车消费政策迅速拉动了汽车需求释放,2009年、2010年中国汽车销量增速分别达到46%和32 %。   根据 ...…

查看全部问答>