stm32 f407 调试2.4g接收端收不到数据
时间:10-02
整理:3721RD
点击:
我是按照这位仁兄的方法进行调试的
http://blog.sina.com.cn/s/blog_a6164cc90101awp5.html
发送端已经调试通过 statue寄存器返回值是0x2e fifo_status=0x11
我现在的问题是接收端status始终等于0x0e fifo_status=0x11 没有收到数据,有没有人遇到相同的问题,帮忙解决一下啊
马上要交作品了 急 啊 大家帮帮忙
下边是f407程序
#include "NRF24L01.h"
#include "stm32f4xx.h"
#define RX_DR 0x40
#define TX_DS 0x20
#define MAX_RT 0x10
u8 TX_ADDRESS[TX_ADR_WIDTH] = {0xb2,0xb2,0xb3,0xb4,0x01}; // 定义一个静态发送地址
u8 RX_BUF[TX_PLOAD_WIDTH];
u8 TX_BUF[TX_PLOAD_WIDTH];
void Initial_SPI(SPI_TypeDef* SPIx) //初始化IOB端口
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStruct;
if(SPIx==SPI2)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); //使能SPI2的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB ,ENABLE); //使能PB口的时钟
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2);//将PB10,14,15三个引脚映射到SPI2功能上
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //IO口的模式为服用模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉电阻,平时状态为低电平
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure); //执行初始化函数
SPI_I2S_DeInit(SPI2);
}
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_CRCPolynomial = 7;
SPI_Init(SPIx, &SPI_InitStruct);
SPI_Cmd(SPIx, ENABLE);
}
/*发送一个字节*/
void SPI_Send_byte(SPI_TypeDef* SPIx,u8 data)
{
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPIx,data);
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);
SPI_I2S_ReceiveData(SPIx);
}
/*接受一个字节*/
u8 SPI_Receive_byte(SPI_TypeDef* SPIx,u8 data)
{
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPIx,data);
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);
return SPI_I2S_ReceiveData(SPIx);
}
void delay1us(u8 t)
{
while(--t);
}
/****向寄存器reg写一个字节,同时返回状态字节**************/
u8 SPI_RW_Reg(u8 reg,u8 value)
{
u8 status;
CSN_L;
status=SPI_Receive_byte(SPI2,reg); //select register and write value to it
SPI_Send_byte(SPI2,value);
CSN_H;
delay1us(100);
return(status);
}
/****向寄存器reg读一个字节,同时返回状态字节**************/
u8 SPI_Read_Reg(u8 reg)
{
u8 status;
CSN_L;
SPI_Send_byte(SPI2,reg);
status=SPI_Receive_byte(SPI2,0); //select register and write value to it
CSN_H;
delay1us(100);
return(status);
}
/********读出bytes字节的数据*************************/
u8 SPI_Read_Buf(u8 reg,u8 *pBuf,u8 bytes)
{
u8 status,byte_ctr;
CSN_L;
status=SPI_Receive_byte(SPI2,reg);
for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
pBuf[byte_ctr]=SPI_Receive_byte(SPI2,0);
CSN_H;
return(status);
}
/****************写入bytes字节的数据*******************/
u8 SPI_Write_Buf(u8 reg,u8 *pBuf,u8 bytes)
{
u8 status,byte_ctr;
CSN_L;
status=SPI_Receive_byte(SPI2,reg);
delay1us(50);
for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
SPI_Send_byte(SPI2,*pBuf++);
CSN_H;
return(status);
}
/*接收函数,返回1表示有数据收到,否则没有数据接收到**/
u8 nRF24L01_RxPacket(u8* rx_buf)
{
u8 status,revale=0;
CE_L;
delay1us(50);
status=SPI_Receive_byte(SPI2,STATUS); // 读取状态寄存其来判断数据接收状况
if(status & RX_DR) // 判断是否接收到数据
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
revale =1; //读取数据完成标志
}
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS,status); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
CE_H;
return revale;
}
/****************发送函数***************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
{
CE_L; //StandBy I模式
SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
CE_H; //置高CE,激发数据发送
delay1us(50);
}
void RX_Mode(void)
{
CE_L;
SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 接收设备接收通道0使用和发送设备相同的发送地址
SPI_RW_Reg(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x00); // 使能接收通道0自动应答
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x01); // 使能接收通道0
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40); // 选择射频通道0x40
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0f); // CRC使能,16位CRC校验,上电,接收模式
CE_H;
delay1us(200);
}
void TX_Mode(u8 * tx_buf)
{
CE_L;
SPI_Write_Buf(WRITE_REG_NRF24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写入发送地址
SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 为了应答接收设备,接收通道0地址和发送地址相同
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x3f); // 使能接收通道0自动应答
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f); // 使能接收通道0
SPI_RW_Reg(WRITE_REG_NRF24L01 + SETUP_RETR, 0x0a); // 自动重发延时等待250us+86us,自动重发10次
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40); // 选择射频通道0x40
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_SETUP, 0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
SPI_RW_Reg(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e); // CRC使能,16位CRC校验,上电
CE_H;
delay1us(50);
}
void nRF24L01_Initial(void) //片选 中断 模式选择 引脚初始化 spi配置初始化
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_0|GPIO_Pin_3;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//对结构体的GPIO_OType对象赋值,声明IO口的结构是推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStruct);
Initial_SPI(SPI2);
}
/****************** 配置函数********************************/
void nRF24L01_Config(void)
{
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e); // Set PWR_UP bit, enable CRC(2 bytes) &Prim:RX. RX_DR enabled..
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x3f);
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f); // Enable Pipe0
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40);
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_SETUP,0x07); // TX_PWR:0dBm, Datarate:2Mbps,
}
void NRF24L01_Send(void)
{
u8 status=0x00;
TX_Mode(TX_BUF);
while(IRQ);
CE_L;
delay1us(50);
status=SPI_Read_Reg(STATUS); // 读取状态寄存其来判断数据接收状况
if(status&TX_DS) /*tx_ds == 0x20*/
{
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x20); // 清除TX,让IRQ拉低;
}
else if(status&MAX_RT)
{
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x10); // 清除TX,让IRQ拉低;
}
CE_H;
// status=20;
}
void NRF24L01_Receive(void)
{
u8 i,status=0x01;
Initial_SPI(SPI2);
RX_Mode();
while(IRQ);
CE_L;
delay1us(50);
status=SPI_Read_Reg(STATUS); // 读取状态寄存其来判断数据接收状况
if(status & 0x40) //接受中断标志位
{
SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x40); // 清除TX,让IRQ拉低
}
CE_H;
}
http://blog.sina.com.cn/s/blog_a6164cc90101awp5.html
发送端已经调试通过 statue寄存器返回值是0x2e fifo_status=0x11
我现在的问题是接收端status始终等于0x0e fifo_status=0x11 没有收到数据,有没有人遇到相同的问题,帮忙解决一下啊
马上要交作品了 急 啊 大家帮帮忙
下边是f407程序
#include "NRF24L01.h"
#include "stm32f4xx.h"
#define RX_DR 0x40
#define TX_DS 0x20
#define MAX_RT 0x10
u8 TX_ADDRESS[TX_ADR_WIDTH] = {0xb2,0xb2,0xb3,0xb4,0x01}; // 定义一个静态发送地址
u8 RX_BUF[TX_PLOAD_WIDTH];
u8 TX_BUF[TX_PLOAD_WIDTH];
void Initial_SPI(SPI_TypeDef* SPIx) //初始化IOB端口
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStruct;
if(SPIx==SPI2)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); //使能SPI2的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB ,ENABLE); //使能PB口的时钟
GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2);//将PB10,14,15三个引脚映射到SPI2功能上
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //IO口的模式为服用模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉电阻,平时状态为低电平
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Init(GPIOB, &GPIO_InitStructure); //执行初始化函数
SPI_I2S_DeInit(SPI2);
}
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_CRCPolynomial = 7;
SPI_Init(SPIx, &SPI_InitStruct);
SPI_Cmd(SPIx, ENABLE);
}
/*发送一个字节*/
void SPI_Send_byte(SPI_TypeDef* SPIx,u8 data)
{
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPIx,data);
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);
SPI_I2S_ReceiveData(SPIx);
}
/*接受一个字节*/
u8 SPI_Receive_byte(SPI_TypeDef* SPIx,u8 data)
{
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPIx,data);
while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE)==RESET);
return SPI_I2S_ReceiveData(SPIx);
}
void delay1us(u8 t)
{
while(--t);
}
/****向寄存器reg写一个字节,同时返回状态字节**************/
u8 SPI_RW_Reg(u8 reg,u8 value)
{
u8 status;
CSN_L;
status=SPI_Receive_byte(SPI2,reg); //select register and write value to it
SPI_Send_byte(SPI2,value);
CSN_H;
delay1us(100);
return(status);
}
/****向寄存器reg读一个字节,同时返回状态字节**************/
u8 SPI_Read_Reg(u8 reg)
{
u8 status;
CSN_L;
SPI_Send_byte(SPI2,reg);
status=SPI_Receive_byte(SPI2,0); //select register and write value to it
CSN_H;
delay1us(100);
return(status);
}
/********读出bytes字节的数据*************************/
u8 SPI_Read_Buf(u8 reg,u8 *pBuf,u8 bytes)
{
u8 status,byte_ctr;
CSN_L;
status=SPI_Receive_byte(SPI2,reg);
for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
pBuf[byte_ctr]=SPI_Receive_byte(SPI2,0);
CSN_H;
return(status);
}
/****************写入bytes字节的数据*******************/
u8 SPI_Write_Buf(u8 reg,u8 *pBuf,u8 bytes)
{
u8 status,byte_ctr;
CSN_L;
status=SPI_Receive_byte(SPI2,reg);
delay1us(50);
for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
SPI_Send_byte(SPI2,*pBuf++);
CSN_H;
return(status);
}
/*接收函数,返回1表示有数据收到,否则没有数据接收到**/
u8 nRF24L01_RxPacket(u8* rx_buf)
{
u8 status,revale=0;
CE_L;
delay1us(50);
status=SPI_Receive_byte(SPI2,STATUS); // 读取状态寄存其来判断数据接收状况
if(status & RX_DR) // 判断是否接收到数据
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
revale =1; //读取数据完成标志
}
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS,status); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
CE_H;
return revale;
}
/****************发送函数***************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
{
CE_L; //StandBy I模式
SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
CE_H; //置高CE,激发数据发送
delay1us(50);
}
void RX_Mode(void)
{
CE_L;
SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 接收设备接收通道0使用和发送设备相同的发送地址
SPI_RW_Reg(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x00); // 使能接收通道0自动应答
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x01); // 使能接收通道0
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40); // 选择射频通道0x40
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0f); // CRC使能,16位CRC校验,上电,接收模式
CE_H;
delay1us(200);
}
void TX_Mode(u8 * tx_buf)
{
CE_L;
SPI_Write_Buf(WRITE_REG_NRF24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写入发送地址
SPI_Write_Buf(WRITE_REG_NRF24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 为了应答接收设备,接收通道0地址和发送地址相同
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x3f); // 使能接收通道0自动应答
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f); // 使能接收通道0
SPI_RW_Reg(WRITE_REG_NRF24L01 + SETUP_RETR, 0x0a); // 自动重发延时等待250us+86us,自动重发10次
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40); // 选择射频通道0x40
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_SETUP, 0x07); // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
SPI_RW_Reg(WRITE_REG_NRF24L01 + RX_PW_P0, TX_PLOAD_WIDTH); // 接收通道0选择和发送通道相同有效数据宽度
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e); // CRC使能,16位CRC校验,上电
CE_H;
delay1us(50);
}
void nRF24L01_Initial(void) //片选 中断 模式选择 引脚初始化 spi配置初始化
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_0|GPIO_Pin_3;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//对结构体的GPIO_OType对象赋值,声明IO口的结构是推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStruct);
Initial_SPI(SPI2);
}
/****************** 配置函数********************************/
void nRF24L01_Config(void)
{
SPI_RW_Reg(WRITE_REG_NRF24L01 + CONFIG, 0x0e); // Set PWR_UP bit, enable CRC(2 bytes) &Prim:RX. RX_DR enabled..
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_AA, 0x3f);
SPI_RW_Reg(WRITE_REG_NRF24L01 + EN_RXADDR, 0x3f); // Enable Pipe0
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_CH, 40);
SPI_RW_Reg(WRITE_REG_NRF24L01 + RF_SETUP,0x07); // TX_PWR:0dBm, Datarate:2Mbps,
}
void NRF24L01_Send(void)
{
u8 status=0x00;
TX_Mode(TX_BUF);
while(IRQ);
CE_L;
delay1us(50);
status=SPI_Read_Reg(STATUS); // 读取状态寄存其来判断数据接收状况
if(status&TX_DS) /*tx_ds == 0x20*/
{
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x20); // 清除TX,让IRQ拉低;
}
else if(status&MAX_RT)
{
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x10); // 清除TX,让IRQ拉低;
}
CE_H;
// status=20;
}
void NRF24L01_Receive(void)
{
u8 i,status=0x01;
Initial_SPI(SPI2);
RX_Mode();
while(IRQ);
CE_L;
delay1us(50);
status=SPI_Read_Reg(STATUS); // 读取状态寄存其来判断数据接收状况
if(status & 0x40) //接受中断标志位
{
SPI_Read_Buf(RD_RX_PLOAD,RX_BUF,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
SPI_RW_Reg(WRITE_REG_NRF24L01 + STATUS, 0x40); // 清除TX,让IRQ拉低
}
CE_H;
}
有没有人啊 我看网上好多人遇到这个问题
都没有人回答啊。
两天了 要沉了