NRF24L01

参考:STM32控制NRF24L01无线模块进行通信
具体操作寄存器工作原理请上B站:
无线模块NRF24L01
注意:

**//注意:以下两个步骤十分重要,千万不要写错
	
	SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;		//串行同步时钟的空闲状态为低电平  注意这里是空闲状态是低电平
	
	SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;	//串行同步时钟的第1个跳变沿数据被采样**

1、NRF24L01引脚说明:
在这里插入图片描述

CE:RX或TX模式选择 
CSN:SPI片选信号 
SCK:SPI时钟 
MOSI:SPI数据输入 ,即主器件数据输出,从器件数据输入。
MISO:SPI数据输出 ,即主器件数据输入,从器件数据输出。
IRQ:可屏蔽中断脚
  • 在CSN为低电平的情况下,CE协同CONFIG寄存器共同决定NRFL2401的状态。
  • IRQ在中断时变成低电平。TxFIFO发送完毕且收到ACK时、RxFIFO收到数据、达到最大重发次数时会产生中断。

2、NRF24L01采用SPI通信协议:

  • 采用主从方式工作,全双工,同步(需要时钟线)通信总线
  • SCK信号线只由主设备控制,且数据为一位一位的进行传送
  • SPI的数据输入和数据输出线独立
  • MOSI:主机输出,从机输入。M:Master(主机),S:Slavel(从机)
  • MISO:主机输入,从机输出
  • 没有指定的流控制,没有应答机制确认是否接收到数据
  • MOSI的意思就是说如果此芯片作为主机时,该引脚(MOSI引脚)就是输出,如果此芯片作为从机时,该引脚(MOSI)引脚就是输入。MISO与其类似的道理。
  • 由于SPI采用两个移位寄存器来实现数据的交换,所以在八个时钟过后,主机的数据会发送到从机中,同时,从机的数据也会发送到主机中。

3、底层驱动时序图:
在这里插入图片描述

  • 数据为先发高位,再发低位,在时钟SCK的上升沿,数据发送出去。
  • 每次通信前,需要先发送命令位,即图中的C7-C0。
  • S7-S0为status寄存器位。
  • D7-D0为数据位。

3、相关指令操作:
在这里插入图片描述

  • R_REGISTER:读寄存器指令,指令格式为000A AAAA,其中AAAAA为要读取的寄存器地址,使用时,只需要让该指令逻辑或上寄存器地址即可,或者让该指令加上寄存器地址。
  • W_REGISTER:写寄存器指令,用法与读指令类似。
    4、相关读写驱动程序:
    (1)同步读写程序:
/****************************************************************************************************
/*功能:NRF24L01的 SPI同步读写时序
/****************************************************************************************************/
uchar SPI_RW(uchar reg)//在发送一字节的同时,还会收到一字节的数据
{
	uchar bit_ctr;
   	for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
   	{
		MOSI = (reg & 0x80);         // 主机发送一字节数据的最高位
		reg = (reg << 1);           // 主机将要发送的数据左移一位。注意SPI通信是先发高位,再发低位
		SCK = 1;                    // 拉高SCK时钟线
		reg |= MISO;       		  // 获取从机发给主机的一位数据,将其放到主机寄存器的最低位
		SCK = 0;            	// 拉低SCK时钟线
   	}
    return(reg);           		  // 返回从机发给主机的数据
}
(2)读取寄存器内的内容的程序
/****************************************************************************************************
/*功能:NRF24L01的SPI读寄存器时序
/****************************************************************************************************/
uchar SPI_Read(uchar reg)
{
	uchar reg_val;
	CSN = 0;                // 片选信号拉低,低电平有效
	SPI_RW(reg);            // 选择将要读的寄存器地址
	reg_val = SPI_RW(0);    // 读取寄存器内的数据信息,此时又向被读的寄存器内写入了数据0,其实写多少都不影响我们对该寄存器内容的读操作。
	CSN = 1;                // 片选信号拉高,终止SPI通信
	return(reg_val);        // 返回寄存器里的内容
}

SPI相关基础知识:

  • SPI Serial Peripheral interface 串行外围设备接口
  • 它是一种高速的、全双工、同步的通信总线
  • 同步的:有单独的时钟线
  • 全双工:发送和接收也分别是独立的通信线
  • SPI一般采用四根线通信
    (1)SCLK:时钟信号
    (2)CS:从设备片选信号,由主设备控制
    (3)MOSI:主设备数据输出,从设备数据输入
    (4)MISO:主设备数据输入,从设备数据输出
    注:MOSI引脚的意思是说,如果当前设备是主机(Master)时,此引脚(MOSI)就是输出引脚,如果当前设备是从机(Slavel)时,此引脚(MOSI)就是输入引脚。

1、SPI内部结构简明图
在这里插入图片描述
由上图我们可以看出,主机和从机通过MOSI和MISO两根线进行相连,并且主从机内部都有一个移位寄存器。主从机共用一个时钟信号线,故称其为同步通信。SPI通信是按位进行的,即一个时钟只发送一位数据,且先发送高位再发送低位。当一个时钟上升沿到来时,主机的一位数据发送到从机,同时从机的一位数据也发送到了主机,即一个时钟脉冲的作用下,主从机实现了一位数据的交换,当八个时钟脉冲之后,主从机就实现了一个字节的交换,也就是说主机在向从机发送一个字节数据的同时,从机也会给主机发送一个字节的数据,这就是SPI通信的基本原理,和其他通信协议还是有区别的。
2、SPI通信原理总结:

  • 硬件上为4根线
  • 主机和从机都有一个串行移位寄存器,主机通过向他的SPI串行移位寄存器写入一个字节来发起一次传输。
  • 串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。
  • 外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值