|
最近在帮老师做一个无线音频通讯的项目,射频部分用NRF24L01,MCU是用M16。但是调试了两个星期,还是没有结果,快疯了,现在只能想大家求助。
现在的问题是两个24L01无法实现单向数据传输,已排除硬件无问题。
首先,分别对接受和发射模块的TX_ADDR和RX_PW_P0地址寄存器写入相同的地址,之后再读出地址,读出的地址和写入的地址一致并且频率,地址宽度,传输速率,校验选项,数据长度设置都相同。
发射端使能MAX_RT中断,SETUP_RETR为默认的0x03,接收端无法接受到数据,发射端能触发MAX_RT中断。接收端能CD能检测到发射端的信号(通过IO口判断CD状态
,4个脉冲中后三个重发,与SETUP_RETR设置符合),可却无法接收到发射的数据。
![](http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_600210A6TJ1C.jpg)
(原文件名:波形图.jpg)
下面是发射和接收的配置
void TX_Mode(void)
{
CE_L;
WIRTE_BUF(TX_ADDR + WRITE,ADDRESS,ADR_WIDTH);//设置发射地址
WIRTE_BUF(RX_ADDR_P0 + WRITE,ADDRESS,ADR_WIDTH);//设置接收地址
SPI_RW_REG(WRITE + EN_AA, ENAA_P0); // 数据通道 0 自动应答允许
SPI_RW_REG(WRITE + EN_RXADDR, ERX_P0); // 接收数据通道 0 允许
SPI_RW_REG(WRITE + SETUP_AW, 0x03); //地址宽度
SPI_RW_REG(WRITE + RF_CH, frequency); // 2 Mbps 0dBm低噪声放大器增益
SPI_RW_REG(WRITE + RF_SETUP, 0x07);
SPI_RW_REG(WRITE + RX_PW_P0, 31);
SPI_RW_REG(WRITE + CONFIG, EN_CRC + CRCO + PWR_UP);
}
void send_data(uchar *address, uchar *buffer,uchar length)
{
CE_L;
CSN_L;
SPI_RW_REG(FLUSH_TX);//清除发射FIFO的数据
CSN_H;
WIRTE_BUF(RX_ADDR_P0 + WRITE,address,length);//写接收地址
WIRTE_BUF(TX_ADDR + WRITE,address,length);//写发射地址
WIRTE_BUF(WR_TX_PLOAD,buffer,length);//向FIFO写数据
CE_H;//激活发射
delay_us(20);
//CE_L;
}
void RX_Mode(void)
{
CE_L;
WIRTE_BUF(TX_ADDR + WRITE,ADDRESS,ADR_WIDTH);//设置发射地址
WIRTE_BUF(RX_ADDR_P0 + WRITE,ADDRESS,ADR_WIDTH);//设置接收地址
SPI_RW_REG(WRITE + EN_AA, ENAA_P0);// 数据通道 0 自动应答允许
SPI_RW_REG(WRITE + EN_RXADDR, ERX_P0);// 接收数据通道 0 允许
SPI_RW_REG(WRITE + SETUP_AW, 0x03);//地址宽度
SPI_RW_REG(WRITE + RF_CH, frequency);//频率
SPI_RW_REG(WRITE + RF_SETUP, 0x07);// 2 Mbps 0dBm低噪声放大器增益
SPI_RW_REG(WRITE + RX_PW_P0, 31); //数据长度
SPI_RW_REG(WRITE + CONFIG, EN_CRC + CRCO + PWR_UP+ PRIM_RX);
CE_H;
}
下面是代码
代码ourdev_600211J5FV6X.rar(文件大小:37K) (原文件名:NRF24l01A.rar) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|