当前位置:首页 » 《随便一记》 » 正文

STM32实现NRF24L01通信

14 人参与  2022年07月21日 13:25  分类 : 《随便一记》  评论

点击全文阅读


一. 简介

在各个无线通信模块中,由于NRF24L01价格便宜,而且体积小,以及不需要外接天线,传输距离约为10-20米,深受大家的喜爱。在遥控汽车,四轴飞行器中较为常见,在这里给大家分享其具体的使用。

模块共用8个引脚通信方式为SPI接口,速率不能太高,最好在10M以内。

在这里插入图片描述

IRQ : 中断输出,例如发送完成,或者接收完成。默认为高电平。CE : 芯片的使能引脚CSN:SPI协议的使能引脚

二. 数据传输过程

从图中可以看出,数据传输的一些特征。CSN默认为高电平,SCK默认为低电平。数据在SCK的下降沿送出,在SCK的上升沿读取数据,先发送高位,再发送低位。如果使用硬件SPI的话,就可以基于这个来设置SPI极性的相关参数了。先发送指令(在发送指令的同时,nrf会返回状态值),然后后面就是写数据,或者是读数据了。
在这里插入图片描述

三. 协议实现

由于这里的SPI的速率不能太高,所以这里就采用软件的方式来实现这个传输过程(使用硬件的话,可以将分频设置大一点),这样就可以任意选择适合的引脚了。
其中delay()是个空函数,可以加点延时,也可以不加。
Cn :命令
Data: 写入的数据
size : 数据的大小

代码的实现过程,是和上图一一对应起来的,就作详细的说明了。

void SPI_Write(unsigned char Cn,unsigned char *Data,unsigned char size){unsigned char i,j;CSN_LOW;/*写操作符*/for(i = 0;i < 8; i++){delay();SCK_LOW;if(Cn & 0x80)MOSI_HIGH;elseMOSI_LOW;SCK_HIGH;Cn <<= 1;}delay();/*写数据*/for(i = 0;i < size ;i++){delay();SCK_LOW;delay();delay();unsigned char d = Data[i];for(j = 0;j < 8;j++){SCK_LOW;if(d & 0x80){MOSI_HIGH;}else{MOSI_LOW;}SCK_HIGH;d <<= 1;SCK_HIGH;}}CSN_HIGH;SCK_LOW;}

四. NRF24L01命令详解

在这里插入图片描述
通过上图,可以看到一共只有8个命令。其中常用的有前六个命令
R/W_REGISTER: 读写寄存器命令,对同一个寄存器进行读写,命令只有第六位不一样,为1就是写,为0就是读。A就是具体的寄存器的地址了。这里有一点要注意,写寄存器是有要求的,只有在掉电或者待机模块下可写。可以简单理解为CE为0,就可以写。
R_RX_PAYLOAD : 读取接收到的数据
W_RX_PAYLOAD:将需要发送的数据写入fifo中,等待发送
FLUSH_TX/RX: 清空发送/接收数据的FIFO。

五. NRF24L01寄存器

一共有24个寄存器,这里就不一一列举出来了,具体对应的功能可以查看数据文档(是中文的哦)。

struct Nrf24L01{uint8_t Control;uint8_tEN_AA;uint8_t EN_RXADDR;uint8_tSETUP_AW;uint8_tSETUP_RETR;uint8_tRF_CH;uint8_tRF_SETUP;uint8_tSTATUS;uint8_tOBSERVE_TX;uint8_t CD;uint8_t RX_ADDR_P0;uint8_t RX_ADDR_P1;uint8_t RX_ADDR_P2;uint8_t RX_ADDR_P3;uint8_t RX_ADDR_P4;uint8_t RX_ADDR_P5;uint8_t TX_ADDR;uint8_t RX_PW_P0;uint8_t RX_PW_P1;uint8_t RX_PW_P2;uint8_t RX_PW_P3;uint8_t RX_PW_P4;uint8_t RX_PW_P5;uint8_t FIFO_STATUS;};

六. NRF24L01状态

通过下图,可以知道各个状态对应的功能。这里发送模型需要注意一下
CE为高10us后,就开始发送数据,如果这个时候把CE拉低了,还是会停留在发送模式,直到数据发送完成,然后到待机模式1
在这里插入图片描述
欢迎关注


点击全文阅读


本文链接:http://zhangshiyu.com/post/43623.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1