|
最近項(xiàng)目中用到了2.4G無(wú)線模塊的數(shù)據(jù)通信,經(jīng)過(guò)無(wú)數(shù)次的摸索和實(shí)驗(yàn),完成了該試驗(yàn),由于項(xiàng)目不方便上傳,我就把最初的實(shí)驗(yàn)工程分享給大家。該實(shí)驗(yàn)用的是STM32F103C8作為主控,nrf24l01作為無(wú)線模塊,通過(guò)SPI協(xié)議進(jìn)行數(shù)據(jù)傳輸。
該模塊具有自動(dòng)應(yīng)答,自動(dòng)重發(fā)機(jī)制,可以根據(jù)項(xiàng)目需求進(jìn)行相關(guān)設(shè)置,該無(wú)線模塊可以輕松配置為1對(duì)多模式。而且對(duì)于數(shù)據(jù)的收、發(fā)模式切換相當(dāng)簡(jiǎn)單,只需修改一個(gè)寄存器便可完成:
發(fā)送模式:L01_SetTRMode( TX_MODE );
接受模式: L01_SetTRMode( RX_MODE );
在工程文件中,可以根據(jù)宏定義配置為接收模塊或者發(fā)送模塊:
設(shè)置為發(fā)送:#define ML01TX_MODE 屏蔽該句便是接收。
希望該貼對(duì)于初次接觸2.4G無(wú)線模塊的您有所幫助!
|
引腳定義

