久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8491|回復: 10
打印 上一主題 下一主題
收起左側

2.4G無線模塊nrf24l01通信試驗程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:127084 發表于 2016-6-17 12:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  最近項目中用到了2.4G無線模塊的數據通信,經過無數次的摸索和實驗,完成了該試驗,由于項目不方便上傳,我就把最初的實驗工程分享給大家。該實驗用的是STM32F103C8作為主控,nrf24l01作為無線模塊,通過SPI協議進行數據傳輸。
  該模塊具有自動應答,自動重發機制,可以根據項目需求進行相關設置,該無線模塊可以輕松配置為1對多模式。而且對于數據的收、發模式切換相當簡單,只需修改一個寄存器便可完成:
  發送模式:L01_SetTRMode( TX_MODE );
  接受模式:  L01_SetTRMode( RX_MODE );
  在工程文件中,可以根據宏定義配置為接收模塊或者發送模塊:
  設置為發送:#define ML01TX_MODE    屏蔽該句便是接收。
  希望該貼對于初次接觸2.4G無線模塊的您有所幫助!
引腳定義



  1. /**
  2.   ******************************************************************************
  3.   * @file    SPI/FullDuplex_SoftNSS/main.c
  4.   * @author  MCD Application Team
  5.   * @version V3.5.0
  6.   * @date    08-April-2011
  7.   * @brief   Main program body
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  14.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17.   *
  18.   * <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
  19.   ******************************************************************************
  20.   */
  21.         //該版本用于MM板,等待接收數據然后改為發送模式循環發送

  22. /* Includes ------------------------------------------------------------------*/
  23. #include "stm32f10x.h"
  24. #include "platform_config.h"
  25. #include "board.h"
  26. #include "nRF24L01.h"
  27. #include <string.h>

  28. #define ML01TX_MODE
  29. //#define ML01RX_MODE

  30. /** @addtogroup STM32F10x_StdPeriph_Examples
  31.   * @{
  32.   */

  33. /** @addtogroup SPI_FullDuplex_SoftNSS
  34.   * @{
  35.   */


  36. /* Private macro -------------------------------------------------------------*/
  37. /* Private variables ---------------------------------------------------------*/
  38. SPI_InitTypeDef   SPI_InitStructure;
  39. void RCC_Configuration(void);

  40. /**
  41.   * @brief  Main program
  42.   * @param  None
  43.   * @retval None
  44.   */
  45. #ifdef ML01TX_MODE
  46.        
  47. int main(void)
  48. {
  49.   u32 dly;
  50.         u8 tmp,x,testbuffer[10] = {"00000"};
  51.         u8 tx_couter = 0, itmp;

  52.   
  53.       
  54.   /* System clocks configuration ---------------------------------------------*/
  55.   RCC_Configuration();
  56.         GPIO_Initial();
  57.   SPI_Initial();
  58.        

  59.         L01_Init( );
  60.         L01_SetTRMode( TX_MODE );
  61.         L01_WriteHoppingPoint( 60 );
  62.         L01_SetSpeed( SPD_250K );
  63.                 while( 1 )
  64.         {
  65.       u8 read;
  66.         
  67.         
  68.                 for( dly = 0; dly < 8000000; dly ++ );
  69.                
  70.        
  71.         //LED_Off2();
  72.         L01_FlushRX( );
  73.         L01_FlushTX( );
  74.         L01_WriteTXPayload_Ack( (u8*)"123\r\n", strlen( "123\r\n" ) );
  75.         GPIO_SetBits( GPIOB, SPIML01_PIN_CE );

  76.         
  77.         while( GPIO_ReadInputDataBit( GPIOB, SPIML01_PIN_IRQ ) != 0 );
  78.         while( ( tmp = L01_ReadIRQSource( ) ) == 0 );
  79.         GPIO_ResetBits( GPIOB, SPIML01_PIN_CE );

  80.         if( tmp & ( 1<<MAX_RT ) )
  81.         {
  82.            
  83.                                                 int i=0;
  84.                                                 i+=1;
  85.            LED_Toggle( );
  86.         }
  87.         if( tmp & ( 1<<TX_DS )  )
  88.         {
  89. //                                          LED_Toggle2( );
  90.                                         L01_ClearIRQ( IRQ_ALL );
  91.                                         //修改為接收模式
  92.                                         L01_SetTRMode( RX_MODE );
  93.                                                 while( 1 )
  94.                                                 {
  95.                                                                        
  96.                                                                         L01_FlushRX( );
  97.                                                                         L01_FlushTX( );
  98.                                                                          GPIO_SetBits( GPIOB, SPIML01_PIN_CE );
  99.                                                                         while( GPIO_ReadInputDataBit( GPIOB, SPIML01_PIN_IRQ ) != 0 );
  100.                                                                        
  101.                                                                         while( ( tmp = L01_ReadIRQSource( ) ) == 0 );
  102.                                                                          GPIO_ResetBits( GPIOB, SPIML01_PIN_CE );
  103.                                                                         if( tmp & ( 1<<TX_DS ) )
  104.                                                                         {
  105.                                                                         //   USART_SendStr( "????\r\n" );
  106.                                                                         }
  107.                                                                         else if( tmp & ( 1<<MAX_RT ) )
  108.                                                                         {
  109.                                                                         //   USART_SendStr( "????\r\n" );
  110.                                                                         }
  111.                                                                         else if( tmp & ( 1<<RX_DR )  )
  112.                                                                         {
  113.                                                                                        
  114.                                                                                         for( tmp = 0; tmp < 32; tmp ++ )
  115.                                                                                         {
  116.                                                                                                         testbuffer[tmp] = 0;
  117.                                                                                         }
  118.                                                                                         tmp = L01_ReadRXPayload( testbuffer );
  119.                                                                                                         LED_Toggle2( );
  120.                                                                                         L01_SetTRMode( TX_MODE );
  121.                                                                                         L01_ClearIRQ( IRQ_ALL );
  122.                                                                                         break ;

  123.                                                                                        
  124.                                                                         }
  125.                                                                         L01_ClearIRQ( IRQ_ALL );
  126.                                                         }
  127.                                        
  128.                                        
  129.                                        

  130.         }
  131.         
  132.         
  133.         L01_ClearIRQ( IRQ_ALL );
  134.         }
  135. }
  136. #else // ML01RX_MODE

  137. int main(void)
  138. {
  139.   u32 dly;
  140.         u8 tmp,x,testbuffer[10] = {"00000"};
  141.         u8 tx_couter = 0, itmp;

  142.   
  143.       
  144.   /* System clocks configuration ---------------------------------------------*/
  145.   RCC_Configuration();
  146.         GPIO_Initial();
  147.   SPI_Initial();
  148.        

  149.         L01_Init( );
  150.         L01_SetTRMode( RX_MODE );
  151.         L01_WriteHoppingPoint( 60 );
  152.         L01_SetSpeed( SPD_250K );
  153.        
  154.         while( 1 )
  155.         {
  156.         
  157.         L01_FlushRX( );
  158.         L01_FlushTX( );
  159.          GPIO_SetBits( GPIOB, SPIML01_PIN_CE );
  160.         while( GPIO_ReadInputDataBit( GPIOB, SPIML01_PIN_IRQ ) != 0 );
  161.         
  162.         while( ( tmp = L01_ReadIRQSource( ) ) == 0 );
  163.         
  164.         if( tmp & ( 1<<TX_DS ) )
  165.         {
  166.         //   USART_SendStr( "????\r\n" );
  167.         }
  168.         else if( tmp & ( 1<<MAX_RT ) )
  169.         {
  170.         //   USART_SendStr( "????\r\n" );
  171.         }
  172.         else if( tmp & ( 1<<RX_DR )  )
  173.         {
  174.             
  175.             for( tmp = 0; tmp < 32; tmp ++ )
  176.             {
  177.                 testbuffer[tmp] = 0;
  178.             }
  179.             tmp = L01_ReadRXPayload( testbuffer );
  180.            
  181.             if( tmp == 5 && testbuffer[0] == '1' && testbuffer[1] == '2' && testbuffer[2] == '3' )
  182.             {

  183.                 LED_Toggle( );  
  184.             
  185.                
  186. //                rx_conter ++;
  187. //                itmp = rx_conter;
  188. //                testbuffer[0] = ( itmp / 10000 ) + '0';
  189. //                itmp %= 10000;
  190. //                testbuffer[1] = ( itmp / 1000 ) + '0';
  191. //                itmp %= 1000;
  192. //                testbuffer[2] = ( itmp / 100 ) + '0';
  193. //                itmp %= 100;
  194. //                testbuffer[3] = ( itmp / 10 ) + '0';
  195. //                itmp %= 10;
  196. //                testbuffer[4] = itmp + '0';
  197. //                testbuffer[5] = 0;
  198. //                LCD_Dis_Str( 6, 80, (char*)testbuffer );

  199.             }
  200.         }
  201.         L01_ClearIRQ( IRQ_ALL );
  202.     }
  203. }

  204. #endif

  205. /**
  206.   * @brief  Configures the different system clocks.
  207.   * @param  None
  208.   * @retval None
  209.   */
  210. void RCC_Configuration(void)
  211. {
  212.   /* PCLK2 = HCLK/2 */
  213.   //RCC_PCLK2Config(RCC_HCLK_Div2);

  214. //  RCC_DeInit();//RCC?????
  215. //
  216. //  RCC_HSICmd(ENABLE);//??HSI
  217. //  while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)//??HSI????
  218. //  {
  219. //  }
  220. //
  221. //  if(1)
  222. //  {
  223. //    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  224. //    FLASH_SetLatency(FLASH_Latency_2);
  225. //   
  226. //    RCC_HCLKConfig(RCC_SYSCLK_Div1);   
  227. //    RCC_PCLK1Config(RCC_HCLK_Div2);
  228. //    RCC_PCLK2Config(RCC_HCLK_Div1);
  229. //   
  230. //    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8);               
  231. //    RCC_PLLCmd(ENABLE);
  232. //    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  233. //    {
  234. //    }
  235. //    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  
  236. //    while(RCC_GetSYSCLKSource() != 0x08)
  237. //    {
  238. //    }
  239. //  
  240. //}
  241.        
  242.        
  243.        

  244.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA  | RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);

  245.   /* Enable SPIy Periph clock */
  246.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  247. }


  248. /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
