[C] 纯文本查看 复制代码
工作模式设置函数:
[C] 纯文本查看 复制代码
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通道为40NRF24L01_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); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断NRF24L01_CE_Set;//CE为高,10us后启动发送delay_us(20);}
[C] 纯文本查看 复制代码
发送函数:
[C] 纯文本查看 复制代码
//启动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); //使能SPI1NRF24L01_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;//其他原因发送失败}
[C] 纯文本查看 复制代码
主函数:
[C] 纯文本查看 复制代码
int main(void){ RCC_Configuration(); //用外部的晶振 来产生时钟Usart_Configuration(); Systick_configuration();NRF24L01_Init();delay_ms(100);printf(" Hello..rn"); printf("SPI Test--NRF24L01 Test...rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);while(NRF24L01_Check()){printf("NRF24L01 Check Failed!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);}printf("NRF24L01 Check Success!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);while(1){NRF24L01_TX_Mode();if(NRF24L01_TxPacket(buff) == TX_OK){printf("NRF24L01 Send Success!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(100);}else{printf("NRF24L01 Send Failed!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);}}}
运行结果:但是在另外一块战舰的板子上接收不到数据。
[C] 纯文本查看 复制代码
工作模式设置函数:
[C] 纯文本查看 复制代码
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通道为40NRF24L01_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); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断NRF24L01_CE_Set;//CE为高,10us后启动发送delay_us(20);}
[C] 纯文本查看 复制代码
发送函数:
[C] 纯文本查看 复制代码
//启动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); //使能SPI1NRF24L01_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;//其他原因发送失败}
[C] 纯文本查看 复制代码
主函数:
[C] 纯文本查看 复制代码
int main(void){ RCC_Configuration(); //用外部的晶振 来产生时钟Usart_Configuration(); Systick_configuration();NRF24L01_Init();delay_ms(100);printf(" Hello..rn"); printf("SPI Test--NRF24L01 Test...rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);while(NRF24L01_Check()){printf("NRF24L01 Check Failed!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);}printf("NRF24L01 Check Success!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);while(1){NRF24L01_TX_Mode();if(NRF24L01_TxPacket(buff) == TX_OK){printf("NRF24L01 Send Success!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(100);}else{printf("NRF24L01 Send Failed!rn");printf("两个嘴巴笑rn");printf("2014-07-13rnrn");delay_ms(1000);}}}
运行结果:但是在另外一块战舰的板子上接收不到数据。
举报