新手上路
- 积分
- 35
- 金钱
- 35
- 注册时间
- 2014-6-19
- 在线时间
- 0 小时
|
楼主 |
发表于 2014-7-4 19:32:45
|
显示全部楼层
<div style="background-color:#E8E8E8;">
[mw_shl_code=c,true]u8 NRF24L01_TxPacket(u8 *txbuf)
{
u8 sta;
SPI1_SetSpeed(SPI_BaudRatePrescaler_8);//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)
Clr_NRF24L01_CE;
NRF24L01_Write_Buf(NRF24L01_WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF 32个字节
Set_NRF24L01_CE;//启动发送
while(NRF24L01_IRQ!=0);//等待发送完成
sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值
NRF24L01_Write_Reg(NRF24L01_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志
if(sta&MAX_TX)//达到最大重发次数
{
NRF24L01_Write_Reg(NRF24L01_FLUSH_TX,0xff);//清除TX FIFO寄存器
return MAX_TX;
}
if(sta&TX_OK)//发送完成
{
return TX_OK;
}
return 0xff;//其他原因发送失败
}[/mw_shl_code]
</div>
<p style="text-indent:2em;">
自检是能通过的,随便对换两个管脚后就通不过了,也就说明自检程序是有效的,管脚没有插错<br />
在 Set_NRF24L01_CE; 这一行执行后IRQ确实从高电平变成了低电平<br />
这个是说明由串口发送到直接相连的24l01成功还是发送到另外一块24l01成功???<br />
现在我就是pc上的24l01接收不到任何数据,不知道是不是哪里没有配置正确<br />
收发地址都是一模一样的,这是pc无线串口的配置:波特率9600,通信频率2.400G,16位CRC校验,空中速率2Mbps<br />
</p>
<div style="background-color:#E8E8E8;">
[mw_shl_code=c,true]void TX_Mode(void)
{
Clr_NRF24L01_CE;
NRF24L01_Write_Buf(NRF24L01_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址
NRF24L01_Write_Buf(NRF24L01_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK
NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_AA,0x00); //使能通道0的自动应答
NRF24L01_Write_Reg(NRF24L01_WRITE_REG+EN_RXADDR,0x00); //使能通道0的接收地址
NRF24L01_Write_Reg(NRF24L01_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_CH,0); //设置RF通道为0
NRF24L01_Write_Reg(NRF24L01_WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_Write_Reg(NRF24L01_WRITE_REG+CONFIG,0x0e); //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
if(NRF24L01_IRQ==0)NRF24L01_Write_Reg(NRF24L01_WRITE_REG+STATUS,0x70);
Set_NRF24L01_CE;//CE为高,10us后启动发送
}[/mw_shl_code]
</div>
<br />
这里的PWR_UP连接哪个管脚,需要和24l01相连么??我直接用3.3v供电的<br />
我这里还有什么地方配置不正确的么???
<p>
<br />
</p> |
|