Tank

nRF24L01发送与接收

0
阅读(4926)

nRF24L01基于MSP430F149平台的无线发送与接收

Nrf24L01为2.4GHZ频段,2Mbps高速超小型无线模块。支持六通道的数据接收。采用SPI接口,可以方便的利用单片机的硬件SPI口或者使用IO口进行模拟SPI。共有8个管脚。如下表示:

 

 

功能

方向

备注

VDD

VDD,正电源1.9~3.6v输入

 

 

CE

工作模式选择,RX或者TX模式选择

I

单片机的管脚要设置为输出

CSN

SPI片选使能,低电平使能

I

单片机的管脚要设置为输出

SCK

SPI时钟

I

单片机的管脚要设置为输出

MOSI

SPI输入

I

单片机的管脚要设置为输出

MISO

SPI输出

O

单片机的管脚要设置为输入

IRQ

中断输出

O

单片机的管脚要设置为输入

GND

电源地

 

 

 

SPI的指令设置,当CSN为低时,SPI接口开始等待一条指令,任何一条新指令均由CSN的由高到低的转换开始。

在调试中要注意uchar SPI_RW(uchar byte)函数的书写。

对于MSP430单片机来说,在使用之前要注意对时钟的初始化设置。

一、在单独调试发送的时候要注意设置的不同,在TX_MODE()这个函数里,需要将自动应答、自动重发的功能都禁止掉。这样在成功发送了数据后,就会产生一个TX_DS的发送完成中断标志,这时如果读取STATUS寄存器的话,会得到0X2E。读取FIFO_STATUS寄存器,回得到0X11。

发送方的工作流程:

·配置寄存器使芯片工作于发送模式后拉高CE端至少10us

·读状态寄存器STATUS

·判断是否是发送完成标志位置位

·清标志

·清数据缓冲
 




二、接收数据是要注意RX_MODE()函数的设置,仍然将自动应答取消掉,但是此时因为要接收数据需要把通道0使能,以方便接收数据。接收数据完成后读取STATUS的值为0X40,在接收数据之前FIFO_STATUS寄存器的值是0X11,但是在接收数据成功后变为0X12。如果数据宽度定义的小于32字节,那么接收成功读数据之前寄存器值应该为0x10,读数据之后就会变成0x11。

接收方工作流程先。

·配置寄存器使芯片工作于接收模式后拉高CE端至少130us

·读状态寄存器STATUS

·判断是否是接收完成标志位置位

·清标志

·读取数据缓冲区的数据

·清数据缓冲

  在调试的过程中参考了很多别人的代码,在这里对这些大虾们表示感谢。附件里是调试好的可以通信的代码,就是一边不停的发送,另一端在接收到数据后,将数据通过串口发送到上位机,显示在串口调试助手里。