完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大神快来回答、
|
|
|
|
[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);}}} 运行结果:但是在另外一块战舰的板子上接收不到数据。 |
|
|
|
如果使用自动应答的话,程序一直在检测IRQ的引脚这里死等。。。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(NRF24L01_TxPacket(buff) == TX_OK) ;什么意思,特别是TX_ok
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2544 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2331 浏览 5 评论
3158 浏览 3 评论
2802 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2761 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
608浏览 1评论
853浏览 0评论
967浏览 0评论
620浏览 0评论
447浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 17:49 , Processed in 1.142388 second(s), Total 96, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号