在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CW32模塊使用 NRF24L01無線2.4G模塊

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2025-01-23 13:00 ? 次閱讀

NRF24L01是一款工作在2.4-2.5GHz世界通用ISM頻段的單片收發芯片, 使用4線SPI通訊端口,通訊速率最高可達8Mbps,適合與各種MCU連接,編程簡單;輸出功率、頻道選擇和協議的設置可以通過SPI接口設置極低的電流消耗,當工作在發射模式下發射功率為6dBm時電流消耗為9.0mA接受模式為12.3mA掉電模式和待機模式下電流消耗模式更低。

一、模塊來源

模塊實物展示:

wKgZPGeRzPWADRgnAAAd2Oxu8cY97.webp


資料鏈接:https://pan.baidu.com/s/1CUQ3SOdnmD8xSXMdR4YopA
資料提取碼:1234

二、規格參數

工作電壓:1.9~3.6V

供電電流:900 ~ 12.3mA

最大數據傳輸率:2000 Kbps

控制方式:SPI

管腳數量:8 Pin(2.54mm間距排針

以上信息見廠家資料文件

三、移植過程

我們的目標是將例程移植至CW32F030C8T6開發板上【實現無線的數據傳輸的功能】。首先要獲取資料,查看數據手冊應如何實現讀取數據,再移植至我們的工程。

3.1查看資料

接收方式

NRF24L01的接收端是靠IRQ引腳進行判斷,當IRQ為高電平時,說明接收到了數據,IRQ為1則是正在等待數據。因此可以根據IRQ引腳來決定接收的方式。這里提供輪詢方式和中斷方式。

輪詢方式接收

采用輪詢方式會阻礙其他任務的運行,因接收數據要時時刻刻判斷IRQ引腳是否為高電平,會一直占用MCU的時間。為了解決因為沒有接收到數據就卡死問題以及防止錯過數據沒有接收問題,在等待數據的過程中,加入了超時判斷,當一定的時間內沒有接收到數據,則結束等待接收,去運行其他任務。

中斷方式接收

采用中斷方式接收數據,是通過將IRQ引腳設置為外部中斷功能。當檢測到IRQ引腳有變化時,則接收數據。根據24L01的要求,當接收完數據后,必須清除接收的FIFO。

3.2引腳選擇

引腳說明

wKgZO2eRzPWAUbTyAABFTq2qRow02.webp

硬件SPI與軟件SPI相比,硬件SPI是靠硬件上面的SPI控制器,所有的時鐘邊緣采樣,時鐘發生,還有時序控制,都是由硬件完成的。它降低了CPU的使用率,提高了運行速度。軟件SPI就是用代碼控制IO輸出高低電平,模擬SPI的時序,這種方法通信速度較慢,且不可靠。

想要使用硬件SPI驅動,需要確定使用的引腳是否有SPI外設功能??梢酝ㄟ^用戶手冊146頁進行查看。

當前使用的是硬件SPI接口,而NRF24L01我們需要與它發送數據也需要接收數據,故使用的是4線的SPI,使用到了時鐘線SCK、主機輸出從機輸入線MOSI、主機輸入從機輸出線MISO和軟件控制的片選線NSS。所以除了這些引腳需要使用硬件SPI功能的引腳外,其他引腳都可以使用開發板上其他的GPIO。這里選擇使用PA5/PA6/PA7的SPI復用功能 。其他對應接入的引腳請按照你的需要。這里選擇的引腳見右表。

wKgZPGeRzPaAXRlYAACJEB6CItY77.webp

有SPI功能的引腳

wKgZO2eRzPaAXOMqAABuZiP8Vg880.webp

模塊接線圖

3.3移植至工程

移植步驟中的導入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為drv_spi.c與drv_spi.h。這里不再過多講述,移植完成后面修改相關代碼。

在drv_spi.c中,修改為如下代碼。

/* * Change Logs: * Date Author Notes * 2024-06-21 LCKFB-LP first version */ #include "drv_spi.h" /** 硬件SPI */ #define SPI_WAIT_TIMEOUT ((uint16_t)0xFFFF) /** * @brief :SPI初始化(硬件) * @param :無 * @note :無 * @retval:無 */ void drv_spi_init( void ) { GPIO_InitTypeDef GPIO_InitStruct1; // GPIO初始化結構體 GPIO_InitTypeDef GPIO_InitStruct2; // GPIO初始化結構體 SPI_GPIO_RCC(); // 使能GPIO時鐘 RCC_SPI_HARDWARE_ENABLE(); // 使能SPI1時鐘 // GPIO復用為SPI1 BSP_SPI_AF_SCK(); BSP_SPI_AF_MISO(); BSP_SPI_AF_MOSI(); GPIO_InitStruct1.Pins = SPI_NSS_GPIO_PIN| SPI_CLK_GPIO_PIN| SPI_MOSI_GPIO_PIN; // GPIO引腳 GPIO_InitStruct1.Mode = GPIO_MODE_OUTPUT_PP; // 推挽輸出 GPIO_InitStruct1.Speed = GPIO_SPEED_HIGH; // 輸出速度高 GPIO_Init(SPI_GPIO_PORT, &GPIO_InitStruct1); // 初始化 GPIO_InitStruct2.Pins = SPI_MISO_GPIO_PIN; // GPIO引腳 GPIO_InitStruct2.Mode = GPIO_MODE_INPUT_PULLUP; // 上拉輸入 GPIO_Init(SPI_GPIO_PORT, &GPIO_InitStruct2); // 初始化 spi_set_nss_high(); // 片選拉高 SPI_InitTypeDef SPI_InitStructure; // SPI 初始化結構體 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 雙線全雙工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // 主機模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // 幀數據長度為8bit SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; // 時鐘空閑電平為低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // 第1個邊沿采樣 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // 片選信號由SSI寄存器控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; // 波特率為PCLK的8分頻 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // 最高有效位 MSB 收發在前 SPI_InitStructure.SPI_Speed = SPI_Speed_Low; // 低速SPI SPI_Init(PORT_SPI, &SPI_InitStructure); // 初始化 SPI_Cmd(PORT_SPI, ENABLE); // 使能SPI1 } /** * @brief :SPI收發一個字節 * @param : * @TxByte: 發送的數據字節 * @note :非堵塞式,一旦等待超時,函數會自動退出 * @retval:接收到的字節 */ uint16_t drv_spi_read_write_byte( uint8_t TxByte ) { uint16_t l_Data = 0; uint16_t l_WaitTime = 0; while(RESET == SPI_GetFlagStatus(PORT_SPI, SPI_FLAG_TXE))//等待發送緩沖區為空 { if( SPI_WAIT_TIMEOUT == ++l_WaitTime ) { break; //如果等待超時則退出 } } l_WaitTime = SPI_WAIT_TIMEOUT / 2; //重新設置接收等待時間(因為SPI的速度很快,正常情況下在發送完成之后會立即收到數據,等待時間不需要過長) SPI_SendData(PORT_SPI, TxByte);//發送數據 while(RESET == SPI_GetFlagStatus(PORT_SPI, SPI_FLAG_RXNE))//等待接收緩沖區非空 { if( SPI_WAIT_TIMEOUT == ++l_WaitTime ) { break; //如果等待超時則退出 } } l_Data = SPI_ReceiveData(PORT_SPI);//讀取接收數據 return l_Data; //返回 } /** * @brief :SPI收發字符串 * @param : * @ReadBuffer: 接收數據緩沖區地址 * @WriteBuffer:發送字節緩沖區地址 * @Length:字節長度 * @note :非堵塞式,一旦等待超時,函數會自動退出 * @retval:無 */ void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length ) { spi_set_nss_low( );//拉低片選 while( Length-- ) { *ReadBuffer = drv_spi_read_write_byte( *WriteBuffer ); //收發數據 ReadBuffer++; WriteBuffer++; //讀寫地址加1 } spi_set_nss_high( );//拉高片選 }

在drv_spi.h中,修改為如下代碼。

/* * Change Logs: * Date Author Notes * 2024-06-21 LCKFB-LP first version */ #ifndef __DRV_SPI_H__ #define __DRV_SPI_H__ #include "board.h" //SPI引腳定義 #define SPI_GPIO_RCC() __RCC_GPIOA_CLK_ENABLE() // GPIO時鐘 #define SPI_GPIO_PORT CW_GPIOA #define SPI_CLK_GPIO_PIN GPIO_PIN_5 #define SPI_MISO_GPIO_PIN GPIO_PIN_6 #define SPI_MOSI_GPIO_PIN GPIO_PIN_7 #define SPI_NSS_GPIO_PIN GPIO_PIN_4 #define spi_set_nss_high( ) GPIO_WritePin(SPI_GPIO_PORT, SPI_NSS_GPIO_PIN, GPIO_Pin_SET) //片選置高 #define spi_set_nss_low( ) GPIO_WritePin(SPI_GPIO_PORT, SPI_NSS_GPIO_PIN, GPIO_Pin_RESET) //片選置低 /******** 硬件SPI修改此次 ********/ #define RCC_SPI_HARDWARE_ENABLE() __RCC_SPI1_CLK_ENABLE() #define PORT_SPI CW_SPI1 //GPIO AF #define BSP_SPI_AF_SCK() PA05_AFx_SPI1SCK() #define BSP_SPI_AF_MISO() PA06_AFx_SPI1MISO() #define BSP_SPI_AF_MOSI() PA07_AFx_SPI1MOSI() void drv_spi_init( void ); uint16_t drv_spi_read_write_byte( uint8_t TxByte ); void drv_spi_read_write_string( uint8_t* ReadBuffer, uint8_t* WriteBuffer, uint16_t Length ); #endif

在NRF24L01.c中,修改如下代碼。

/* * Change Logs: * Date Author Notes * 2024-06-21 LCKFB-LP first version */ #include "NRF24L01.h" #include "stdio.h" const char *g_ErrorString = "RF24L01 is not find !..."; void drv_delay_500Ms( unsigned int ms) { while(ms--) { delay_ms(500); } } /** * @brief :NRF24L01讀寄存器 * @param : @Addr:寄存器地址 * @note :地址在設備中有效 * @retval:讀取的數據 */ 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 ); //讀數據 RF24L01_SET_CS_HIGH( ); //取消片選 return btmp; } /** * @brief :NRF24L01讀指定長度的數據 * @param : * @reg:地址 * @pBuf:數據存放地址 * @len:數據長度 * @note :數據長度不超過255,地址在設備中有效 * @retval:讀取狀態 */ 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 ); //讀數據 } RF24L01_SET_CS_HIGH( ); //取消片選 } /** * @brief :NRF24L01寫寄存器 * @param :無 * @note :地址在設備中有效 * @retval:讀寫狀態 */ 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 ); //寫數據 RF24L01_SET_CS_HIGH( ); //取消片選 } /** * @brief :NRF24L01寫指定長度的數據 * @param : * @reg:地址 * @pBuf:寫入的數據地址 * @len:數據長度 * @note :數據長度不超過255,地址在設備中有效 * @retval:寫狀態 */ 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 ) ); //寫數據 } RF24L01_SET_CS_HIGH( ); //取消片選 } /** * @brief :清空TX緩沖區 * @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緩沖區 * @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 :重新使用上一包數據 * @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讀狀態寄存器 * @param :無 * @note :無 * @retval:RF24L01狀態 */ uint8_t NRF24L01_Read_Status_Register( void ) { uint8_t Status; RF24L01_SET_CS_LOW( ); //片選 Status = drv_spi_read_write_byte( NRF_READ_REG + STATUS ); //讀狀態寄存器 RF24L01_SET_CS_HIGH( ); //取消片選 return Status; } /** * @brief :NRF24L01清中斷 * @param : @IRQ_Source:中斷源 * @note :無 * @retval:清除后狀態寄存器的值 */ uint8_t NRF24L01_Clear_IRQ_Flag( uint8_t IRQ_Source ) { uint8_t btmp = 0; IRQ_Source &= ( 1 > 1 ) & 0x07; //讀接收狀態 Width = NRF24L01_Read_Top_Fifo_Width( ); //讀接收數據個數 RF24L01_SET_CS_LOW( ); //片選 drv_spi_read_write_byte( RD_RX_PLOAD ); //讀有效數據命令 for( PipeNum = 0; PipeNum < Width; PipeNum ++ ) { *( pRxBuf + PipeNum ) = drv_spi_read_write_byte( 0xFF ); //讀數據 } RF24L01_SET_CS_HIGH( ); //取消片選 NRF24L01_Flush_Rx_Fifo( ); //清空RX FIFO return Width; } /** * @brief :發送數據(帶應答) * @param : * @pTxBuf:發送數據地址 * @len:長度 * @note :一次不超過32個字節 * @retval:無 */ void NRF24L01_Write_Tx_Payload_Ack( uint8_t *pTxBuf, uint8_t len ) { uint8_t btmp; uint8_t length = ( len > 32 ) ? 32 : len; //數據長達大約32 則只發送32個 NRF24L01_Flush_Tx_Fifo( ); //清TX FIFO RF24L01_SET_CS_LOW( ); //片選 drv_spi_read_write_byte( WR_TX_PLOAD ); //發送命令 for( btmp = 0; btmp < length; btmp ++ ) { drv_spi_read_write_byte( *( pTxBuf + btmp ) ); //發送數據 } RF24L01_SET_CS_HIGH( ); //取消片選 } /** * @brief :發送數據(不帶應答) * @param : * @pTxBuf:發送數據地址 * @len:長度 * @note :一次不超過32個字節 * @retval:無 */ void NRF24L01_Write_Tx_Payload_NoAck( uint8_t *pTxBuf, uint8_t len ) { if( len > 32 || len == 0 ) { return ; //數據長度大于32 或者等于0 不執行 } RF24L01_SET_CS_LOW( ); //片選 drv_spi_read_write_byte( WR_TX_PLOAD_NACK ); //發送命令 while( len-- ) { drv_spi_read_write_byte( *pTxBuf ); //發送數據 pTxBuf++; } RF24L01_SET_CS_HIGH( ); //取消片選 } /** * @brief :在接收模式下向TX FIFO寫數據(帶ACK) * @param : * @pData:數據地址 * @len:長度 * @note :一次不超過32個字節 * @retval:無 */ void NRF24L01_Write_Tx_Payload_InAck( uint8_t *pData, uint8_t len ) { uint8_t btmp; len = ( len > 32 ) ? 32 : len; //數據長度大于32個則只寫32個字節 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 ) ); //寫數據 } RF24L01_SET_CS_HIGH( ); //取消片選 } /** * @brief :設置發送地址 * @param : * @pAddr:地址存放地址 * @len:長度 * @note :無 * @retval:無 */ void NRF24L01_Set_TxAddr( uint8_t *pAddr, uint8_t len ) { len = ( len > 5 ) ? 5 : len; //地址不能大于5個字節 NRF24L01_Write_Buf( TX_ADDR, pAddr, len ); //寫地址 } /** * @brief :設置接收通道地址 * @param : * @PipeNum:通道 * @pAddr:地址存肥著地址 * @Len:長度 * @note :通道不大于5 地址長度不大于5個字節 * @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個字節 NRF24L01_Write_Buf( RX_ADDR_P0 + PipeNum, pAddr, Len ); //寫入地址 } /** * @brief :設置通信速度 * @param : * @Speed:速度 * @note :無 * @retval:無 */ void NRF24L01_Set_Speed( nRf24l01SpeedType Speed ) { uint8_t btmp = 0; btmp = NRF24L01_Read_Reg( RF_SETUP ); btmp &= ~( ( 1= 3 ) { break; } //測試錯誤 printf("NRF24L01 ERROR FILE:NRF24L01.C LINE = %drn",__LINE__); } drv_delay_500Ms( 4 ); } printf("Successful configurationrn"); } /** * @brief :設置模式 * @param : * @Mode:模式發送模式或接收模式 * @note :無 * @retval:無 */ void RF24L01_Set_Mode( nRf24l01ModeType Mode ) { uint8_t controlreg = 0; controlreg = NRF24L01_Read_Reg( CONFIG ); if( Mode == MODE_TX ) { controlreg &= ~( 1ISR_f.BSP_KEY_EXTI_JUDGE) // 中斷標志位為1,按鍵按下 { if(GPIO_ReadPin(RF24L01_GPIO_PORT, RF24L01_IRQ_GPIO_PIN) == GPIO_Pin_RESET) // IRQ為低電平 { NRF24L01_RxPacket(g_RF24L01RxBuffer); //接收數據 // printf("data = %s",g_RF24L01RxBuffer );//輸出數據 RF24L01_SET_CS_LOW( ); //片選 drv_spi_read_write_byte( FLUSH_RX );//清除RX FIFO寄存器 RF24L01_SET_CS_HIGH( ); } else// IRQ為高電平 { } GPIOA_INTFLAG_CLR(BSP_KEY_EXTI_PIN); // 清除標志位 } } /** * @brief :NRF24L01接收數據 * @param : * @rxbuf:接收數據存放地址 * @note :無 * @retval:接收的數據個數 */ uint8_t NRF24L01_RxPacket( uint8_t *rxbuf ) { uint8_t l_Status = 0, l_RxLength = 0; l_Status = NRF24L01_Read_Reg( STATUS ); //讀狀態寄存器 NRF24L01_Write_Reg( STATUS,l_Status ); //清中斷標志 if( l_Status & RX_OK) //接收到數據 { l_RxLength = NRF24L01_Read_Reg( R_RX_PL_WID ); //讀取接收到的數據個數 NRF24L01_Read_Buf( RD_RX_PLOAD,rxbuf,l_RxLength ); //接收到數據 NRF24L01_Write_Reg( FLUSH_RX,0xff ); //清除RX FIFO return l_RxLength; } return 0; //沒有收到數據 } /** * @brief :RF24L01引腳初始化 * @param :無 * @note :無 * @retval:無 */ void NRF24L01_Gpio_Init_transmit( void ) { RF24L01_CE_GPIO_RCC_ENABLE(); // GPIO使能時鐘 //CE推挽輸出 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.Pins = RF24L01_CE_GPIO_PIN; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_Init(RF24L01_GPIO_PORT, &GPIO_InitStructure); // GPIO_InitStructure.Pins = RF24L01_IRQ_GPIO_PIN; // GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP; // GPIO_Init(RF24L01_GPIO_PORT, &GPIO_InitStructure); // // GPIO_WritePin( RF24L01_GPIO_PORT, RF24L01_IRQ_GPIO_PIN,GPIO_Pin_SET); key_gpio_config(); RF24L01_SET_CE_LOW( ); RF24L01_SET_CS_HIGH( ); } /** * @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 ); #if DYNAMIC_PACKET == 1 NRF24L01_Write_Reg( DYNPD, ( 1

四、移植驗證

將發送端代碼燒入開發板,接收端代碼燒入另一個開發板。

main.c代碼如下:

/* * Change Logs: * Date Author Notes * 2024-06-21 LCKFB-LP first version */ #include "board.h" #include "stdio.h" #include "bsp_uart.h" #include "NRF24L01.h" #include "drv_spi.h" #define RECEIVING_MODE 1 // 1:接收模式 0:發送模式 uint8_t g_RF24L01RxBuffer[30]; int32_t main(void) { board_init(); uart1_init(115200); //SPI初始化 drv_spi_init( ); #if RECEIVING_MODE NRF24L01_Gpio_Init_receive( ); //檢測nRF24L01 NRF24L01_check( ); //NRF初始化 RF24L01_Init( ); RF24L01_Set_Mode( MODE_RX );//NRF接收模式 . printf("MODE_RXrn"); while(1) { if( 0 != g_RF24L01RxBuffer[0]) { printf("Data = %srn",g_RF24L01RxBuffer); Buff_Clear(); } } #else NRF24L01_Gpio_Init_transmit( ); //檢測nRF24L01 NRF24L01_check( ); //NRF初始化 RF24L01_Init( ); RF24L01_Set_Mode( MODE_TX );//NRF發送模式 . printf("MODE_TXrn"); while(1) { NRF24L01_TxPacket((uint8_t*)"hello LCKFB!rn",13);//NRF發送數據 printf("Sendrn"); delay_ms(200); } #endif }

上電現象:一個開發板燒錄接收模式的代碼,一個開發板燒錄發送模式的代碼。

wKgZPGeRzPeAR1ymAACbkjFnnyM65.webp

模塊移植成功案例代碼:

鏈接:https://pan.baidu.com/s/1KReODFKFa4vjTN8qfsaNrQ?pwd=LCKF

提取碼:LCKF

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • nRF24L01
    +關注

    關注

    17

    文章

    331

    瀏覽量

    69578
  • 2.4G
    +關注

    關注

    1

    文章

    98

    瀏覽量

    39806
  • CW32
    +關注

    關注

    1

    文章

    218

    瀏覽量

    706
收藏 人收藏

    評論

    相關推薦

    請問NRF24L01模塊能否和我買的這個USB口 2.4G 無線串口 兼容NRF24L01P 進行通信?

    請問原子哥,到網上買的這個 USB口 2.4G 無線串口 兼容NRF24L01P 通訊 2.4G 無線串口能不能和 你的
    發表于 05-14 03:36

    2.4G無線模塊nRF24L01測試版的原理圖分享

    本文介紹2.4G無線模塊nRF24L01 測試板原理圖/PCB/demo程序等,
    發表于 06-15 06:28

    NRF24L01 2.4G無線模塊的引腳是怎樣接線的

    NRF24L01 2.4G無線模塊的引腳是怎樣接線的?NRF24L01 2.4G
    發表于 12-16 06:45

    2.4G NRF24L01模塊的引腳有哪些呢

    NRF24L01是什么?NRF24L01芯片有哪些功能呢?2.4G NRF24L01模塊的引腳有哪些呢?
    發表于 12-17 06:49

    如何去實現NRF24L01模塊2.4G無線通信呢

    2.4G無線通信的原理是什么?如何去實現NRF24L01模塊2.4G無線通信呢?
    發表于 12-17 07:33

    NRF24L01 2.4G無線模塊功能是什么?

    NRF24L01 2.4G無線模塊功能是什么?
    發表于 12-20 06:12

    2.4G無線模塊NRF24L01資料8腳

    2.4G無線模塊NRF24L01資料8腳
    發表于 12-08 16:20 ?49次下載

    NRF24L01無線模塊_2.4G無線通信模塊_24L01+升級

    NRF24L01說明,無線模塊的 資料
    發表于 06-21 16:05 ?33次下載

    nrf24l01無線模塊傳輸距離分析

    本文對nrf24l01無線模塊傳輸距離進行了分析總結,nRF24L01是一款新型單片射頻收發器件。介紹了三種不同模式的nrf24l01
    發表于 12-15 13:47 ?3.5w次閱讀

    nRF24L01無線2.4G通信模塊的詳細研究資料說明

     承接上文,本節將從零開始帶你認識無線2.4G模塊,了解其控制和通信指令,從而封裝一個nRF24L01底層的驅動函數,并最終寫一個3-3通信的小實驗驗證我們的封裝。在Quick Kno
    發表于 05-29 17:57 ?22次下載
    <b class='flag-5'>nRF24L01</b><b class='flag-5'>無線</b><b class='flag-5'>2.4G</b>通信<b class='flag-5'>模塊</b>的詳細研究資料說明

    NRF24L01模塊資料和C語言程序和使用與開發攻略合集免費下載

    本文檔的主要內容詳細介紹的是NRF24L01模塊資料和C語言程序和使用與開發攻略合集免費下載包括了:NRF24L01的從機和主機程序,NRF24L01
    發表于 10-10 08:00 ?42次下載
    <b class='flag-5'>NRF24L01</b>的<b class='flag-5'>模塊</b>資料和C語言程序和使用與開發攻略合集免費下載

    微雪電子NRF24L01 RF Board 2.4G無線模塊簡介

    NRF24L01 2.4G無線模塊 帶SPI接口 采用原裝NRF24L01,比仿冒品性能穩定很多,內置
    的頭像 發表于 12-30 14:32 ?3084次閱讀
    微雪電子<b class='flag-5'>NRF24L01</b> RF Board <b class='flag-5'>2.4G</b><b class='flag-5'>無線</b><b class='flag-5'>模塊</b>簡介

    nRF24L01無線模塊筆記

    nRF24L01無線模塊筆記
    發表于 11-20 12:21 ?54次下載
    <b class='flag-5'>nRF24L01</b><b class='flag-5'>無線</b><b class='flag-5'>模塊</b>筆記

    【Arduino】NRF24L01無線模塊6通道通信

    在我們使用NRF24L01 2.4G無線通訊模塊時往往不只是發送一個數據,這里我以我的項目總使用的6通道來分享。使用到的材料:兩塊NRF24L01
    發表于 12-17 18:09 ?23次下載
    【Arduino】<b class='flag-5'>NRF24L01</b><b class='flag-5'>無線</b><b class='flag-5'>模塊</b>6通道通信

    使用nRF24L01模塊進行無線射頻通信

    使用nRF24L01模塊進行無線射頻通信
    的頭像 發表于 08-01 11:18 ?5170次閱讀
    使用<b class='flag-5'>nRF24L01</b><b class='flag-5'>模塊</b>進行<b class='flag-5'>無線</b>射頻通信
    主站蜘蛛池模板: 国产精品永久免费| 成人性欧美丨区二区三区 | 影音先锋色天使| 18岁禁黄色| 手机看片日韩永久福利盒子| 天天草比| 成年全黄大色大黄| 国产美女亚洲精品久久久综合| 国产伦精一区二区三区| 亚洲成a人片77777潘金莲| 欧美狠狠| 免费一级特黄| 国产又黄又免费aaaa视频| 成年视频在线观看| 天天做天天操| 自拍中文字幕| 天天射天天爽| 成人精品第一区二区三区| 91综合在线视频| 嘿嘿嘿视频在线观看网站| 亚洲aaaa级特黄毛片| 日韩国产片| 韩国三级观影久久| 污夜影院| 在线观看视频播放| 精品成人毛片一区二区视| 偷偷狠狠的日日日日| 成人a区| 四虎在线成人免费网站| 欧美很很干| www.色婷婷.com| 看屁屁www视频免费观看| 91美女啪啪| 速度与激情10| 黄色网址在线免费观看| 午夜黄色一级片| 亚洲综合精品成人啪啪| 最近新韩国hd视频| 免费一级毛片| 天天做天天爱天天射| 无遮挡很污很爽很黄的网站|