微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第078例:SPI-NRF24L01无线模块(一块板,两个模块)

第078例:SPI-NRF24L01无线模块(一块板,两个模块)

时间:10-02 整理:3721RD 点击:
【HAL库每天一例】系列例程从今天开始持续更新。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
百度云链接:http://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\2. 软件设计之高级裸机例程(HAL库版本)\YSF1_HAL-112. SPI-NRF24L01无线模块(一块板,两个模块))
/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-112. SPI-NRF24L01无线模块(一块板,两个模块)
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:http://www.ing10bbs.com
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */
【1】例程简介
  nRF24L01是一款新型单片射频收发器件,工作于2.4 GHz~2.5 GHz ISM频段。内置频率合成器、
功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和
通信频道可通过程序进行配置。nRF24L01功耗低,在以-6 dBm的功率发射时,工作电流也只有9 mA;
接收时,工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。
  
【2】跳线帽情况
******* 为保证例程正常运行,必须  插入  以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  
******* 为保证例程正常运行,必须  拔掉  以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP8        PF9         INTn(W5500)          已接入
  JP9        PF11        SCSn(W5500)          已接入
【3】操作及现象
将NRF24L01模块插入到使用开发板的CN14接口上,拔掉JP8和JP9两个跳线帽。使用杜邦线连接另外
一个NRF24L01模块(参考bsp_NRF24L01.h文件内容)。将配套的MINI USB线连接到开发板标示“调
试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工具,设置参数为
115200 8-N-1。下载完程序之后,在串口调试助手窗口可接收到信息。
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/











