在干啥
這兩天在調nrf24l01,最終還是參考正點原子的例程才調通,看芯片手冊太難了
還要說啥廢話
廢話說到這,接下來上代碼
SPI協議
spi.c
#include "spi.h"
//以下是SPI模塊的初始化代碼,配置成主機模式,訪問SD Card/W25Q64/NRF24L01
//SPI口初始化
//這里針是對SPI2的初始化
void SPI2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//PORTB時鍾使能
RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );//SPI2時鍾使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //PB13/14/15復用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //PB13/14/15上拉
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //設置SPI單向或者雙向的數據模式:SPI設置為雙線雙向全雙工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設置SPI工作模式:設置為主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //設置SPI的數據大小:SPI發送接收8位幀結構
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //串行同步時鍾的空閑狀態為高電平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //串行同步時鍾的第二個跳變沿(上升或下降)數據被采樣
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內部NSS信號有SSI位控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定義波特率預分頻的值:波特率預分頻值為256 ,傳輸速度36M/256=140.625KHz
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定數據傳輸從MSB位還是LSB位開始:數據傳輸從MSB(高位)在前
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計算的多項式,大於1即可
SPI_Init(SPI2, &SPI_InitStructure); //根據SPI_InitStruct中指定的參數初始化外設SPIx寄存器
SPI_Cmd(SPI2, ENABLE); //使能SPI外設
SPI2_ReadWriteByte(0xff);//啟動傳輸(作用是維持MOSI為高電平,非必須,可去掉)
}
//固件庫並沒有提供單獨設置分頻系數的函數------
//SPI 速度設置函數
//SpeedSet:
//SPI_BaudRatePrescaler_2 2分頻
//SPI_BaudRatePrescaler_8 8分頻
//SPI_BaudRatePrescaler_16 16分頻
//SPI_BaudRatePrescaler_256 256分頻
void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)
{
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
SPI2->CR1&=0XFFC7;
SPI2->CR1|=SPI_BaudRatePrescaler; //設置SPI2速度
SPI_Cmd(SPI2,ENABLE);
}
//SPIx 讀寫一個字節
//TxData:要寫入的字節
//返回值:讀取到的字節
u8 SPI2_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //發送緩存空標志位 TXE為1表明發送緩存器為空
{
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPI2, TxData); //通過外設SPIx發送一個數據
retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)//接受緩存非空標志位 RXNE為1表明接收緩沖器中包含有效數據
{
retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPI2); //返回通過SPIx最近接收的數據
}
spi.h
#ifndef __SPI_H
#define __SPI_H
#include "sys.h"
void SPI2_Init(void); //初始化SPI口
void SPI2_SetSpeed(u8 SpeedSet); //設置SPI速度
u8 SPI2_ReadWriteByte(u8 TxData);//SPI總線讀寫一個字節
#endif
2401.c
#include "nrf2401.h"
#include "spi.h"
#include "sys.h"
const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //發送地址
const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};
//初始化 24L01的IO口
void NRF24L01_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //使能PB,G端口時鍾
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PA10、PB12推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化指定IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA11輸入
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_11); //PA10,11
GPIO_ResetBits(GPIOB,GPIO_Pin_12); //PB12
SPI2_Init(); //初始化SPI
SPI_Cmd(SPI2,DISABLE); //SPI外設不使能
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //設置SPI單向或雙向的數據模式:SPI設置為雙線雙向全雙工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //設置SPI工作模式: 設置為主SPI
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8位幀結構
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //時鍾懸空低
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //數據捕獲於第一個時鍾沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號由軟件控制
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; //定義波特率預分頻的值:波特率預分頻值為16
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //MSB 位開始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計算的多項式
SPI_Init(SPI2,&SPI_InitStructure); //根據指定的參數初始化外設SPIx
SPI_Cmd(SPI2,ENABLE); //使能SPI外設
NRF24L01_CE=0; //使能24L01
NRF24L01_CSN=1; //SPI片選取消
}
//檢測24L01是否存在
//返回值:0,成功;1,失敗
u8 NRF24L01_Check(void)
{
u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
u8 i;
SPI2_SetSpeed(SPI_BaudRatePrescaler_4); //spi速度為9Mhz(24L01的最大SPI時鍾為10Mhz)
NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);//寫入5個字節的地址.
NRF24L01_Read_Buf(TX_ADDR,buf,5); //讀出寫入的地址
for(i=0;i<5;i++)if(buf[i]!=0XA5)break;
if(i!=5)return 1;//檢測24L01錯誤
return 0; //檢測到24L01
}
//SPI寫寄存器
//reg:指定寄存器地址
//value:寫入的值
u8 NRF24L01_Write_Reg(u8 reg,u8 value)
{
u8 status;
NRF24L01_CSN=0; //使能SPI傳輸
status =SPI2_ReadWriteByte(reg);//發送寄存器號
SPI2_ReadWriteByte(value); //寫入寄存器的值
NRF24L01_CSN=1; //禁止SPI傳輸
return(status); //返回狀態值
}
//讀取SPI寄存器值
//reg:要讀的寄存器
u8 NRF24L01_Read_Reg(u8 reg)
{
u8 reg_val;
NRF24L01_CSN = 0; //使能SPI傳輸
SPI2_ReadWriteByte(reg); //發送寄存器號
reg_val=SPI2_ReadWriteByte(0XFF);//讀取寄存器內容
NRF24L01_CSN = 1; //禁止SPI傳輸
return(reg_val); //返回狀態值
}
//在指定位置讀出指定長度的數據
//reg:寄存器(位置)
//*pBuf:數據指針
//len:數據長度
//返回值,此次讀到的狀態寄存器值
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len)
{
u8 status,u8_ctr;
NRF24L01_CSN = 0; //使能SPI傳輸
status=SPI2_ReadWriteByte(reg);//發送寄存器值(位置),並讀取狀態值
for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPI2_ReadWriteByte(0XFF);//讀出數據
NRF24L01_CSN=1; //關閉SPI傳輸
return status; //返回讀到的狀態值
}
//在指定位置寫指定長度的數據
//reg:寄存器(位置)
//*pBuf:數據指針
//len:數據長度
//返回值,此次讀到的狀態寄存器值
u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len)
{
u8 status,u8_ctr;
NRF24L01_CSN = 0; //使能SPI傳輸
status = SPI2_ReadWriteByte(reg);//發送寄存器值(位置),並讀取狀態值
for(u8_ctr=0; u8_ctr<len; u8_ctr++)SPI2_ReadWriteByte(*pBuf++); //寫入數據
NRF24L01_CSN = 1; //關閉SPI傳輸
return status; //返回讀到的狀態值
}
//啟動NRF24L01發送一次數據
//txbuf:待發送數據首地址
//返回值:發送完成狀況
u8 NRF24L01_TxPacket(u8 *txbuf)
{
u8 sta;
SPI2_SetSpeed(SPI_BaudRatePrescaler_8);//spi速度為9Mhz(24L01的最大SPI時鍾為10Mhz)
NRF24L01_CE=0;
NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//寫數據到TX BUF 32個字節
NRF24L01_CE=1;//啟動發送
while(NRF24L01_IRQ!=0);//等待發送完成
sta=NRF24L01_Read_Reg(STATUS); //讀取狀態寄存器的值
NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中斷標志
if(sta&MAX_TX)//達到最大重發次數
{
NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
return MAX_TX;
}
if(sta&TX_OK)//發送完成
{
return TX_OK;
}
return 0xff;//其他原因發送失敗
}
//啟動NRF24L01發送一次數據
//txbuf:待發送數據首地址
//返回值:0,接收完成;其他,錯誤代碼
u8 NRF24L01_RxPacket(u8 *rxbuf)
{
u8 sta;
SPI2_SetSpeed(SPI_BaudRatePrescaler_8); //spi速度為9Mhz(24L01的最大SPI時鍾為10Mhz)
sta=NRF24L01_Read_Reg(STATUS); //讀取狀態寄存器的值
NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中斷標志
if(sta&RX_OK)//接收到數據
{
NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//讀取數據
NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器
return 0;
}
return 1;//沒收到任何數據
}
//該函數初始化NRF24L01到RX模式
//設置RX地址,寫RX數據寬度,選擇RF頻道,波特率和LNA HCURR
//當CE變高后,即進入RX模式,並可以接收數據了
void NRF24L01_RX_Mode(void)
{
NRF24L01_CE=0;
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//寫RX節點地址
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01); //使能通道0的自動應答
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //設置RF通信頻率
NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//選擇通道0的有效數據寬度
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//設置TX發射參數,0db增益,2Mbps,低噪聲增益開啟
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的參數;PWR_UP,EN_CRC,16BIT_CRC,接收模式
NRF24L01_CE = 1; //CE為高,進入接收模式
}
//該函數初始化NRF24L01到TX模式
//設置TX地址,寫TX數據寬度,設置RX自動應答的地址,填充TX發送數據,選擇RF頻道,波特率和LNA HCURR
//PWR_UP,CRC使能
//當CE變高后,即進入RX模式,並可以接收數據了
//CE為高大於10us,則啟動發送.
void NRF24L01_TX_Mode(void)
{
NRF24L01_CE=0;
NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//寫TX節點地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //設置TX節點地址,主要為了使能ACK
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01); //使能通道0的自動應答
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址
NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//設置自動重發間隔時間:500us + 86us;最大自動重發次數:10次
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //設置RF通道為40
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //設置TX發射參數,0db增益,2Mbps,低噪聲增益開啟
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e); //配置基本工作模式的參數;PWR_UP,EN_CRC,16BIT_CRC,接收模式,開啟所有中斷
NRF24L01_CE=1;//CE為高,10us后啟動發送
}
/*--------------------------------
改變為發送模式
---------------------------------*/
void changeModeTx(void)
{
NRF24L01_CE=0; //使能24L01
NRF24L01_CSN=1; //SPI片選取消
NRF24L01_TX_Mode();
}
/*--------------------------------
改變為接收模式
---------------------------------*/
void changeModeRx(void)
{
NRF24L01_CE=0; //使能24L01
NRF24L01_CSN=1; //SPI片選取消
NRF24L01_RX_Mode();
}
2401.h
#ifndef __24L01_H
#define __24L01_H
#include "sys.h"
//pb13 14 15 SPI2_SCK SPI2_MISO SPI2_MOSI
/*
NRF24L01_CE PBout(12) //24L01片選信號
NRF24L01_CSN PAout(4) //SPI片選信號
NRF24L01_IRQ PAin(11) //IRQ主機數據輸入
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//NRF24L01寄存器操作命令
#define NRF_READ_REG 0x00 //讀配置寄存器,低5位為寄存器地址
#define NRF_WRITE_REG 0x20 //寫配置寄存器,低5位為寄存器地址
#define RD_RX_PLOAD 0x61 //讀RX有效數據,1~32字節
#define WR_TX_PLOAD 0xA0 //寫TX有效數據,1~32字節
#define FLUSH_TX 0xE1 //清除TX FIFO寄存器.發射模式下用
#define FLUSH_RX 0xE2 //清除RX FIFO寄存器.接收模式下用
#define REUSE_TX_PL 0xE3 //重新使用上一包數據,CE為高,數據包被不斷發送.
#define NOP 0xFF //空操作,可以用來讀狀態寄存器
//SPI(NRF24L01)寄存器地址
#define CONFIG 0x00 //配置寄存器地址;bit0:1接收模式,0發射模式;bit1:電選擇;bit2:CRC模式;bit3:CRC使能;
//bit4:中斷MAX_RT(達到最大重發次數中斷)使能;bit5:中斷TX_DS使能;bit6:中斷RX_DR使能
#define EN_AA 0x01 //使能自動應答功能 bit0~5,對應通道0~5
#define EN_RXADDR 0x02 //接收地址允許,bit0~5,對應通道0~5
#define SETUP_AW 0x03 //設置地址寬度(所有數據通道):bit1,0:00,3字節;01,4字節;02,5字節;
#define SETUP_RETR 0x04 //建立自動重發;bit3:0,自動重發計數器;bit7:4,自動重發延時 250*x+86us
#define RF_CH 0x05 //RF通道,bit6:0,工作通道頻率;
#define RF_SETUP 0x06 //RF寄存器;bit3:傳輸速率(0:1Mbps,1:2Mbps);bit2:1,發射功率;bit0:低噪聲放大器增益
#define STATUS 0x07 //狀態寄存器;bit0:TX FIFO滿標志;bit3:1,接收數據通道號(最大:6);bit4,達到最多次重發
//bit5:數據發送完成中斷;bit6:接收數據中斷;
#define MAX_TX 0x10 //達到最大發送次數中斷
#define TX_OK 0x20 //TX發送完成中斷
#define RX_OK 0x40 //接收到數據中斷
#define OBSERVE_TX 0x08 //發送檢測寄存器,bit7:4,數據包丟失計數器;bit3:0,重發計數器
#define CD 0x09 //載波檢測寄存器,bit0,載波檢測;
#define RX_ADDR_P0 0x0A //數據通道0接收地址,最大長度5個字節,低字節在前
#define RX_ADDR_P1 0x0B //數據通道1接收地址,最大長度5個字節,低字節在前
#define RX_ADDR_P2 0x0C //數據通道2接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;
#define RX_ADDR_P3 0x0D //數據通道3接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;
#define RX_ADDR_P4 0x0E //數據通道4接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;
#define RX_ADDR_P5 0x0F //數據通道5接收地址,最低字節可設置,高字節,必須同RX_ADDR_P1[39:8]相等;
#define TX_ADDR 0x10 //發送地址(低字節在前),ShockBurstTM模式下,RX_ADDR_P0與此地址相等
#define RX_PW_P0 0x11 //接收數據通道0有效數據寬度(1~32字節),設置為0則非法
#define RX_PW_P1 0x12 //接收數據通道1有效數據寬度(1~32字節),設置為0則非法
#define RX_PW_P2 0x13 //接收數據通道2有效數據寬度(1~32字節),設置為0則非法
#define RX_PW_P3 0x14 //接收數據通道3有效數據寬度(1~32字節),設置為0則非法
#define RX_PW_P4 0x15 //接收數據通道4有效數據寬度(1~32字節),設置為0則非法
#define RX_PW_P5 0x16 //接收數據通道5有效數據寬度(1~32字節),設置為0則非法
#define NRF_FIFO_STATUS 0x17 //FIFO狀態寄存器;bit0,RX FIFO寄存器空標志;bit1,RX FIFO滿標志;bit2,3,保留
//bit4,TX FIFO空標志;bit5,TX FIFO滿標志;bit6,1,循環發送上一數據包.0,不循環;
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*//24L01操作線
#define NRF24L01_CE PGout(8) //24L01片選信號
#define NRF24L01_CSN PGout(7) //SPI片選信號
#define NRF24L01_IRQ PGin(6) //IRQ主機數據輸入
*/
//24L01操作線
#define NRF24L01_CE PBout(12) //24L01片選信號
#define NRF24L01_CSN PAout(4) //SPI片選信號
#define NRF24L01_IRQ PAin(11) //IRQ主機數據輸入
//24L01發送接收數據寬度定義
#define TX_ADR_WIDTH 5 //5字節的地址寬度
#define RX_ADR_WIDTH 5 //5字節的地址寬度
#define TX_PLOAD_WIDTH 32 //32字節的用戶數據寬度
#define RX_PLOAD_WIDTH 32 //32字節的用戶數據寬度
void NRF24L01_Init(void); //初始化
void NRF24L01_RX_Mode(void); //配置為接收模式
void NRF24L01_TX_Mode(void); //配置為發送模式
u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 u8s);//寫數據區
u8 NRF24L01_Read_Buf(u8 reg, u8 *pBuf, u8 u8s); //讀數據區
u8 NRF24L01_Read_Reg(u8 reg); //讀寄存器
u8 NRF24L01_Write_Reg(u8 reg, u8 value); //寫寄存器
u8 NRF24L01_Check(void); //檢查24L01是否存在
u8 NRF24L01_TxPacket(u8 *txbuf); //發送一個包的數據
u8 NRF24L01_RxPacket(u8 *rxbuf); //接收一個包的數據
void changeModeTx(void);
void changeModeRx(void);
#endif
main_Tx.c 發送端
#include "sys.h"
#include "nrf2401.h"
#include "led.h"
void MySystemInit(void){
SystemInit();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
uart_init(115200);
NRF24L01_Init();
LED_GPIO_Config();
while( NRF24L01_Check()) //檢查NRF24L01
{
printf("error");
delay_ms(100);
}
}
u16 t=0;
u8 key;
u8 mode;
u8 tmp_buf[33]="fuck";
//char * k;
void TX(void)
{
if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
{
printf("success");
tmp_buf[32]=0;//加入結束符
}else
{
printf("failed");
};
delay_ms(1500);
}
int main(){
MySystemInit();
NRF24L01_TX_Mode();
mode=' ';//從空格鍵開始
//changeModeTx();
while(1){
TX();
}
}
main_RX.c 接收端
#include "sys.h"
#include "nrf2401.h"
u8 MSG_RX_BUF[33];
void MySystemInit(void){
SystemInit();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
uart_init(115200);
NRF24L01_Init();
while( NRF24L01_Check()) //檢查NRF24L01
{
printf("error");
delay_ms(100);
}
}
u16 t=0;
u8 key;
u8 mode;
u8 tmp_buf[33];
char Display[80];
char * dis;
void RX(void)
{
if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,則顯示出來.
{
int i=0;
printf("Recived");
tmp_buf[32]=0;//加入字符串結束符
printf(tmp_buf);
}else delay_us(100);
t++;
if(t==10000)//大約1s鍾改變一次狀態
{
t=0;
}
}
int main(){
MySystemInit();
NRF24L01_RX_Mode();
mode=' ';//從空格鍵開始
while(1){
RX();
}
}