先调24L01发射部分就不成功....SPI读写寄存器没问题,
Config(地址0x00)寄存器我给的0x0e,说明三种中断任何一种都会触发IRQ是吧
EN_AA(地址0x01)寄存器我给的0x00,也就是所有通道只要发成功,没有ACK也触发发送完成中断,STATUS寄存器的TX_DS位是吧,但是我不停发得到返回的STATUS寄存器是“0x0e 0x0e 0x0f 0x0f 0x0f...后面就是0f了”,CE拉高10uS后,发送完成位没有变1,IRQ用示波器看也没有....百度谷歌都搜遍了....希望CSDN的大神能出没下,哪怕这是该怀疑哪,怎么去试.....
void nRF24L01_TxPacket( uchar * tx_buf)
{
uchar sta=0;
uchar flag=0;
Low_24L01_CE; //StandBy I模式
Hign_24L01_CSN;
Low_24L01_SCK;
delay_nms(100);
SPI_RW_Reg(WRITE_REG+STATUS,0xff); //STATUS复位
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); //使能P0通道自动应答 此功能禁止后可与24l01通讯
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00); //接收地址允许 P0通道接收允许
// SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1f); //500+86us自动重发15次(文档有问题...)
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00); //不自动重发 重发间隔 0us
SPI_RW_Reg(WRITE_REG + RF_CH, 0x00); // 射频通道(工作频率)
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为5字节
// SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // 发射功率0dB???
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0e); // 发射功率0dB???
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
delay_nms(20);
Hign_24L01_CE; //置高CE,激发数据发送
_delay_us(200);
Low_24L01_CE;
sta1=SPI_Read(STATUS); // 返回状态寄存器
USART_Transmit(sta1); //操作结果
}
------解决方案--------------------------------------------------------
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00); //接收地址允许 P0通道接收允许
=======================================================================
这一句,Pipe0-5有低6位控制,enable pipe0是0x01
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // 发射功率0dB
=======================================================================
这个就可以了,不用0x0e
SPI_RW_Reg(WRITE_REG + RF_CH, 0x00); // 射频通道(工作频率)
=======================================================================
这个频率两端要设置一致
Hign_24L01_CE; //置高CE,激发数据发送