bsp_NRF24L01.c文件内容

  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: bsp_NRF24L01.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: NRF24L01无线模块底层驱动实现
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:http://www.ing10bbs.com
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */

  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "NRF24L01/bsp_NRF24L01.h"

  19. /* 私有类型定义 --------------------------------------------------------------*/
  20. /* 私有宏定义 ----------------------------------------------------------------*/                              
  21. /* 私有变量 ------------------------------------------------------------------*/
  22. SPI_HandleTypeDef hspi_NRF24L01_1;
  23. SPI_HandleTypeDef hspi_NRF24L01_2;

  24. const uint8_t TX_ADDRESS[TX_ADR_WIDTH]={0xb0,0x43,0x10,0x10,0x01}; //发送地址
  25. const uint8_t RX_ADDRESS[RX_ADR_WIDTH]={0xb0,0x43,0x10,0x10,0x01};

  26. /* 扩展变量 ------------------------------------------------------------------*/
  27. /* 私有函数原形 --------------------------------------------------------------*/
  28. /* 函数体 --------------------------------------------------------------------*/

  29. /**
  30.   * 函数功能: 串行FLASH初始化
  31.   * 输入参数: huart:串口句柄类型指针
  32.   * 返 回 值: 无
  33.   * 说    明: 该函数被HAL库内部调用
  34. */
  35. void NRF24L01_SPI_Init(void)
  36. {
  37.   hspi_NRF24L01_1.Instance = NRF24L01_1_SPIx;
  38.   hspi_NRF24L01_1.Init.Mode = SPI_MODE_MASTER;
  39.   hspi_NRF24L01_1.Init.Direction = SPI_DIRECTION_2LINES;
  40.   hspi_NRF24L01_1.Init.DataSize = SPI_DATASIZE_8BIT;
  41.   hspi_NRF24L01_1.Init.CLKPolarity = SPI_POLARITY_LOW;
  42.   hspi_NRF24L01_1.Init.CLKPhase = SPI_PHASE_1EDGE;
  43.   hspi_NRF24L01_1.Init.NSS = SPI_NSS_SOFT;
  44.   hspi_NRF24L01_1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  45.   hspi_NRF24L01_1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  46.   hspi_NRF24L01_1.Init.TIMode = SPI_TIMODE_DISABLE;
  47.   hspi_NRF24L01_1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  48.   hspi_NRF24L01_1.Init.CRCPolynomial = 10;
  49.   HAL_SPI_Init(&hspi_NRF24L01_1);
  50.   __HAL_SPI_ENABLE(&hspi_NRF24L01_1);
  51.   
  52.   hspi_NRF24L01_2.Instance = NRF24L01_2_SPIx;
  53.   hspi_NRF24L01_2.Init.Mode = SPI_MODE_MASTER;
  54.   hspi_NRF24L01_2.Init.Direction = SPI_DIRECTION_2LINES;
  55.   hspi_NRF24L01_2.Init.DataSize = SPI_DATASIZE_8BIT;
  56.   hspi_NRF24L01_2.Init.CLKPolarity = SPI_POLARITY_LOW;
  57.   hspi_NRF24L01_2.Init.CLKPhase = SPI_PHASE_1EDGE;
  58.   hspi_NRF24L01_2.Init.NSS = SPI_NSS_SOFT;
  59.   hspi_NRF24L01_2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  60.   hspi_NRF24L01_2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  61.   hspi_NRF24L01_2.Init.TIMode = SPI_TIMODE_DISABLE;
  62.   hspi_NRF24L01_2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  63.   hspi_NRF24L01_2.Init.CRCPolynomial = 10;
  64.   HAL_SPI_Init(&hspi_NRF24L01_2);
  65.   __HAL_SPI_ENABLE(&hspi_NRF24L01_2);
  66. }

  67. /**
  68.   * 函数功能: SPI外设系统级初始化
  69.   * 输入参数: hspi:SPI句柄类型指针
  70.   * 返 回 值: 无
  71.   * 说    明: 该函数被HAL库内部调用
  72.   */
  73. void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
  74. {
  75.   GPIO_InitTypeDef GPIO_InitStruct;
  76.   if(hspi->Instance==NRF24L01_1_SPIx)
  77.   {
  78.     /* SPI外设时钟使能 */
  79.     NRF24L01_1_SPIx_RCC_CLK_ENABLE();
  80.     /* GPIO外设时钟使能 */
  81.     NRF24L01_1_SPI_GPIO_ClK_ENABLE();
  82.     NRF24L01_1_SPI_CS_CLK_ENABLE();
  83.     NRF24L01_1_CE_CLK_ENABLE();
  84.     NRF24L01_1_IRQ_CLK_ENABLE();
  85.    
  86.     /* Disable the Serial Wire Jtag Debug Port SWJ-DP */
  87.     __HAL_AFIO_REMAP_SWJ_DISABLE();
  88.    
  89.     /**SPI3 GPIO Configuration   
  90.     PF11     ------> SPI3_NSS
  91.     PB3      ------> SPI3_SCK
  92.     PB4      ------> SPI3_MISO
  93.     PB5      ------> SPI3_MOSI
  94.     */
  95.     GPIO_InitStruct.Pin = NRF24L01_1_SPI_SCK_PIN|NRF24L01_1_SPI_MOSI_PIN;
  96.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  97.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  98.     HAL_GPIO_Init(NRF24L01_1_SPI_GPIO_PORT, &GPIO_InitStruct);

  99.     GPIO_InitStruct.Pin = NRF24L01_1_SPI_MISO_PIN;
  100.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  101.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  102.     HAL_GPIO_Init(NRF24L01_1_SPI_GPIO_PORT, &GPIO_InitStruct);
  103.    
  104.     HAL_GPIO_WritePin(NRF24L01_1_SPI_CS_PORT, NRF24L01_1_SPI_CS_PIN, GPIO_PIN_SET);
  105.     GPIO_InitStruct.Pin = NRF24L01_1_SPI_CS_PIN;
  106.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  107.     HAL_GPIO_Init(NRF24L01_1_SPI_CS_PORT, &GPIO_InitStruct);
  108.    
  109.     HAL_GPIO_WritePin(NRF24L01_1_CE_PORT, NRF24L01_1_CE_PIN, GPIO_PIN_RESET);
  110.     GPIO_InitStruct.Pin = NRF24L01_1_CE_PIN;
  111.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  112.     HAL_GPIO_Init(NRF24L01_1_CE_PORT, &GPIO_InitStruct);
  113.    
  114.     GPIO_InitStruct.Pin = NRF24L01_1_IRQ_PIN;
  115.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  116.     GPIO_InitStruct.Pull = GPIO_PULLUP;
  117.     HAL_GPIO_Init(NRF24L01_1_IRQ_PORT, &GPIO_InitStruct);
  118.   }
  119.   else if(hspi->Instance==NRF24L01_2_SPIx)
  120.   {
  121.     /* SPI外设时钟使能 */
  122.     NRF24L01_2_SPIx_RCC_CLK_ENABLE();
  123.     /* GPIO外设时钟使能 */
  124.     NRF24L01_2_SPI_GPIO_ClK_ENABLE();
  125.     NRF24L01_2_SPI_CS_CLK_ENABLE();
  126.     NRF24L01_2_CE_CLK_ENABLE();
  127.     NRF24L01_2_IRQ_CLK_ENABLE();
  128.    
  129.     /**SPI2 GPIO Configuration   
  130.     PB1       ------> SPI2_NSS
  131.     PB13      ------> SPI2_SCK
  132.     PB14      ------> SPI2_MISO
  133.     PB15      ------> SPI2_MOSI
  134.     */
  135.     GPIO_InitStruct.Pin = NRF24L01_2_SPI_SCK_PIN|NRF24L01_2_SPI_MOSI_PIN;
  136.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  137.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  138.     HAL_GPIO_Init(NRF24L01_2_SPI_GPIO_PORT, &GPIO_InitStruct);

  139.     GPIO_InitStruct.Pin = NRF24L01_2_SPI_MISO_PIN;
  140.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  141.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  142.     HAL_GPIO_Init(NRF24L01_2_SPI_GPIO_PORT, &GPIO_InitStruct);
  143.    
  144.     HAL_GPIO_WritePin(NRF24L01_2_SPI_CS_PORT, NRF24L01_2_SPI_CS_PIN, GPIO_PIN_SET);
  145.     GPIO_InitStruct.Pin = NRF24L01_2_SPI_CS_PIN;
  146.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  147.     HAL_GPIO_Init(NRF24L01_2_SPI_CS_PORT, &GPIO_InitStruct);
  148.    
  149.     HAL_GPIO_WritePin(NRF24L01_2_CE_PORT, NRF24L01_2_CE_PIN, GPIO_PIN_RESET);
  150.     GPIO_InitStruct.Pin = NRF24L01_2_CE_PIN;
  151.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  152.     HAL_GPIO_Init(NRF24L01_2_CE_PORT, &GPIO_InitStruct);
  153.    
  154.     GPIO_InitStruct.Pin = NRF24L01_2_IRQ_PIN;
  155.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  156.     GPIO_InitStruct.Pull = GPIO_PULLUP;
  157.     HAL_GPIO_Init(NRF24L01_2_IRQ_PORT, &GPIO_InitStruct);
  158.   }
  159. }

  160. /**
  161.   * 函数功能: SPI外设系统级反初始化
  162.   * 输入参数: hspi:SPI句柄类型指针
  163.   * 返 回 值: 无
  164.   * 说    明: 该函数被HAL库内部调用
  165.   */
  166. void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
  167. {

  168.   if(hspi->Instance==NRF24L01_1_SPIx)
  169.   {
  170.     /* SPI外设时钟禁用 */
  171.     NRF24L01_1_SPIx_RCC_CLK_DISABLE();
  172.   
  173.     /**SPI3 GPIO Configuration   
  174.     PF11     ------> SPI3_NSS
  175.     PB3      ------> SPI3_SCK
  176.     PB4      ------> SPI3_MISO
  177.     PB5      ------> SPI3_MOSI
  178.     */
  179.     HAL_GPIO_DeInit(NRF24L01_1_SPI_GPIO_PORT, NRF24L01_1_SPI_SCK_PIN|NRF24L01_1_SPI_MISO_PIN|NRF24L01_1_SPI_MOSI_PIN);
  180.     HAL_GPIO_DeInit(NRF24L01_1_SPI_CS_PORT, NRF24L01_1_SPI_CS_PIN);
  181.     HAL_GPIO_DeInit(NRF24L01_1_CE_PORT, NRF24L01_1_CE_PIN);
  182.     HAL_GPIO_DeInit(NRF24L01_1_IRQ_PORT, NRF24L01_1_IRQ_PIN);
  183.   }
  184.   else if(hspi->Instance==NRF24L01_2_SPIx)
  185.   {
  186.     /* SPI外设时钟禁用 */
  187.     NRF24L01_2_SPIx_RCC_CLK_DISABLE();
  188.   
  189.     /**SPI2 GPIO Configuration   
  190.     PB1       ------> SPI2_NSS
  191.     PB13      ------> SPI2_SCK
  192.     PB14      ------> SPI2_MISO
  193.     PB15      ------> SPI2_MOSI
  194.     */
  195.     HAL_GPIO_DeInit(NRF24L01_2_SPI_GPIO_PORT, NRF24L01_2_SPI_SCK_PIN|NRF24L01_2_SPI_MISO_PIN|NRF24L01_2_SPI_MOSI_PIN);
  196.     HAL_GPIO_DeInit(NRF24L01_2_SPI_CS_PORT, NRF24L01_2_SPI_CS_PIN);
  197.     HAL_GPIO_DeInit(NRF24L01_2_CE_PORT, NRF24L01_2_CE_PIN);
  198.     HAL_GPIO_DeInit(NRF24L01_2_IRQ_PORT, NRF24L01_2_IRQ_PIN);
  199.   }
  200. }


  201. /**
  202.   * 函数功能: 往串行Flash读取写入一个字节数据并接收一个字节数据
  203.   * 输入参数: byte:待发送数据
  204.   * 返 回 值: uint8_t:接收到的数据
  205.   * 说    明:无
  206.   */
  207. uint8_t SPIx_ReadWriteByte(SPI_HandleTypeDef* hspi,uint8_t byte)
  208. {
  209.   uint8_t d_read,d_send=byte;
  210.   if(HAL_SPI_TransmitReceive(hspi,&d_send,&d_read,1,0xFF)!=HAL_OK)
  211.   {
  212.     d_read=0xFF;
  213.   }
  214.   return d_read;
  215. }

  216. /**
  217.   * 函数功能: 检测24L01是否存在
  218.   * 输入参数: 无
  219.   * 返 回 值: 0,成功;1,失败
  220.   * 说    明:无         
  221.   */
  222. uint8_t NRF24L01_Check(SPI_HandleTypeDef* hspi)
  223. {
  224.         uint8_t buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
  225.         uint8_t i;
  226.         NRF24L01_Write_Buf(hspi,NRF_WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址.        
  227.         NRF24L01_Read_Buf(hspi,TX_ADDR,buf,5); //读出写入的地址  
  228.         for(i=0;i<5;i++)if(buf[i]!=0XA5)break;                                                                    
  229.         if(i!=5)return 1;//检测24L01错误        
  230.         return 0;                 //检测到24L01
  231. }                  

  232. /**
  233.   * 函数功能: SPI写寄存器
  234.   * 输入参数: 无
  235.   * 返 回 值: 无
  236.   * 说    明:reg:指定寄存器地址
  237.   *           
  238.   */
  239. uint8_t NRF24L01_Write_Reg(SPI_HandleTypeDef* hspi,uint8_t reg,uint8_t value)
  240. {
  241.         uint8_t status;
  242.   if(hspi->Instance==NRF24L01_1_SPIx)
  243.   {
  244.           NRF24L01_1_SPI_CS_ENABLE(); //使能SPI传输
  245.   }
  246.   else
  247.   {
  248.     NRF24L01_2_SPI_CS_ENABLE(); //使能SPI传输
  249.   }
  250.                   
  251.   status =SPIx_ReadWriteByte(hspi,reg);//发送寄存器号
  252.   SPIx_ReadWriteByte(hspi,value);      //写入寄存器的值
  253.   
  254.   if(hspi->Instance==NRF24L01_1_SPIx)
  255.   {
  256.           NRF24L01_1_SPI_CS_DISABLE(); //禁止SPI传输        
  257.   }
  258.   else
  259.   {
  260.     NRF24L01_2_SPI_CS_DISABLE(); //禁止SPI传输        
  261.   }
  262.   return(status);                               //返回状态值
  263. }

  264. /**
  265.   * 函数功能: 读取SPI寄存器值
  266.   * 输入参数: 无
  267.   * 返 回 值: 无
  268.   * 说    明:reg:要读的寄存器
  269.   *           
  270.   */
  271. uint8_t NRF24L01_Read_Reg(SPI_HandleTypeDef* hspi,uint8_t reg)
  272. {
  273.         uint8_t reg_val;            
  274.   if(hspi->Instance==NRF24L01_1_SPIx)
  275.   {
  276.           NRF24L01_1_SPI_CS_ENABLE(); //使能SPI传输
  277.   }
  278.   else
  279.   {
  280.     NRF24L01_2_SPI_CS_ENABLE(); //使能SPI传输
  281.   }               
  282.   SPIx_ReadWriteByte(hspi,reg);   //发送寄存器号
  283.   reg_val=SPIx_ReadWriteByte(hspi,0XFF);//读取寄存器内容
  284.   if(hspi->Instance==NRF24L01_1_SPIx)
  285.   {
  286.           NRF24L01_1_SPI_CS_DISABLE(); //禁止SPI传输        
  287.   }
  288.   else
  289.   {
  290.     NRF24L01_2_SPI_CS_DISABLE(); //禁止SPI传输        
  291.   }
  292.   
  293.   return(reg_val);           //返回状态值
  294. }        

  295. /**
  296.   * 函数功能: 在指定位置读出指定长度的数据
  297.   * 输入参数: 无
  298.   * 返 回 值: 此次读到的状态寄存器值
  299.   * 说    明:无
  300.   *           
  301.   */
  302. uint8_t NRF24L01_Read_Buf(SPI_HandleTypeDef* hspi,uint8_t reg,uint8_t *pBuf,uint8_t len)
  303. {
  304.         uint8_t status,uint8_t_ctr;           
  305.   
  306.   if(hspi->Instance==NRF24L01_1_SPIx)
  307.   {
  308.           NRF24L01_1_SPI_CS_ENABLE(); //使能SPI传输
  309.   }
  310.   else
  311.   {
  312.     NRF24L01_2_SPI_CS_ENABLE(); //使能SPI传输
  313.   }
  314.   
  315.   status=SPIx_ReadWriteByte(hspi,reg);//发送寄存器值(位置),并读取状态值              
  316.          for(uint8_t_ctr=0;uint8_t_ctr<len;uint8_t_ctr++)
  317.   {
  318.     pBuf[uint8_t_ctr]=SPIx_ReadWriteByte(hspi,0XFF);//读出数据
  319.   }
  320.   if(hspi->Instance==NRF24L01_1_SPIx)
  321.   {
  322.           NRF24L01_1_SPI_CS_DISABLE(); //禁止SPI传输        
  323.   }
  324.   else
  325.   {
  326.     NRF24L01_2_SPI_CS_DISABLE(); //禁止SPI传输        
  327.   }
  328.   return status;        //返回读到的状态值
  329. }

  330. /**
  331.   * 函数功能: 在指定位置写指定长度的数据
  332.   * 输入参数: 无
  333.   * 返 回 值: 无
  334.   * 说    明:reg:寄存器(位置)  *pBuf:数据指针  len:数据长度
  335.   *           
  336.   */
  337. uint8_t NRF24L01_Write_Buf(SPI_HandleTypeDef* hspi,uint8_t reg, uint8_t *pBuf, uint8_t len)
  338. {
  339.         uint8_t status,uint8_t_ctr;            
  340.   if(hspi->Instance==NRF24L01_1_SPIx)
  341.   {
  342.           NRF24L01_1_SPI_CS_ENABLE(); //使能SPI传输
  343.   }
  344.   else
  345.   {
  346.     NRF24L01_2_SPI_CS_ENABLE(); //使能SPI传输
  347.   }
  348.   
  349.   status = SPIx_ReadWriteByte(hspi,reg);//发送寄存器值(位置),并读取状态值
  350.   for(uint8_t_ctr=0; uint8_t_ctr<len; uint8_t_ctr++)
  351.   {
  352.     SPIx_ReadWriteByte(hspi,*pBuf++); //写入数据         
  353.   }
  354.   if(hspi->Instance==NRF24L01_1_SPIx)
  355.   {
  356.           NRF24L01_1_SPI_CS_DISABLE(); //禁止SPI传输        
  357.   }
  358.   else
  359.   {
  360.     NRF24L01_2_SPI_CS_DISABLE(); //禁止SPI传输        
  361.   }
  362.   return status;          //返回读到的状态值
  363. }                                   

  364. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/

复制代码


谢谢分享谢谢分享谢谢分享
         谢谢分享谢谢分享                       谢谢分享
         谢谢分享谢谢分享                谢谢分享         
                     谢谢分享              谢谢分享谢谢分享谢谢分享
               谢谢分享              谢谢分享        谢                谢
               谢谢分享              谢谢分享        谢                谢
               谢谢分享              谢谢分享        分                分
               谢谢分享              谢谢分享        享                享
               谢谢分享              谢谢分享        谢                谢
               谢谢分享              谢谢分享        谢                谢
谢        谢谢分享               谢谢分享       分                分
谢谢     谢谢分享              谢谢分享        享                享
谢谢分 谢谢分享              谢谢分享        谢                谢
谢谢分 谢谢分享                               谢       谢
谢谢分谢谢分享                         谢                 谢
           谢谢谢谢                    分                               分
               谢谢                   享                                     享

谢谢小编的分享了哟

顶  谢谢分享

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top