- /**
- ******************************************************************************
- * @file SPI/FullDuplex_SoftNSS/main.c
- * @author MCD Application Team
- * @version V3.5.0
- * @date 08-April-2011
- * @brief Main program body
- ******************************************************************************
- * @attention
- *
- * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
- * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
- * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
- * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
- * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
- * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
- *
- * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
- ******************************************************************************
- */
- //該版本用于MM板,等待接收數(shù)據(jù)然后改為發(fā)送模式循環(huán)發(fā)送
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f10x.h"
- #include "platform_config.h"
- #include "board.h"
- #include "nRF24L01.h"
- #include <string.h>
- #define ML01TX_MODE
- //#define ML01RX_MODE
- /** @addtogroup STM32F10x_StdPeriph_Examples
- * @{
- */
- /** @addtogroup SPI_FullDuplex_SoftNSS
- * @{
- */
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- SPI_InitTypeDef SPI_InitStructure;
- void RCC_Configuration(void);
- /**
- * @brief Main program
- * @param None
- * @retval None
- */
- #ifdef ML01TX_MODE
-
- int main(void)
- {
- u32 dly;
- u8 tmp,x,testbuffer[10] = {"00000"};
- u8 tx_couter = 0, itmp;
-
-
- /* System clocks configuration ---------------------------------------------*/
- RCC_Configuration();
- GPIO_Initial();
- SPI_Initial();
-
- L01_Init( );
- L01_SetTRMode( TX_MODE );
- L01_WriteHoppingPoint( 60 );
- L01_SetSpeed( SPD_250K );
- while( 1 )
- {
- u8 read;
-
-
- for( dly = 0; dly < 8000000; dly ++ );
-
-
- //LED_Off2();
- L01_FlushRX( );
- L01_FlushTX( );
- L01_WriteTXPayload_Ack( (u8*)"123\r\n", strlen( "123\r\n" ) );
- GPIO_SetBits( GPIOB, SPIML01_PIN_CE );
-
- while( GPIO_ReadInputDataBit( GPIOB, SPIML01_PIN_IRQ ) != 0 );
- while( ( tmp = L01_ReadIRQSource( ) ) == 0 );
- GPIO_ResetBits( GPIOB, SPIML01_PIN_CE );
- if( tmp & ( 1<<MAX_RT ) )
- {
-
- int i=0;
- i+=1;
- LED_Toggle( );
- }
- if( tmp & ( 1<<TX_DS ) )
- {
- // LED_Toggle2( );
- L01_ClearIRQ( IRQ_ALL );
- //修改為接收模式
- L01_SetTRMode( RX_MODE );
- while( 1 )
- {
-
- L01_FlushRX( );
- L01_FlushTX( );
- GPIO_SetBits( GPIOB, SPIML01_PIN_CE );
- while( GPIO_ReadInputDataBit( GPIOB, SPIML01_PIN_IRQ ) != 0 );
-
- while( ( tmp = L01_ReadIRQSource( ) ) == 0 );
- GPIO_ResetBits( GPIOB, SPIML01_PIN_CE );
- if( tmp & ( 1<<TX_DS ) )
- {
- // USART_SendStr( "????\r\n" );
- }
- else if( tmp & ( 1<<MAX_RT ) )
- {
- // USART_SendStr( "????\r\n" );
- }
- else if( tmp & ( 1<<RX_DR ) )
- {
-
- for( tmp = 0; tmp < 32; tmp ++ )
- {
- testbuffer[tmp] = 0;
- }
- tmp = L01_ReadRXPayload( testbuffer );
- LED_Toggle2( );
- L01_SetTRMode( TX_MODE );
- L01_ClearIRQ( IRQ_ALL );
- break ;
-
- }
- L01_ClearIRQ( IRQ_ALL );
- }
-
-
-
- }
-
-
- L01_ClearIRQ( IRQ_ALL );
- }
- }
- #else // ML01RX_MODE
- int main(void)
- {
- u32 dly;
- u8 tmp,x,testbuffer[10] = {"00000"};
- u8 tx_couter = 0, itmp;
-
-
- /* System clocks configuration ---------------------------------------------*/
- RCC_Configuration();
- GPIO_Initial();
- SPI_Initial();
-
- L01_Init( );
- L01_SetTRMode( RX_MODE );
- L01_WriteHoppingPoint( 60 );
- L01_SetSpeed( SPD_250K );
-
- while( 1 )
- {
-
- L01_FlushRX( );
- L01_FlushTX( );
- GPIO_SetBits( GPIOB, SPIML01_PIN_CE );
- while( GPIO_ReadInputDataBit( GPIOB, SPIML01_PIN_IRQ ) != 0 );
-
- while( ( tmp = L01_ReadIRQSource( ) ) == 0 );
-
- if( tmp & ( 1<<TX_DS ) )
- {
- // USART_SendStr( "????\r\n" );
- }
- else if( tmp & ( 1<<MAX_RT ) )
- {
- // USART_SendStr( "????\r\n" );
- }
- else if( tmp & ( 1<<RX_DR ) )
- {
-
- for( tmp = 0; tmp < 32; tmp ++ )
- {
- testbuffer[tmp] = 0;
- }
- tmp = L01_ReadRXPayload( testbuffer );
-
- if( tmp == 5 && testbuffer[0] == '1' && testbuffer[1] == '2' && testbuffer[2] == '3' )
- {
- LED_Toggle( );
-
-
- // rx_conter ++;
- // itmp = rx_conter;
- // testbuffer[0] = ( itmp / 10000 ) + '0';
- // itmp %= 10000;
- // testbuffer[1] = ( itmp / 1000 ) + '0';
- // itmp %= 1000;
- // testbuffer[2] = ( itmp / 100 ) + '0';
- // itmp %= 100;
- // testbuffer[3] = ( itmp / 10 ) + '0';
- // itmp %= 10;
- // testbuffer[4] = itmp + '0';
- // testbuffer[5] = 0;
- // LCD_Dis_Str( 6, 80, (char*)testbuffer );
- }
- }
- L01_ClearIRQ( IRQ_ALL );
- }
- }
- #endif
- /**
- * @brief Configures the different system clocks.
- * @param None
- * @retval None
- */
- void RCC_Configuration(void)
- {
- /* PCLK2 = HCLK/2 */
- //RCC_PCLK2Config(RCC_HCLK_Div2);
- // RCC_DeInit();//RCC?????
- //
- // RCC_HSICmd(ENABLE);//??HSI
- // while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)//??HSI????
- // {
- // }
- //
- // if(1)
- // {
- // FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
- // FLASH_SetLatency(FLASH_Latency_2);
- //
- // RCC_HCLKConfig(RCC_SYSCLK_Div1);
- // RCC_PCLK1Config(RCC_HCLK_Div2);
- // RCC_PCLK2Config(RCC_HCLK_Div1);
- //
- // RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8);
- // RCC_PLLCmd(ENABLE);
- // while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
- // {
- // }
- // RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
- // while(RCC_GetSYSCLKSource() != 0x08)
- // {
- // }
- //
- //}
-
-
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
- /* Enable SPIy Periph clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
- }
- /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
復(fù)制代碼
|
-
-
2.4G.zip
2016-6-17 12:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
307.36 KB, 下載次數(shù): 66, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|