復制代碼





2.4G.zip

307.36 KB, 下載次數: 66, 下載積分: 黑幣 -5

評分

參與人數 2黑幣 +15 收起 理由
i_am_hello_word + 5 很給力!
heyanrog + 10 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:127121 發表于 2016-6-17 15:53 | 只看該作者
謝謝分享!!收藏!!
回復

使用道具 舉報

板凳
ID:123712 發表于 2017-1-8 22:23 | 只看該作者
謝謝樓主分享,正在學習中
回復

使用道具 舉報

地板
ID:95821 發表于 2017-1-10 10:33 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

5#
ID:195585 發表于 2017-5-2 15:34 | 只看該作者
#include "platform_config.h"這里面寫的什么東西?
回復

使用道具 舉報

6#
ID:204570 發表于 2017-5-29 23:34 | 只看該作者
這個要怎么打開?
回復

使用道具 舉報

7#
ID:193008 發表于 2017-6-23 17:39 | 只看該作者

 謝謝樓主分享,正在學習中
回復

使用道具 舉報

8#
ID:139761 發表于 2017-7-1 20:30 | 只看該作者
剛接觸收藏學習一下
回復

使用道具 舉報

9#
ID:84492 發表于 2018-2-28 17:19 | 只看該作者
謝樓主分享      
回復

