nRF24L01发送与接收
0赞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
·判断是否是接收完成标志位置位
·清标志
·读取数据缓冲区的数据
·清数据缓冲
在调试的过程中参考了很多别人的代码,在这里对这些大虾们表示感谢。附件里是调试好的可以通信的代码,就是一边不停的发送,另一端在接收到数据后,将数据通过串口发送到上位机,显示在串口调试助手里。
