|
大佬這是其他代碼
- #include "stm32f4xx.h"
- #include "nrf24l01.h"
- #include "sys.h"
- #include <stdio.h>
- const char *g_ErrorString = "RF24L01 is not find !...";
- /**
- * @brief :NRF24L01讀寄存器
- * @param :
- @Addr:寄存器地址
- * @note :地址在設(shè)備中有效
- * @retval:讀取的數(shù)據(jù)
- */
- uint8_t NRF24L01_Read_Reg( uint8_t RegAddr )
- {
- uint8_t btmp;
-
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( NRF_READ_REG | RegAddr ); //讀命令 地址
- btmp = drv_spi_read_write_byte( 0xFF ); //讀數(shù)據(jù)
-
- RF24L01_SET_CS_HIGH( ); //取消片選
-
- return btmp;
- }
- /**
- * @brief :NRF24L01讀指定長度的數(shù)據(jù)
- * @param :
- * @reg:地址
- * @pBuf:數(shù)據(jù)存放地址
- * @len:數(shù)據(jù)長度
- * @note :數(shù)據(jù)長度不超過255,地址在設(shè)備中有效
- * @retval:讀取狀態(tài)
- */
- void NRF24L01_Read_Buf( uint8_t RegAddr, uint8_t *pBuf, uint8_t len )
- {
- uint8_t btmp;
-
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( NRF_READ_REG | RegAddr ); //讀命令 地址
- for( btmp = 0; btmp < len; btmp ++ )
- {
- *( pBuf + btmp ) = drv_spi_read_write_byte( 0xFF ); //讀數(shù)據(jù)
- }
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :NRF24L01寫寄存器
- * @param :無
- * @note :地址在設(shè)備中有效
- * @retval:讀寫狀態(tài)
- */
- void NRF24L01_Write_Reg( uint8_t RegAddr, uint8_t Value )
- {
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( NRF_WRITE_REG | RegAddr ); //寫命令 地址
- drv_spi_read_write_byte( Value ); //寫數(shù)據(jù)
-
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :NRF24L01寫指定長度的數(shù)據(jù)
- * @param :
- * @reg:地址
- * @pBuf:寫入的數(shù)據(jù)地址
- * @len:數(shù)據(jù)長度
- * @note :數(shù)據(jù)長度不超過255,地址在設(shè)備中有效
- * @retval:寫狀態(tài)
- */
- void NRF24L01_Write_Buf( uint8_t RegAddr, uint8_t *pBuf, uint8_t len )
- {
- uint8_t i;
-
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( NRF_WRITE_REG | RegAddr ); //寫命令 地址
- for( i = 0; i < len; i ++ )
- {
- drv_spi_read_write_byte( *( pBuf + i ) ); //寫數(shù)據(jù)
- }
-
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :清空TX緩沖區(qū)
- * @param :無
- * @note :無
- * @retval:無
- */
- void NRF24L01_Flush_Tx_Fifo ( void )
- {
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( FLUSH_TX ); //清TX FIFO命令
-
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :清空RX緩沖區(qū)
- * @param :無
- * @note :無
- * @retval:無
- */
- void NRF24L01_Flush_Rx_Fifo( void )
- {
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( FLUSH_RX ); //清RX FIFO命令
-
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :重新使用上一包數(shù)據(jù)
- * @param :無
- * @note :無
- * @retval:無
- */
- void NRF24L01_Reuse_Tx_Payload( void )
- {
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( REUSE_TX_PL ); //重新使用上一包命令
-
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :NRF24L01空操作
- * @param :無
- * @note :無
- * @retval:無
- */
- void NRF24L01_Nop( void )
- {
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( NOP ); //空操作命令
-
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :NRF24L01讀狀態(tài)寄存器
- * @param :無
- * @note :無
- * @retval:RF24L01狀態(tài)
- */
- uint8_t NRF24L01_Read_Status_Register( void )
- {
- uint8_t Status;
-
- RF24L01_SET_CS_LOW( ); //片選
-
- Status = drv_spi_read_write_byte( NRF_READ_REG + STATUS ); //讀狀態(tài)寄存器
-
- RF24L01_SET_CS_HIGH( ); //取消片選
-
- return Status;
- }
- /**
- * @brief :NRF24L01清中斷
- * @param :
- @IRQ_Source:中斷源
- * @note :無
- * @retval:清除后狀態(tài)寄存器的值
- */
- uint8_t NRF24L01_Clear_IRQ_Flag( uint8_t IRQ_Source )
- {
- uint8_t btmp = 0;
- IRQ_Source &= ( 1 << RX_DR ) | ( 1 << TX_DS ) | ( 1 << MAX_RT ); //中斷標(biāo)志處理
- btmp = NRF24L01_Read_Status_Register( ); //讀狀態(tài)寄存器
-
- RF24L01_SET_CS_LOW( ); //片選
- drv_spi_read_write_byte( NRF_WRITE_REG + STATUS ); //寫狀態(tài)寄存器命令
- drv_spi_read_write_byte( IRQ_Source | btmp ); //清相應(yīng)中斷標(biāo)志
- RF24L01_SET_CS_HIGH( ); //取消片選
-
- return ( NRF24L01_Read_Status_Register( )); //返回狀態(tài)寄存器狀態(tài)
- }
- /**
- * @brief :讀RF24L01中斷狀態(tài)
- * @param :無
- * @note :無
- * @retval:中斷狀態(tài)
- */
- uint8_t RF24L01_Read_IRQ_Status( void )
- {
- return ( NRF24L01_Read_Status_Register( ) & (( 1 << RX_DR ) | ( 1 << TX_DS ) | ( 1 << MAX_RT ))); //返回中斷狀態(tài)
- }
-
- /**
- * @brief :讀FIFO中數(shù)據(jù)寬度
- * @param :無
- * @note :無
- * @retval:數(shù)據(jù)寬度
- */
- uint8_t NRF24L01_Read_Top_Fifo_Width( void )
- {
- uint8_t btmp;
-
- RF24L01_SET_CS_LOW( ); //片選
-
- drv_spi_read_write_byte( R_RX_PL_WID ); //讀FIFO中數(shù)據(jù)寬度命令
- btmp = drv_spi_read_write_byte( 0xFF ); //讀數(shù)據(jù)
-
- RF24L01_SET_CS_HIGH( ); //取消片選
-
- return btmp;
- }
- /**
- * @brief :讀接收到的數(shù)據(jù)
- * @param :無
- * @note :無
- * @retval:
- @pRxBuf:數(shù)據(jù)存放地址首地址
- */
- uint8_t NRF24L01_Read_Rx_Payload( uint8_t *pRxBuf )
- {
- uint8_t Width, PipeNum;
-
- PipeNum = ( NRF24L01_Read_Reg( STATUS ) >> 1 ) & 0x07; //讀接收狀態(tài)
- Width = NRF24L01_Read_Top_Fifo_Width( ); //讀接收數(shù)據(jù)個數(shù)
- RF24L01_SET_CS_LOW( ); //片選
- drv_spi_read_write_byte( RD_RX_PLOAD ); //讀有效數(shù)據(jù)命令
-
- for( PipeNum = 0; PipeNum < Width; PipeNum ++ )
- {
- *( pRxBuf + PipeNum ) = drv_spi_read_write_byte( 0xFF ); //讀數(shù)據(jù)
- }
- RF24L01_SET_CS_HIGH( ); //取消片選
- NRF24L01_Flush_Rx_Fifo( ); //清空RX FIFO
-
- return Width;
- }
- /**
- * @brief :發(fā)送數(shù)據(jù)(帶應(yīng)答)
- * @param :
- * @pTxBuf:發(fā)送數(shù)據(jù)地址
- * @len:長度
- * @note :一次不超過32個字節(jié)
- * @retval:無
- */
- void NRF24L01_Write_Tx_Payload_Ack( uint8_t *pTxBuf, uint8_t len )
- {
- uint8_t btmp;
- uint8_t length = ( len > 32 ) ? 32 : len; //數(shù)據(jù)長達(dá)大約32 則只發(fā)送32個
- NRF24L01_Flush_Tx_Fifo( ); //清TX FIFO
-
- RF24L01_SET_CS_LOW( ); //片選
- drv_spi_read_write_byte( WR_TX_PLOAD ); //發(fā)送命令
-
- for( btmp = 0; btmp < length; btmp ++ )
- {
- drv_spi_read_write_byte( *( pTxBuf + btmp ) ); //發(fā)送數(shù)據(jù)
- }
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :發(fā)送數(shù)據(jù)(不帶應(yīng)答)
- * @param :
- * @pTxBuf:發(fā)送數(shù)據(jù)地址
- * @len:長度
- * @note :一次不超過32個字節(jié)
- * @retval:無
- */
- void NRF24L01_Write_Tx_Payload_NoAck( uint8_t *pTxBuf, uint8_t len )
- {
- if( len > 32 || len == 0 )
- {
- return ; //數(shù)據(jù)長度大于32 或者等于0 不執(zhí)行
- }
-
- RF24L01_SET_CS_LOW( ); //片選
- drv_spi_read_write_byte( WR_TX_PLOAD_NACK ); //發(fā)送命令
- while( len-- )
- {
- drv_spi_read_write_byte( *pTxBuf ); //發(fā)送數(shù)據(jù)
- pTxBuf++;
- }
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :在接收模式下向TX FIFO寫數(shù)據(jù)(帶ACK)
- * @param :
- * @pData:數(shù)據(jù)地址
- * @len:長度
- * @note :一次不超過32個字節(jié)
- * @retval:無
- */
- void NRF24L01_Write_Tx_Payload_InAck( uint8_t *pData, uint8_t len )
- {
- uint8_t btmp;
-
- len = ( len > 32 ) ? 32 : len; //數(shù)據(jù)長度大于32個則只寫32個字節(jié)
- RF24L01_SET_CS_LOW( ); //片選
- drv_spi_read_write_byte( W_ACK_PLOAD ); //命令
- for( btmp = 0; btmp < len; btmp ++ )
- {
- drv_spi_read_write_byte( *( pData + btmp ) ); //寫數(shù)據(jù)
- }
- RF24L01_SET_CS_HIGH( ); //取消片選
- }
- /**
- * @brief :設(shè)置發(fā)送地址
- * @param :
- * @pAddr:地址存放地址
- * @len:長度
- * @note :無
- * @retval:無
- */
- void NRF24L01_Set_TxAddr( uint8_t *pAddr, uint8_t len )
- {
- len = ( len > 5 ) ? 5 : len; //地址不能大于5個字節(jié)
- NRF24L01_Write_Buf( TX_ADDR, pAddr, len ); //寫地址
- }
- /**
- * @brief :設(shè)置接收通道地址
- * @param :
- * @PipeNum:通道
- * @pAddr:地址存肥著地址
- * @Len:長度
- * @note :通道不大于5 地址長度不大于5個字節(jié)
- * @retval:無
- */
- void NRF24L01_Set_RxAddr( uint8_t PipeNum, uint8_t *pAddr, uint8_t Len )
- {
- Len = ( Len > 5 ) ? 5 : Len;
- PipeNum = ( PipeNum > 5 ) ? 5 : PipeNum; //通道不大于5 地址長度不大于5個字節(jié)
- NRF24L01_Write_Buf( RX_ADDR_P0 + PipeNum, pAddr, Len ); //寫入地址
- }
- /**
- * @brief :設(shè)置通信速度
- * @param :
- * @Speed:速度
- * @note :無
- * @retval:無
- */
- void NRF24L01_Set_Speed( nRf24l01SpeedType Speed )
- {
- uint8_t btmp = 0;
-
- btmp = NRF24L01_Read_Reg( RF_SETUP );
- btmp &= ~( ( 1<<5 ) | ( 1<<3 ) );
-
- if( Speed == SPEED_250K ) //250K
- {
- btmp |= ( 1<<5 );
- }
- else if( Speed == SPEED_1M ) //1M
- {
- btmp &= ~( ( 1<<5 ) | ( 1<<3 ) );
- }
- else if( Speed == SPEED_2M ) //2M
- {
- btmp |= ( 1<<3 );
- }
- NRF24L01_Write_Reg( RF_SETUP, btmp );
- }
- /**
- * @brief :設(shè)置功率
- * @param :
- * @Speed:速度
- * @note :無
- * @retval:無
- */
- void NRF24L01_Set_Power( nRf24l01PowerType Power )
- {
- uint8_t btmp;
-
- btmp = NRF24L01_Read_Reg( RF_SETUP ) & ~0x07;
- switch( Power )
- {
- case POWER_F18DBM:
- btmp |= PWR_18DB;
- break;
- case POWER_F12DBM:
- btmp |= PWR_12DB;
- break;
- case POWER_F6DBM:
- btmp |= PWR_6DB;
- break;
- case POWER_0DBM:
- btmp |= PWR_0DB;
- break;
- default:
- break;
- }
- NRF24L01_Write_Reg( RF_SETUP, btmp );
- }
- /**
- * @brief :設(shè)置頻率
- * @param :
- * @FreqPoint:頻率設(shè)置參數(shù)
- * @note :值不大于127
- * @retval:無
- */
- void RF24LL01_Write_Hopping_Point( uint8_t FreqPoint )
- {
- NRF24L01_Write_Reg( RF_CH, FreqPoint & 0x7F );
- }
- /**
- * @brief :NRF24L01單次檢測
- * @param printf_sw 串口是否打印連接失敗 1:是 0:否
- * @note :循環(huán)
- * @retval:0:連接成功 1:連接失敗
- */
- uint8_t NRF24L01_check( uint8_t printf_sw )
- {
- uint8_t i;
- uint8_t buf[5]={ 0XA5, 0XA5, 0XA5, 0XA5, 0XA5 };
- uint8_t read_buf[ 5 ] = { 0 };
- NRF24L01_Write_Buf( TX_ADDR, buf, 5 ); //寫入5個字節(jié)的地址
- NRF24L01_Read_Buf( TX_ADDR, read_buf, 5 ); //讀出寫入的地址
- for( i = 0; i < 5; i++ )
- {
- if( buf[ i ] != read_buf[ i ] )
- {
- break;
- }
- }
- if( 5 == i )
- {
- return 0;
- }
- else
- {
- if(printf_sw)
- {
- // printf("RF24L01 is not find !...");
- printf(g_ErrorString);
- }
- //===============================
- // delay_ms(1500);//連接失敗延遲1.5s
- //OLED_ShowString(0,3,(uint8_t *)g_ErrorString,8);
- // printf("end\r\n");
- return 1;
- }
- }
- // /**
- // * @brief :NRF24L01循環(huán)檢測
- // * @param :無
- // * @note :無限循環(huán)版
- // * @retval:無
- // */
- // uint8_t NRF24L01_while_check( void )
- // {
- // uint8_t i;
- // uint8_t buf[5]={ 0XA5, 0XA5, 0XA5, 0XA5, 0XA5 };
- // uint8_t read_buf[ 5 ] = { 0 };
-
- // while( 1 )
- // {
- // NRF24L01_Write_Buf( TX_ADDR, buf, 5 ); //寫入5個字節(jié)的地址
- // NRF24L01_Read_Buf( TX_ADDR, read_buf, 5 ); //讀出寫入的地址
- // for( i = 0; i < 5; i++ )
- // {
- // if( buf[ i ] != read_buf[ i ] )
- // {
- // break;
- // }
- // }
-
- // if( 5 == i )
- // {
- // break;
- // }
- // else
- // {
- // printf(g_ErrorString);//===============================
- // // OLED_ShowString(0,3,(uint8_t *)g_ErrorString,8);
- // }
- // delay_ms(1500);
- // }
- // }
- /**
- * @brief :設(shè)置模式
- * @param :
- * @Mode:模式發(fā)送模式或接收模式
- * @note :無
- * @retval:無
- */
- void RF24L01_Set_Mode( nRf24l01ModeType Mode )
- {
- uint8_t controlreg = 0;
- controlreg = NRF24L01_Read_Reg( CONFIG );
-
- if( Mode == MODE_TX )
- {
- controlreg &= ~( 1<< PRIM_RX );
- }
- else
- {
- if( Mode == MODE_RX )
- {
- controlreg |= ( 1<< PRIM_RX );
- }
- }
- NRF24L01_Write_Reg( CONFIG, controlreg );
- }
- /**
- * @brief :NRF24L01發(fā)送一次數(shù)據(jù)
- * @param :
- * @txbuf:待發(fā)送數(shù)據(jù)首地址
- * @Length:發(fā)送數(shù)據(jù)長度
- * @note :無
- * @retval:
- * MAX_TX:達(dá)到最大重發(fā)次數(shù)
- * TX_OK:發(fā)送完成
- * 0xFF:其他原因
- */
- uint8_t NRF24L01_TxPacket( uint8_t *txbuf, uint8_t Length )
- {
- uint8_t l_Status = 0;
- uint16_t l_MsTimes = 0;
-
- RF24L01_SET_CS_LOW( ); //片選
- drv_spi_read_write_byte( FLUSH_TX );
- RF24L01_SET_CS_HIGH( );
-
- RF24L01_SET_CE_LOW( );
- NRF24L01_Write_Buf( WR_TX_PLOAD, txbuf, Length ); //寫數(shù)據(jù)到TX BUF 32字節(jié) TX_PLOAD_WIDTH
- RF24L01_SET_CE_HIGH( ); //啟動發(fā)送
- while( 0 != RF24L01_GET_IRQ_STATUS( ))
- {
- delay_ms( 1 );
- if( 500 == l_MsTimes++ ) //500ms還沒有發(fā)送成功,重新初始化設(shè)備
- {
- NRF24L01_Gpio_Init( );
- RF24L01_Init( );
- RF24L01_Set_Mode( MODE_TX );
- break;
- }
- }
- l_Status = NRF24L01_Read_Reg(STATUS); //讀狀態(tài)寄存器
- NRF24L01_Write_Reg( STATUS, l_Status ); //清除TX_DS或MAX_RT中斷標(biāo)志
-
- if( l_Status & MAX_TX ) //達(dá)到最大重發(fā)次數(shù)
- {
- NRF24L01_Write_Reg( FLUSH_TX,0xff ); //清除TX FIFO寄存器
- return MAX_TX;
- }
- if( l_Status & TX_OK ) //發(fā)送完成
- {
- return TX_OK;
- }
-
- return 0xFF; //其他原因發(fā)送失敗
- }
- /**
- * @brief :NRF24L01接收數(shù)據(jù)
- * @param :
- * @rxbuf:接收數(shù)據(jù)存放地址
- * @note :無
- * @retval:接收的數(shù)據(jù)個數(shù)
- */
- uint8_t NRF24L01_RxPacket( uint8_t *rxbuf )
- {
- uint8_t l_Status = 0, l_RxLength = 0;
-
- RF24L01_SET_CS_LOW( ); //片選
- drv_spi_read_write_byte( FLUSH_RX );
- RF24L01_SET_CS_HIGH( );
-
- //無用
- // while( 0 != RF24L01_GET_IRQ_STATUS( ))
- // {
- // delay_ms( 100 );
-
- // if( 30 == l_100MsTimes++ ) //3s沒接收過數(shù)據(jù),重新初始化模塊
- // {
- // NRF24L01_Gpio_Init( );
- // RF24L01_Init( );
- // RF24L01_Set_Mode( MODE_RX );
- // printf("init\r\n");
- // break;
- // }
- // }
-
- l_Status = NRF24L01_Read_Reg( STATUS ); //讀狀態(tài)寄存器
- NRF24L01_Write_Reg( STATUS,l_Status ); //清中斷標(biāo)志
- if( l_Status & RX_OK) //接收到數(shù)據(jù)
- {
- l_RxLength = NRF24L01_Read_Reg( R_RX_PL_WID ); //讀取接收到的數(shù)據(jù)個數(shù)
- NRF24L01_Read_Buf( RD_RX_PLOAD,rxbuf,l_RxLength ); //接收到數(shù)據(jù)
- NRF24L01_Write_Reg( FLUSH_RX,0xff ); //清除RX FIFO
- return l_RxLength;
- }
-
- return 0; //沒有收到數(shù)據(jù)
- }
- /**
- * @brief :RF24L01引腳初始化
- * @param :無
- * @note :無
- * @retval:無
- */
-
- void NRF24L01_Gpio_Init( void )
- {
- GPIO_InitTypeDef RF24L01_GpioInitStructer;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- RCC_APB2PeriphClockCmd( RF24L01_CE_GPIO_CLK | RF24L01_IRQ_GPIO_CLK, ENABLE ); //?? CE IRQ???? CS SCK MISO MOSI?SPI?????
- //使能(打開)系統(tǒng)配置時鐘
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
-
- //??CE?? ????
- RF24L01_GpioInitStructer.GPIO_Mode = GPIO_Mode_OUT;
- RF24L01_GpioInitStructer.GPIO_Speed = GPIO_Speed_100MHz;
- RF24L01_GpioInitStructer.GPIO_Pin = RF24L01_CE_GPIO_PIN;
- GPIO_Init( RF24L01_CE_GPIO_PORT, &RF24L01_GpioInitStructer );
- //??
- GPIO_SetBits( RF24L01_CE_GPIO_PORT, RF24L01_CE_GPIO_PIN);
-
- //??IRQ?? ????
- RF24L01_GpioInitStructer.GPIO_Mode = GPIO_Mode_IN;
- RF24L01_GpioInitStructer.GPIO_Speed = GPIO_Speed_100MHz;
- RF24L01_GpioInitStructer.GPIO_Pin = RF24L01_IRQ_GPIO_PIN;
- GPIO_Init( RF24L01_IRQ_GPIO_PORT, &RF24L01_GpioInitStructer );
- //將Pb8和EXTI8連接在一起
- SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB,EXTI_PinSource8);
- EXTI_InitStructure.EXTI_Line = EXTI_Line8;//外部中斷4
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//設(shè)置為中斷
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿觸發(fā) 識別按鍵按下
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;//打開(使能)
- EXTI_Init(&EXTI_InitStructure);
- //優(yōu)先級配置
- NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //外部中斷4的請求通道
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶占優(yōu)先級0x02
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //響應(yīng)優(yōu)先級0x02
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能(打開)該通道
- NVIC_Init(&NVIC_InitStructure);
- //??
- GPIO_SetBits( RF24L01_IRQ_GPIO_PORT, RF24L01_IRQ_GPIO_PIN);
-
- RF24L01_SET_CE_LOW( ); //??24L01
- RF24L01_SET_CS_HIGH( ); //??SPI??
- }
- /**
- * @brief :RF24L01模塊初始化
- * @param :無
- * @note :無
- * @retval:無
- */
- void RF24L01_Init( void )
- {
- uint8_t addr[5] = {INIT_ADDR};
- RF24L01_SET_CE_HIGH( );
- NRF24L01_Clear_IRQ_Flag( IRQ_ALL );
- NRF24L01_Flush_Rx_Fifo();//清除接收緩沖區(qū)(復(fù)位時避免程序跑偏接收不到數(shù)據(jù))
- NRF24L01_Flush_Tx_Fifo();
- #if DYNAMIC_PACKET == 1
- NRF24L01_Write_Reg( DYNPD, ( 1 << 0 ) ); //使能通道1動態(tài)數(shù)據(jù)長度
- NRF24L01_Write_Reg( FEATRUE, 0x07 );
- NRF24L01_Read_Reg( DYNPD );
- NRF24L01_Read_Reg( FEATRUE );
-
- #elif DYNAMIC_PACKET == 0
-
- L01_WriteSingleReg( L01REG_RX_PW_P0, FIXED_PACKET_LEN ); //固定數(shù)據(jù)長度
-
- #endif //DYNAMIC_PACKET
- NRF24L01_Write_Reg( CONFIG, /*( 1<<MASK_RX_DR ) |*/ //接收中斷
- ( 1 << EN_CRC ) | //使能CRC 1個字節(jié)
- ( 1 << PWR_UP ) ); //開啟設(shè)備
- NRF24L01_Write_Reg( EN_AA, ( 1 << ENAA_P0 ) ); //通道0自動應(yīng)答
- NRF24L01_Write_Reg( EN_RXADDR, ( 1 << ERX_P0 ) ); //通道0接收
- NRF24L01_Write_Reg( SETUP_AW, AW_5BYTES ); //地址寬度 5個字節(jié)
- NRF24L01_Write_Reg( SETUP_RETR, ARD_4000US |
- ( REPEAT_CNT & 0x0F ) ); //重復(fù)等待時間 250us
- // NRF24L01_Write_Reg(STATUS,0X70);
- NRF24L01_Write_Reg( RF_CH, 60 ); //初始化通道
- NRF24L01_Write_Reg( RF_SETUP, 0x26 );
- NRF24L01_Set_TxAddr( &addr[0], 5 ); //設(shè)置TX地址
- NRF24L01_Set_RxAddr( 0, &addr[0], 5 ); //設(shè)置RX地址
- }
復(fù)制代碼 |
|