使用道具 舉報

10#
ID:478236 發表于 2019-3-17 21:35 | 只看該作者
89S51可以直接用嗎?
回復

使用道具 舉報

11#
ID:503369 發表于 2019-4-2 16:37 | 只看該作者
好東西大家都
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 激情av网站 | 欧美aaaaaaaaaa| 97人澡人人添人人爽欧美 | 欧美一区视频在线 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 日韩中文字幕在线观看 | 亚洲一区二区三区四区五区午夜 | 97av在线 | 精品伦精品一区二区三区视频 | 欧产日产国产精品国产 | 91精品国产91久久久久久吃药 | 精品欧美一区二区久久久伦 | 夜夜爽99久久国产综合精品女不卡 | 久草精品视频 | 91精品国产综合久久福利软件 | 亚洲精品一区二区三区在线 | 日韩精品一区二区三区在线观看 | 91在线精品秘密一区二区 | 成人小视频在线观看 | 色姑娘综合网 | 中文字幕乱码一区二区三区 | 欧美乱淫视频 | 国产成人免费在线观看 | 一区二区三区 在线 | 久久逼逼| 日本黄色大片免费看 | 国产精品视频一区二区三区四蜜臂 | 欧美色成人 | h在线观看 | 91九色porny首页最多播放 | 黄色欧美在线 | 龙珠z国语版在线观看 | 欧美一级艳情片免费观看 | 午夜影院在线观看版 | 国产精品入口 | 日本精品视频一区二区 | 亚洲国产精品视频 | 国产高清在线精品一区二区三区 | 欧美国产日韩在线观看成人 | 99久久中文字幕三级久久日本 | 免费久久精品 |