初级会员
- 积分
- 96
- 金钱
- 96
- 注册时间
- 2012-11-30
- 在线时间
- 1 小时
|
楼主 |
发表于 2014-7-13 17:12:14
|
显示全部楼层
<div style="background-color:#E8E8E8;">
[mw_shl_code=c,true]工作模式设置函数:[/mw_shl_code]
[mw_shl_code=c,true]void NRF24L01_TX_Mode(void)
{
NRF24L01_CE_Reset;
NRF24L01_Write_Buf(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_TX_ADDR ,(unsigned char*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址
NRF24L01_Write_Buf(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_RX_ADDR_P0 ,(unsigned char*)RX_ADDRESS,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK
NRF24L01_Write_Register(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_EEAA ,0x00); //使能通道0的自动应答
NRF24L01_Write_Register(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_EN_RXADDR ,0x01); //使能通道0的接收地址
NRF24L01_Write_Register(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_SETUP_RETR ,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
NRF24L01_Write_Register(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_RF_CH ,40); //设置RF通道为40
NRF24L01_Write_Register(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_RF_SETUP ,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_Write_Register(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_CONFIG ,0x0e); //配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
NRF24L01_CE_Set;//CE为高,10us后启动发送
delay_us(20);
}[/mw_shl_code]
</div>
<br />
<br />
<br />
<div style="background-color:#E8E8E8;">
[mw_shl_code=c,true]发送函数:[/mw_shl_code]
[mw_shl_code=c,true]//启动NRF24L01发送一次数据
//txbuf:待发送数据首地址
//返回值:发送完成状况
unsigned char NRF24L01_TxPacket(unsigned char *txbuf)
{
unsigned char sta;
// SPI_InitTypeDef SPI_InitStructure;
//
// //设置SPI1的速率
// SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
// SPI_Init(SPI1,&SPI_InitStructure);
// SPI_Cmd(SPI1,ENABLE); //使能SPI1
NRF24L01_CE_Reset;
NRF24L01_Write_Buf(NRF24L01_Command_WRITE_RX_PAYLOAD ,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF 32个字节
NRF24L01_CE_Set;//启动发送
while(NRF24L01_IRQ != 0);//等待发送完成
// while(CheckACK());
sta = NRF24L01_Read_Register( NRF24L01_Register_STATUS ); //读取状态寄存器的值
// USART_SendData(USART1,sta);
NRF24L01_Write_Register(NRF24L01_Command_WRITE_RESISTER + NRF24L01_Register_STATUS,sta); //清除TX_DS或MAX_RT中断标志
if(sta & MAX_TX)//达到最大重发次数
{
NRF24L01_Write_Register(NRF24L01_Command_FLUSH_TX,0xff);//清除TX FIFO寄存器
return MAX_TX;
}
if(sta & TX_OK)//发送完成
{
return TX_OK;
}
return 0xff;//其他原因发送失败
}
[/mw_shl_code]
</div>
<br />
<div style="background-color:#E8E8E8;">
[mw_shl_code=c,true]主函数:[/mw_shl_code]
[mw_shl_code=c,true]int main(void)
{
RCC_Configuration(); //用外部的晶振 来产生时钟
Usart_Configuration();
Systick_configuration();
NRF24L01_Init();
delay_ms(100);
printf(" Hello..\r\n");
printf("SPI Test--NRF24L01 Test...\r\n");
printf("两个嘴巴笑\r\n");
printf("2014-07-13\r\n\r\n");
delay_ms(1000);
while(NRF24L01_Check())
{
printf("NRF24L01 Check Failed!\r\n");
printf("两个嘴巴笑\r\n");
printf("2014-07-13\r\n\r\n");
delay_ms(1000);
}
printf("NRF24L01 Check Success!\r\n");
printf("两个嘴巴笑\r\n");
printf("2014-07-13\r\n\r\n");
delay_ms(1000);
while(1)
{
NRF24L01_TX_Mode();
if(NRF24L01_TxPacket(buff) == TX_OK)
{
printf("NRF24L01 Send Success!\r\n");
printf("两个嘴巴笑\r\n");
printf("2014-07-13\r\n\r\n");
delay_ms(100);
}
else
{
printf("NRF24L01 Send Failed!\r\n");
printf("两个嘴巴笑\r\n");
printf("2014-07-13\r\n\r\n");
delay_ms(1000);
}
}
}
[/mw_shl_code]
</div>
<br />
运行结果:但是在另外一块战舰的板子上接收不到数据。<br />
<br />
<br /> |
|