你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32WLE5系列之2-stm32wle5ccu6移植pingpong通信

[复制链接]
STMCU小助手 发布时间:2022-10-20 18:31
简介
官方只提供了STM32WL55JC和STM32WL55JC1的相关应用demo,由于封装不通我们并不能直接使用相关程序,需要移植才能使用。本次我们移植pingpong通信demo

一、工程移植
1、打开STM32CubeMX,选择start My projext from MCU开始工程

c9c595898d0843dcac0e6d3cb4e1e6be.png

2、在MCU/MPU处选择使用STM32WLE5CCU6


ce759cf2bb994e39bcba330374887923.png

3、在File->import project导入pingpong例程,选择导入工程为C"\Users\用户\STM32Cube\Repository\STM32CuBE_FW_WLV1.2.0\Projects\NUCLEO-WL55JC\Applications\SubGHz_Phy\SubGHz_Phy_PingPong\SubGHz_Phy_PingPong.ioc
用户为自己实际的用户名

eabbd354683c4d7791a658576c0f3cfb.png

导入后会有些报错,是因为原来WL55JC是BGA的封装引脚要多一些,而stm32wle5ccu6没有

4、在Project Manager->Project中设置工程名和存放路径,Toolchain/IDE设置为MDK-ARM;Code Generator设置为Copy all used libraries into the project folder

d36a100f0c024b99986d29f6c8370795.png

6018d91799ac4fb49e1fd28312a41a29.png

5、时钟输入配置,HSE和LSE都配置为Crystal/Ceramic Resonator


bc99cbb8fda944e6a771fc51fba34ba8.png

6、RTC开启Alarm A并且使能中断


bb49a01df25445b3a4feed59805c9604.png

7、SubGHz_Phy设置如下

ad6a96941ad0469faa47dc07d76a261f.png

d4d2c6841cc64814a211c1d22d56e6d0.png

8、时钟树配置,RTC使用LSE

37d50e58e60149cdbb1d69c2afe8a907.png

9、点击GENERATE CODE生成代码,打开keil工程然后编译会报以下错误,是由于我们没有添加BSP包

ff851680b0df4c93b9154d53d0b91cd2.png

10、把下载的软件包C:\Users\用户\STM32Cube\Repository\STM32Cube_FW_WL_V1.2.0\Drivers中的BSP包拷贝到当前工程下。然后在keil中添加文件和其所在目录索引。
11、然后编译工程,0 error 0 waring

665fd274877f46bc90aa4e614e88c0f5.png

二、应用移植
1、修改BSP中关于射频开关部分的引脚定义,我们使用的亿佰特的E77模块,所以射频开关为PA6和PA7
stm32wlxx_nucleo_radio.h修改为下面这样,我们只使用了RF_SW_CTRL3_PIN、RF_SW_CTRL1_PIN 两个脚,另一个不用管。

  1. <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_PIN                          GPIO_PIN_6</font>
  2. <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_GPIO_PORT                    GPIOA</font>
  3. <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_GPIO_CLK_ENABLE()            __HAL_RCC_GPIOC_CLK_ENABLE()</font>
  4. <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_GPIO_CLK_DISABLE()           __HAL_RCC_GPIOC_CLK_DISABLE()</font>

  5. <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL1_PIN                          GPIO_PIN_7</font>
  6. <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL1_GPIO_PORT                    GPIOA</font>
  7. <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL1_GPIO_CLK_ENABLE()            __HAL_RCC_GPIOC_CLK_ENABLE()</font>
  8. <font color="#000000" face="Tahoma" size="3">#define RF_SW_RX_GPIO_CLK_DISABLE()              __HAL_RCC_GPIOC_CLK_DISABLE()</font>
复制代码

由于射频开关不同,射频控制逻辑也需要修改,把stm32wlxx_nucleo_radio.c中射频开关修改如下所示

  1. <font color="#000000" face="Tahoma" size="3">int32_t BSP_RADIO_ConfigRFSwitch(BSP_RADIO_Switch_TypeDef Config)</font>
  2. <font color="#000000" face="Tahoma" size="3">{</font>
  3. <font color="#000000" face="Tahoma" size="3">  switch (Config)</font>
  4. <font color="#000000" face="Tahoma" size="3">  {</font>
  5. <font color="#000000" face="Tahoma" size="3">    case RADIO_SWITCH_OFF:</font>
  6. <font color="#000000" face="Tahoma" size="3">    {</font>
  7. <font color="#000000" face="Tahoma" size="3">      /* Turn off switch */</font>
  8. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET);</font>
  9. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);</font>
  10. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET);</font>
  11. <font color="#000000" face="Tahoma" size="3">      break;      </font>
  12. <font color="#000000" face="Tahoma" size="3">    }</font>
  13. <font color="#000000" face="Tahoma" size="3">    case RADIO_SWITCH_RX:</font>
  14. <font color="#000000" face="Tahoma" size="3">    {</font>
  15. <font color="#000000" face="Tahoma" size="3">      /*Turns On in Rx Mode the RF Switch */</font>
  16. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET);</font>
  17. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET); </font>
  18. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); </font>
  19. <font color="#000000" face="Tahoma" size="3">      break;</font>
  20. <font color="#000000" face="Tahoma" size="3">    }</font>
  21. <font color="#000000" face="Tahoma" size="3">    case RADIO_SWITCH_RFO_LP:</font>
  22. <font color="#000000" face="Tahoma" size="3">    {</font>
  23. <font color="#000000" face="Tahoma" size="3">      /*Turns On in Tx Low Power the RF Switch */</font>
  24. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET);</font>
  25. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); </font>
  26. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); </font>
  27. <font color="#000000" face="Tahoma" size="3">      break;</font>
  28. <font color="#000000" face="Tahoma" size="3">    }</font>
  29. <font color="#000000" face="Tahoma" size="3">    case RADIO_SWITCH_RFO_HP:</font>
  30. <font color="#000000" face="Tahoma" size="3">    {</font>
  31. <font color="#000000" face="Tahoma" size="3">      /*Turns On in Tx High Power the RF Switch */</font>
  32. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET);</font>
  33. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); </font>
  34. <font color="#000000" face="Tahoma" size="3">      HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); </font>
  35. <font color="#000000" face="Tahoma" size="3">      break;</font>
  36. <font color="#000000" face="Tahoma" size="3">    }</font>
  37. <font color="#000000" face="Tahoma" size="3">    default:</font>
  38. <font color="#000000" face="Tahoma" size="3">      break;    </font>
  39. <font color="#000000" face="Tahoma" size="3">  }  </font>

  40. <font color="#000000" face="Tahoma" size="3">  return BSP_ERROR_NONE;</font>
  41. <font color="#000000" face="Tahoma" size="3">}</font>

  42. <font color="#000000" face="Tahoma" size="3">int32_t BSP_RADIO_GetTxConfig(void)</font>
  43. <font color="#000000" face="Tahoma" size="3">{</font>
  44. <font color="#000000" face="Tahoma" size="3">  //return RADIO_CONF_RFO_LP_HP;</font>
  45. <font color="#000000" face="Tahoma" size="3">        return RADIO_CONF_RFO_HP;</font>
  46. <font color="#000000" face="Tahoma" size="3">}</font>

  47. <font color="#000000" face="Tahoma" size="3">//</font>
  48. <font color="#000000" face="Tahoma" size="3">//使用无源晶振</font>
  49. <font color="#000000" face="Tahoma" size="3">/**</font>
  50. <font color="#000000" face="Tahoma" size="3">  * @brief  Get If TCXO is to be present on board</font>
  51. <font color="#000000" face="Tahoma" size="3">  * @note   never remove called by MW,</font>
  52. <font color="#000000" face="Tahoma" size="3">  * @retval</font>
  53. <font color="#000000" face="Tahoma" size="3">  *  RADIO_CONF_TCXO_NOT_SUPPORTED</font>
  54. <font color="#000000" face="Tahoma" size="3">  *  RADIO_CONF_TCXO_SUPPORTED</font>
  55. <font color="#000000" face="Tahoma" size="3">  */</font>
  56. <font color="#000000" face="Tahoma" size="3">int32_t BSP_RADIO_IsTCXO(void)</font>
  57. <font color="#000000" face="Tahoma" size="3">{</font>
  58. <font color="#000000" face="Tahoma" size="3">  //return RADIO_CONF_TCXO_SUPPORTED;</font>
  59. <font color="#000000" face="Tahoma" size="3">        return RADIO_CONF_TCXO_NOT_SUPPORTED</font>
  60. <font color="#000000" face="Tahoma" size="3">}</font>
  61. <font color="#000000" face="Tahoma" size="3">由于亿佰特的E77模块使用的是无源晶振,所以需要调整晶振负载电容以保证晶振精度</font>
  62. <font color="#000000" face="Tahoma" size="3">(这里不调整也可,因为是两个模块互通,但考虑后面lorawan工程还是调整为好),采用</font>
  63. <font color="#000000" face="Tahoma" size="3">模块厂商推荐值0x0B</font>
  64. <font color="#000000" face="Tahoma" size="3">//#define XTAL_DEFAULT_CAP_VALUE      ( 0x20UL )</font>
  65. <font color="#000000" face="Tahoma" size="3">#define XTAL_DEFAULT_CAP_VALUE      ( 0x0BUL )</font>
复制代码

2、修改subghz_phy_app.c文件,CubeMx刚生成工程是没有应用程序的。我们只需要从STM32Cube_FW_WL_V1.2.0软件包中去找到对应的工程文件然后修改,修改后的subghz_phy_appp.c如下。

  1. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN Header */</font>
  2. <font color="#000000" face="Tahoma" size="3">/**</font>
  3. <font color="#000000" face="Tahoma" size="3">  ******************************************************************************</font>
  4. <font color="#000000" face="Tahoma" size="3">  * @file    subghz_phy_app.c</font>
  5. <font color="#000000" face="Tahoma" size="3">  * @author  MCD Application Team</font>
  6. <font color="#000000" face="Tahoma" size="3">  * @brief   Application of the SubGHz_Phy Middleware</font>
  7. <font color="#000000" face="Tahoma" size="3">  ******************************************************************************</font>
  8. <font color="#000000" face="Tahoma" size="3">  * @attention</font>
  9. <font color="#000000" face="Tahoma" size="3">  *</font>
  10. <font color="#000000" face="Tahoma" size="3">  * Copyright (c) 2022 STMicroelectronics.</font>
  11. <font color="#000000" face="Tahoma" size="3">  * All rights reserved.</font>
  12. <font color="#000000" face="Tahoma" size="3">  *</font>
  13. <font color="#000000" face="Tahoma" size="3">  * This software is licensed under terms that can be found in the LICENSE file</font>
  14. <font color="#000000" face="Tahoma" size="3">  * in the root directory of this software component.</font>
  15. <font color="#000000" face="Tahoma" size="3">  * If no LICENSE file comes with this software, it is provided AS-IS.</font>
  16. <font color="#000000" face="Tahoma" size="3">  *</font>
  17. <font color="#000000" face="Tahoma" size="3">  ******************************************************************************</font>
  18. <font color="#000000" face="Tahoma" size="3">  */</font>
  19. <font color="#000000" face="Tahoma" size="3">/* USER CODE END Header */</font>

  20. <font color="#000000" face="Tahoma" size="3">/* Includes ------------------------------------------------------------------*/</font>
  21. <font color="#000000" face="Tahoma" size="3">#include "platform.h"</font>
  22. <font color="#000000" face="Tahoma" size="3">#include "sys_app.h"</font>
  23. <font color="#000000" face="Tahoma" size="3">#include "subghz_phy_app.h"</font>
  24. <font color="#000000" face="Tahoma" size="3">#include "radio.h"</font>

  25. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN Includes */</font>
  26. <font color="#000000" face="Tahoma" size="3">#include "stm32_timer.h"</font>
  27. <font color="#000000" face="Tahoma" size="3">#include "stm32_seq.h"</font>
  28. <font color="#000000" face="Tahoma" size="3">#include "utilities_def.h"</font>
  29. <font color="#000000" face="Tahoma" size="3">#include "app_version.h"</font>
  30. <font color="#000000" face="Tahoma" size="3">#include "subghz_phy_version.h"</font>
  31. <font color="#000000" face="Tahoma" size="3">/* USER CODE END Includes */</font>

  32. <font color="#000000" face="Tahoma" size="3">/* External variables ---------------------------------------------------------*/</font>
  33. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN EV */</font>

  34. <font color="#000000" face="Tahoma" size="3">/* USER CODE END EV */</font>

  35. <font color="#000000" face="Tahoma" size="3">/* Private typedef -----------------------------------------------------------*/</font>

  36. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PTD */</font>
  37. <font color="#000000" face="Tahoma" size="3">typedef enum</font>
  38. <font color="#000000" face="Tahoma" size="3">{</font>
  39. <font color="#000000" face="Tahoma" size="3">  RX,</font>
  40. <font color="#000000" face="Tahoma" size="3">  RX_TIMEOUT,</font>
  41. <font color="#000000" face="Tahoma" size="3">  RX_ERROR,</font>
  42. <font color="#000000" face="Tahoma" size="3">  TX,</font>
  43. <font color="#000000" face="Tahoma" size="3">  TX_TIMEOUT,</font>
  44. <font color="#000000" face="Tahoma" size="3">} States_t;</font>
  45. <font color="#000000" face="Tahoma" size="3">/* USER CODE END PTD */</font>

  46. <font color="#000000" face="Tahoma" size="3">/* Private define ------------------------------------------------------------*/</font>
  47. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PD */</font>
  48. <font color="#000000" face="Tahoma" size="3">/* Configurations */</font>
  49. <font color="#000000" face="Tahoma" size="3">/*Timeout*/</font>
  50. <font color="#000000" face="Tahoma" size="3">#define RX_TIMEOUT_VALUE              3000</font>
  51. <font color="#000000" face="Tahoma" size="3">#define TX_TIMEOUT_VALUE              3000</font>
  52. <font color="#000000" face="Tahoma" size="3">/* PING string*/</font>
  53. <font color="#000000" face="Tahoma" size="3">#define PING "PING"</font>
  54. <font color="#000000" face="Tahoma" size="3">/* PONG string*/</font>
  55. <font color="#000000" face="Tahoma" size="3">#define PONG "PONG"</font>
  56. <font color="#000000" face="Tahoma" size="3">/*Size of the payload to be sent*/</font>
  57. <font color="#000000" face="Tahoma" size="3">/* Size must be greater of equal the PING and PONG*/</font>
  58. <font color="#000000" face="Tahoma" size="3">#define MAX_APP_BUFFER_SIZE          255</font>
  59. <font color="#000000" face="Tahoma" size="3">#if (PAYLOAD_LEN > MAX_APP_BUFFER_SIZE)</font>
  60. <font color="#000000" face="Tahoma" size="3">#error PAYLOAD_LEN must be less or equal than MAX_APP_BUFFER_SIZE</font>
  61. <font color="#000000" face="Tahoma" size="3">#endif /* (PAYLOAD_LEN > MAX_APP_BUFFER_SIZE) */</font>
  62. <font color="#000000" face="Tahoma" size="3">/* wait for remote to be in Rx, before sending a Tx frame*/</font>
  63. <font color="#000000" face="Tahoma" size="3">#define RX_TIME_MARGIN                200</font>
  64. <font color="#000000" face="Tahoma" size="3">/* Afc bandwidth in Hz */</font>
  65. <font color="#000000" face="Tahoma" size="3">#define FSK_AFC_BANDWIDTH             83333</font>
  66. <font color="#000000" face="Tahoma" size="3">/* LED blink Period*/</font>
  67. <font color="#000000" face="Tahoma" size="3">#define LED_PERIOD_MS                 200</font>
  68. <font color="#000000" face="Tahoma" size="3">/* USER CODE END PD */</font>

  69. <font color="#000000" face="Tahoma" size="3">/* Private macro -------------------------------------------------------------*/</font>
  70. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PM */</font>

  71. <font color="#000000" face="Tahoma" size="3">/* USER CODE END PM */</font>

  72. <font color="#000000" face="Tahoma" size="3">/* Private variables ---------------------------------------------------------*/</font>
  73. <font color="#000000" face="Tahoma" size="3">/* Radio events function pointer */</font>
  74. <font color="#000000" face="Tahoma" size="3">static RadioEvents_t RadioEvents;</font>
  75. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PV */</font>
  76. <font color="#000000" face="Tahoma" size="3">/*Ping Pong FSM states */</font>
  77. <font color="#000000" face="Tahoma" size="3">static States_t State = RX;</font>
  78. <font color="#000000" face="Tahoma" size="3">/* App Rx Buffer*/</font>
  79. <font color="#000000" face="Tahoma" size="3">static uint8_t BufferRx[MAX_APP_BUFFER_SIZE];</font>
  80. <font color="#000000" face="Tahoma" size="3">/* App Tx Buffer*/</font>
  81. <font color="#000000" face="Tahoma" size="3">static uint8_t BufferTx[MAX_APP_BUFFER_SIZE];</font>
  82. <font color="#000000" face="Tahoma" size="3">/* Last  Received Buffer Size*/</font>
  83. <font color="#000000" face="Tahoma" size="3">uint16_t RxBufferSize = 0;</font>
  84. <font color="#000000" face="Tahoma" size="3">/* Last  Received packer Rssi*/</font>
  85. <font color="#000000" face="Tahoma" size="3">int8_t RssiValue = 0;</font>
  86. <font color="#000000" face="Tahoma" size="3">/* Last  Received packer SNR (in Lora modulation)*/</font>
  87. <font color="#000000" face="Tahoma" size="3">int8_t SnrValue = 0;</font>
  88. <font color="#000000" face="Tahoma" size="3">/* Led Timers objects*/</font>
  89. <font color="#000000" face="Tahoma" size="3">static UTIL_TIMER_Object_t timerLed;</font>
  90. <font color="#000000" face="Tahoma" size="3">/* device state. Master: true, Slave: false*/</font>
  91. <font color="#000000" face="Tahoma" size="3">bool isMaster = true;</font>
  92. <font color="#000000" face="Tahoma" size="3">/* random delay to make sure 2 devices will sync*/</font>
  93. <font color="#000000" face="Tahoma" size="3">/* the closest the random delays are, the longer it will</font>
  94. <font color="#000000" face="Tahoma" size="3">   take for the devices to sync when started simultaneously*/</font>
  95. <font color="#000000" face="Tahoma" size="3">static int32_t random_delay;</font>
  96. <font color="#000000" face="Tahoma" size="3">/* USER CODE END PV */</font>

  97. <font color="#000000" face="Tahoma" size="3">/* Private function prototypes -----------------------------------------------*/</font>
  98. <font color="#000000" face="Tahoma" size="3">/*!</font>
  99. <font color="#000000" face="Tahoma" size="3"> * @brief Function to be executed on Radio Tx Done event</font>
  100. <font color="#000000" face="Tahoma" size="3"> */</font>
  101. <font color="#000000" face="Tahoma" size="3">static void OnTxDone(void);</font>

  102. <font color="#000000" face="Tahoma" size="3">/**</font>
  103. <font color="#000000" face="Tahoma" size="3">  * @brief Function to be executed on Radio Rx Done event</font>
  104. <font color="#000000" face="Tahoma" size="3">  * @param  payload ptr of buffer received</font>
  105. <font color="#000000" face="Tahoma" size="3">  * @param  size buffer size</font>
  106. <font color="#000000" face="Tahoma" size="3">  * @param  rssi</font>
  107. <font color="#000000" face="Tahoma" size="3">  * @param  LoraSnr_FskCfo</font>
  108. <font color="#000000" face="Tahoma" size="3">  */</font>
  109. <font color="#000000" face="Tahoma" size="3">static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t LoraSnr_FskCfo);</font>

  110. <font color="#000000" face="Tahoma" size="3">/**</font>
  111. <font color="#000000" face="Tahoma" size="3">  * @brief Function executed on Radio Tx Timeout event</font>
  112. <font color="#000000" face="Tahoma" size="3">  */</font>
  113. <font color="#000000" face="Tahoma" size="3">static void OnTxTimeout(void);</font>

  114. <font color="#000000" face="Tahoma" size="3">/**</font>
  115. <font color="#000000" face="Tahoma" size="3">  * @brief Function executed on Radio Rx Timeout event</font>
  116. <font color="#000000" face="Tahoma" size="3">  */</font>
  117. <font color="#000000" face="Tahoma" size="3">static void OnRxTimeout(void);</font>

  118. <font color="#000000" face="Tahoma" size="3">/**</font>
  119. <font color="#000000" face="Tahoma" size="3">  * @brief Function executed on Radio Rx Error event</font>
  120. <font color="#000000" face="Tahoma" size="3">  */</font>
  121. <font color="#000000" face="Tahoma" size="3">static void OnRxError(void);</font>

  122. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PFP */</font>
  123. <font color="#000000" face="Tahoma" size="3">/**</font>
  124. <font color="#000000" face="Tahoma" size="3">  * @brief  Function executed on when led timer elapses</font>
  125. <font color="#000000" face="Tahoma" size="3">  * @param  context ptr of LED context</font>
  126. <font color="#000000" face="Tahoma" size="3">  */</font>
  127. <font color="#000000" face="Tahoma" size="3">static void OnledEvent(void *context);</font>

  128. <font color="#000000" face="Tahoma" size="3">/**</font>
  129. <font color="#000000" face="Tahoma" size="3">  * @brief PingPong state machine implementation</font>
  130. <font color="#000000" face="Tahoma" size="3">  */</font>
  131. <font color="#000000" face="Tahoma" size="3">static void PingPong_Process(void);</font>
  132. <font color="#000000" face="Tahoma" size="3">/* USER CODE END PFP */</font>

  133. <font color="#000000" face="Tahoma" size="3">/* Exported functions ---------------------------------------------------------*/</font>
  134. <font color="#000000" face="Tahoma" size="3">void SubghzApp_Init(void)</font>
  135. <font color="#000000" face="Tahoma" size="3">{</font>
  136. <font color="#000000" face="Tahoma" size="3">  /* USER CODE BEGIN SubghzApp_Init_1 */</font>
  137. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "\n\rPING PONG\n\r");</font>
  138. <font color="#000000" face="Tahoma" size="3">  /* Get SubGHY_Phy APP version*/</font>
  139. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "APPLICATION_VERSION: V%X.%X.%X\r\n",</font>
  140. <font color="#000000" face="Tahoma" size="3">          (uint8_t)(APP_VERSION_MAIN),</font>
  141. <font color="#000000" face="Tahoma" size="3">          (uint8_t)(APP_VERSION_SUB1),</font>
  142. <font color="#000000" face="Tahoma" size="3">          (uint8_t)(APP_VERSION_SUB2));</font>

  143. <font color="#000000" face="Tahoma" size="3">  /* Get MW SubGhz_Phy info */</font>
  144. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "MW_RADIO_VERSION:    V%X.%X.%X\r\n",</font>
  145. <font color="#000000" face="Tahoma" size="3">          (uint8_t)(SUBGHZ_PHY_VERSION_MAIN),</font>
  146. <font color="#000000" face="Tahoma" size="3">          (uint8_t)(SUBGHZ_PHY_VERSION_SUB1),</font>
  147. <font color="#000000" face="Tahoma" size="3">          (uint8_t)(SUBGHZ_PHY_VERSION_SUB2));</font>

  148. <font color="#000000" face="Tahoma" size="3">  /* Led Timers*/</font>
  149. <font color="#000000" face="Tahoma" size="3">  UTIL_TIMER_Create(&timerLed, LED_PERIOD_MS, UTIL_TIMER_ONESHOT, OnledEvent, NULL);</font>
  150. <font color="#000000" face="Tahoma" size="3">  UTIL_TIMER_Start(&timerLed);</font>
  151. <font color="#000000" face="Tahoma" size="3">  /* USER CODE END SubghzApp_Init_1 */</font>

  152. <font color="#000000" face="Tahoma" size="3">  /* Radio initialization */</font>
  153. <font color="#000000" face="Tahoma" size="3">  RadioEvents.TxDone = OnTxDone;</font>
  154. <font color="#000000" face="Tahoma" size="3">  RadioEvents.RxDone = OnRxDone;</font>
  155. <font color="#000000" face="Tahoma" size="3">  RadioEvents.TxTimeout = OnTxTimeout;</font>
  156. <font color="#000000" face="Tahoma" size="3">  RadioEvents.RxTimeout = OnRxTimeout;</font>
  157. <font color="#000000" face="Tahoma" size="3">  RadioEvents.RxError = OnRxError;</font>

  158. <font color="#000000" face="Tahoma" size="3">  Radio.Init(&RadioEvents);</font>

  159. <font color="#000000" face="Tahoma" size="3">  /* USER CODE BEGIN SubghzApp_Init_2 */</font>
  160. <font color="#000000" face="Tahoma" size="3">/*calculate random delay for synchronization*/</font>
  161. <font color="#000000" face="Tahoma" size="3">  random_delay = (Radio.Random()) >> 22; /*10bits random e.g. from 0 to 1023 ms*/</font>

  162. <font color="#000000" face="Tahoma" size="3">  /* Radio Set frequency */</font>
  163. <font color="#000000" face="Tahoma" size="3">  Radio.SetChannel(RF_FREQUENCY);</font>

  164. <font color="#000000" face="Tahoma" size="3">  /* Radio configuration */</font>
  165. <font color="#000000" face="Tahoma" size="3">#if ((USE_MODEM_LORA == 1) && (USE_MODEM_FSK == 0))</font>
  166. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "---------------\n\r");</font>
  167. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "LORA_MODULATION\n\r");</font>
  168. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "LORA_BW=%d kHz\n\r", (1 << LORA_BANDWIDTH) * 125);</font>
  169. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "LORA_SF=%d\n\r", LORA_SPREADING_FACTOR);</font>

  170. <font color="#000000" face="Tahoma" size="3">  Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,</font>
  171. <font color="#000000" face="Tahoma" size="3">                    LORA_SPREADING_FACTOR, LORA_CODINGRATE,</font>
  172. <font color="#000000" face="Tahoma" size="3">                    LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,</font>
  173. <font color="#000000" face="Tahoma" size="3">                    true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);</font>

  174. <font color="#000000" face="Tahoma" size="3">  Radio.SetRxConfig(MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,</font>
  175. <font color="#000000" face="Tahoma" size="3">                    LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,</font>
  176. <font color="#000000" face="Tahoma" size="3">                    LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,</font>
  177. <font color="#000000" face="Tahoma" size="3">                    0, true, 0, 0, LORA_IQ_INVERSION_ON, true);</font>

  178. <font color="#000000" face="Tahoma" size="3">  Radio.SetMaxPayloadLength(MODEM_LORA, MAX_APP_BUFFER_SIZE);</font>

  179. <font color="#000000" face="Tahoma" size="3">#elif ((USE_MODEM_LORA == 0) && (USE_MODEM_FSK == 1))</font>
  180. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "---------------\n\r");</font>
  181. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "FSK_MODULATION\n\r");</font>
  182. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "FSK_BW=%d Hz\n\r", FSK_BANDWIDTH);</font>
  183. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_M, "FSK_DR=%d bits/s\n\r", FSK_DATARATE);</font>

  184. <font color="#000000" face="Tahoma" size="3">  Radio.SetTxConfig(MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,</font>
  185. <font color="#000000" face="Tahoma" size="3">                    FSK_DATARATE, 0,</font>
  186. <font color="#000000" face="Tahoma" size="3">                    FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,</font>
  187. <font color="#000000" face="Tahoma" size="3">                    true, 0, 0, 0, TX_TIMEOUT_VALUE);</font>

  188. <font color="#000000" face="Tahoma" size="3">  Radio.SetRxConfig(MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,</font>
  189. <font color="#000000" face="Tahoma" size="3">                    0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,</font>
  190. <font color="#000000" face="Tahoma" size="3">                    0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, true,</font>
  191. <font color="#000000" face="Tahoma" size="3">                    0, 0, false, true);</font>

  192. <font color="#000000" face="Tahoma" size="3">  Radio.SetMaxPayloadLength(MODEM_FSK, MAX_APP_BUFFER_SIZE);</font>

  193. <font color="#000000" face="Tahoma" size="3">#else</font>
  194. <font color="#000000" face="Tahoma" size="3">#error "Please define a modulation in the subghz_phy_app.h file."</font>
  195. <font color="#000000" face="Tahoma" size="3">#endif /* USE_MODEM_LORA | USE_MODEM_FSK */</font>

  196. <font color="#000000" face="Tahoma" size="3">  /*fills tx buffer*/</font>
  197. <font color="#000000" face="Tahoma" size="3">  memset(BufferTx, 0x0, MAX_APP_BUFFER_SIZE);</font>

  198. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_ON, VLEVEL_L, "rand=%d\n\r", random_delay);</font>
  199. <font color="#000000" face="Tahoma" size="3">  /*starts reception*/</font>
  200. <font color="#000000" face="Tahoma" size="3">  Radio.Rx(RX_TIMEOUT_VALUE + random_delay);</font>

  201. <font color="#000000" face="Tahoma" size="3">  /*register task to to be run in while(1) after Radio IT*/</font>
  202. <font color="#000000" face="Tahoma" size="3">  UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), UTIL_SEQ_RFU, PingPong_Process);</font>
  203. <font color="#000000" face="Tahoma" size="3">  /* USER CODE END SubghzApp_Init_2 */</font>
  204. <font color="#000000" face="Tahoma" size="3">}</font>

  205. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN EF */</font>

  206. <font color="#000000" face="Tahoma" size="3">/* USER CODE END EF */</font>

  207. <font color="#000000" face="Tahoma" size="3">/* Private functions ---------------------------------------------------------*/</font>
  208. <font color="#000000" face="Tahoma" size="3">static void OnTxDone(void)</font>
  209. <font color="#000000" face="Tahoma" size="3">{</font>
  210. <font color="#000000" face="Tahoma" size="3">  /* USER CODE BEGIN OnTxDone */</font>
  211. <font color="#000000" face="Tahoma" size="3">        APP_LOG(TS_ON, VLEVEL_L, "OnTxDone\n\r");</font>
  212. <font color="#000000" face="Tahoma" size="3">  /* Update the State of the FSM*/</font>
  213. <font color="#000000" face="Tahoma" size="3">  State = TX;</font>
  214. <font color="#000000" face="Tahoma" size="3">  /* Run PingPong process in background*/</font>
  215. <font color="#000000" face="Tahoma" size="3">  UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
  216. <font color="#000000" face="Tahoma" size="3">  /* USER CODE END OnTxDone */</font>
  217. <font color="#000000" face="Tahoma" size="3">}</font>

  218. <font color="#000000" face="Tahoma" size="3">static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t LoraSnr_FskCfo)</font>
  219. <font color="#000000" face="Tahoma" size="3">{</font>
  220. <font color="#000000" face="Tahoma" size="3">  /* USER CODE BEGIN OnRxDone */</font>
  221. <font color="#000000" face="Tahoma" size="3">        APP_LOG(TS_ON, VLEVEL_L, "OnRxDone\n\r");</font>
  222. <font color="#000000" face="Tahoma" size="3">#if ((USE_MODEM_LORA == 1) && (USE_MODEM_FSK == 0))</font>
  223. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_ON, VLEVEL_L, "RssiValue=%d dBm, SnrValue=%ddB\n\r", rssi, LoraSnr_FskCfo);</font>
  224. <font color="#000000" face="Tahoma" size="3">  /* Record payload Signal to noise ratio in Lora*/</font>
  225. <font color="#000000" face="Tahoma" size="3">  SnrValue = LoraSnr_FskCfo;</font>
  226. <font color="#000000" face="Tahoma" size="3">#endif /* USE_MODEM_LORA | USE_MODEM_FSK */</font>
  227. <font color="#000000" face="Tahoma" size="3">#if ((USE_MODEM_LORA == 0) && (USE_MODEM_FSK == 1))</font>
  228. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_ON, VLEVEL_L, "RssiValue=%d dBm, Cfo=%dkHz\n\r", rssi, LoraSnr_FskCfo);</font>
  229. <font color="#000000" face="Tahoma" size="3">  SnrValue = 0; /*not applicable in GFSK*/</font>
  230. <font color="#000000" face="Tahoma" size="3">#endif /* USE_MODEM_LORA | USE_MODEM_FSK */</font>
  231. <font color="#000000" face="Tahoma" size="3">  /* Update the State of the FSM*/</font>
  232. <font color="#000000" face="Tahoma" size="3">  State = RX;</font>
  233. <font color="#000000" face="Tahoma" size="3">  /* Clear BufferRx*/</font>
  234. <font color="#000000" face="Tahoma" size="3">  memset(BufferRx, 0, MAX_APP_BUFFER_SIZE);</font>
  235. <font color="#000000" face="Tahoma" size="3">  /* Record payload size*/</font>
  236. <font color="#000000" face="Tahoma" size="3">  RxBufferSize = size;</font>
  237. <font color="#000000" face="Tahoma" size="3">  if (RxBufferSize <= MAX_APP_BUFFER_SIZE)</font>
  238. <font color="#000000" face="Tahoma" size="3">  {</font>
  239. <font color="#000000" face="Tahoma" size="3">    memcpy(BufferRx, payload, RxBufferSize);</font>
  240. <font color="#000000" face="Tahoma" size="3">  }</font>
  241. <font color="#000000" face="Tahoma" size="3">  /* Record Received Signal Strength*/</font>
  242. <font color="#000000" face="Tahoma" size="3">  RssiValue = rssi;</font>
  243. <font color="#000000" face="Tahoma" size="3">  /* Record payload content*/</font>
  244. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_ON, VLEVEL_H, "payload. size=%d \n\r", size);</font>
  245. <font color="#000000" face="Tahoma" size="3">  for (int i = 0; i < PAYLOAD_LEN; i++)</font>
  246. <font color="#000000" face="Tahoma" size="3">  {</font>
  247. <font color="#000000" face="Tahoma" size="3">    APP_LOG(TS_OFF, VLEVEL_H, "%02X", BufferRx);</font>
  248. <font color="#000000" face="Tahoma" size="3">    if (i % 16 == 15)</font>
  249. <font color="#000000" face="Tahoma" size="3">    {</font>
  250. <font color="#000000" face="Tahoma" size="3">      APP_LOG(TS_OFF, VLEVEL_H, "\n\r");</font>
  251. <font color="#000000" face="Tahoma" size="3">    }</font>
  252. <font color="#000000" face="Tahoma" size="3">  }</font>
  253. <font color="#000000" face="Tahoma" size="3">  APP_LOG(TS_OFF, VLEVEL_H, "\n\r");</font>
  254. <font color="#000000" face="Tahoma" size="3">  /* Run PingPong process in background*/</font>
  255. <font color="#000000" face="Tahoma" size="3">  UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
  256. <font color="#000000" face="Tahoma" size="3">  /* USER CODE END OnRxDone */</font>
  257. <font color="#000000" face="Tahoma" size="3">}</font>

  258. <font color="#000000" face="Tahoma" size="3">static void OnTxTimeout(void)</font>
  259. <font color="#000000" face="Tahoma" size="3">{</font>
  260. <font color="#000000" face="Tahoma" size="3">  /* USER CODE BEGIN OnTxTimeout */</font>
  261. <font color="#000000" face="Tahoma" size="3">        APP_LOG(TS_ON, VLEVEL_L, "OnTxTimeout\n\r");</font>
  262. <font color="#000000" face="Tahoma" size="3">  /* Update the State of the FSM*/</font>
  263. <font color="#000000" face="Tahoma" size="3">  State = TX_TIMEOUT;</font>
  264. <font color="#000000" face="Tahoma" size="3">  /* Run PingPong process in background*/</font>
  265. <font color="#000000" face="Tahoma" size="3">  UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
  266. <font color="#000000" face="Tahoma" size="3">  /* USER CODE END OnTxTimeout */</font>
  267. <font color="#000000" face="Tahoma" size="3">}</font>

  268. <font color="#000000" face="Tahoma" size="3">static void OnRxTimeout(void)</font>
  269. <font color="#000000" face="Tahoma" size="3">{</font>
  270. <font color="#000000" face="Tahoma" size="3">  /* USER CODE BEGIN OnRxTimeout */</font>
  271. <font color="#000000" face="Tahoma" size="3">         APP_LOG(TS_ON, VLEVEL_L, "OnRxTimeout\n\r");</font>
  272. <font color="#000000" face="Tahoma" size="3">  /* Update the State of the FSM*/</font>
  273. <font color="#000000" face="Tahoma" size="3">  State = RX_TIMEOUT;</font>
  274. <font color="#000000" face="Tahoma" size="3">  /* Run PingPong process in background*/</font>
  275. <font color="#000000" face="Tahoma" size="3">  UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
  276. <font color="#000000" face="Tahoma" size="3">  /* USER CODE END OnRxTimeout */</font>
  277. <font color="#000000" face="Tahoma" size="3">}</font>

  278. <font color="#000000" face="Tahoma" size="3">static void OnRxError(void)</font>
  279. <font color="#000000" face="Tahoma" size="3">{</font>
  280. <font color="#000000" face="Tahoma" size="3">  /* USER CODE BEGIN OnRxError */</font>
  281. <font color="#000000" face="Tahoma" size="3">        APP_LOG(TS_ON, VLEVEL_L, "OnRxError\n\r");</font>
  282. <font color="#000000" face="Tahoma" size="3">  /* Update the State of the FSM*/</font>
  283. <font color="#000000" face="Tahoma" size="3">  State = RX_ERROR;</font>
  284. <font color="#000000" face="Tahoma" size="3">  /* Run PingPong process in background*/</font>
  285. <font color="#000000" face="Tahoma" size="3">  UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
  286. <font color="#000000" face="Tahoma" size="3">  /* USER CODE END OnRxError */</font>
  287. <font color="#000000" face="Tahoma" size="3">}</font>

  288. <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PrFD */</font>
  289. <font color="#000000" face="Tahoma" size="3">static void PingPong_Process(void)</font>
  290. <font color="#000000" face="Tahoma" size="3">{</font>
  291. <font color="#000000" face="Tahoma" size="3">  Radio.Sleep();</font>

  292. <font color="#000000" face="Tahoma" size="3">  switch (State)</font>
  293. <font color="#000000" face="Tahoma" size="3">  {</font>
  294. <font color="#000000" face="Tahoma" size="3">    case RX:</font>

  295. <font color="#000000" face="Tahoma" size="3">      if (isMaster == true)</font>
  296. <font color="#000000" face="Tahoma" size="3">      {</font>
  297. <font color="#000000" face="Tahoma" size="3">        if (RxBufferSize > 0)</font>
  298. <font color="#000000" face="Tahoma" size="3">        {</font>
  299. <font color="#000000" face="Tahoma" size="3">          if (strncmp((const char *)BufferRx, PONG, sizeof(PONG) - 1) == 0)</font>
  300. <font color="#000000" face="Tahoma" size="3">          {</font>
  301. <font color="#000000" face="Tahoma" size="3">            UTIL_TIMER_Stop(&timerLed);</font>
  302. <font color="#000000" face="Tahoma" size="3">            /* switch off green led */</font>
  303. <font color="#000000" face="Tahoma" size="3">            HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); /* LED_GREEN */</font>
  304. <font color="#000000" face="Tahoma" size="3">            /* master toggles red led */</font>
  305. <font color="#000000" face="Tahoma" size="3">            HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */</font>
  306. <font color="#000000" face="Tahoma" size="3">            /* Add delay between RX and TX */</font>
  307. <font color="#000000" face="Tahoma" size="3">            HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN);</font>
  308. <font color="#000000" face="Tahoma" size="3">            /* master sends PING*/</font>
  309. <font color="#000000" face="Tahoma" size="3">            APP_LOG(TS_ON, VLEVEL_L, "..."</font>
  310. <font color="#000000" face="Tahoma" size="3">                    "PING"</font>
  311. <font color="#000000" face="Tahoma" size="3">                    "\n\r");</font>
  312. <font color="#000000" face="Tahoma" size="3">            APP_LOG(TS_ON, VLEVEL_L, "Master Tx start\n\r");</font>
  313. <font color="#000000" face="Tahoma" size="3">            memcpy(BufferTx, PING, sizeof(PING) - 1);</font>
  314. <font color="#000000" face="Tahoma" size="3">            Radio.Send(BufferTx, PAYLOAD_LEN);</font>
  315. <font color="#000000" face="Tahoma" size="3">          }</font>
  316. <font color="#000000" face="Tahoma" size="3">          else if (strncmp((const char *)BufferRx, PING, sizeof(PING) - 1) == 0)</font>
  317. <font color="#000000" face="Tahoma" size="3">          {</font>
  318. <font color="#000000" face="Tahoma" size="3">            /* A master already exists then become a slave */</font>
  319. <font color="#000000" face="Tahoma" size="3">            isMaster = false;</font>
  320. <font color="#000000" face="Tahoma" size="3">            APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");</font>
  321. <font color="#000000" face="Tahoma" size="3">            Radio.Rx(RX_TIMEOUT_VALUE);</font>
  322. <font color="#000000" face="Tahoma" size="3">          }</font>
  323. <font color="#000000" face="Tahoma" size="3">          else /* valid reception but neither a PING or a PONG message */</font>
  324. <font color="#000000" face="Tahoma" size="3">          {</font>
  325. <font color="#000000" face="Tahoma" size="3">            /* Set device as master and start again */</font>
  326. <font color="#000000" face="Tahoma" size="3">            isMaster = true;</font>
  327. <font color="#000000" face="Tahoma" size="3">            APP_LOG(TS_ON, VLEVEL_L, "Master Rx start\n\r");</font>
  328. <font color="#000000" face="Tahoma" size="3">            Radio.Rx(RX_TIMEOUT_VALUE);</font>
  329. <font color="#000000" face="Tahoma" size="3">          }</font>
  330. <font color="#000000" face="Tahoma" size="3">        }</font>
  331. <font color="#000000" face="Tahoma" size="3">      }</font>
  332. <font color="#000000" face="Tahoma" size="3">      else</font>
  333. <font color="#000000" face="Tahoma" size="3">      {</font>
  334. <font color="#000000" face="Tahoma" size="3">        if (RxBufferSize > 0)</font>
  335. <font color="#000000" face="Tahoma" size="3">        {</font>
  336. <font color="#000000" face="Tahoma" size="3">          if (strncmp((const char *)BufferRx, PING, sizeof(PING) - 1) == 0)</font>
  337. <font color="#000000" face="Tahoma" size="3">          {</font>
  338. <font color="#000000" face="Tahoma" size="3">            UTIL_TIMER_Stop(&timerLed);</font>
  339. <font color="#000000" face="Tahoma" size="3">            /* switch off red led */</font>
  340. <font color="#000000" face="Tahoma" size="3">            HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */</font>
  341. <font color="#000000" face="Tahoma" size="3">            /* slave toggles green led */</font>
  342. <font color="#000000" face="Tahoma" size="3">            HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* LED_GREEN */</font>
  343. <font color="#000000" face="Tahoma" size="3">            /* Add delay between RX and TX */</font>
  344. <font color="#000000" face="Tahoma" size="3">            HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN);</font>
  345. <font color="#000000" face="Tahoma" size="3">            /*slave sends PONG*/</font>
  346. <font color="#000000" face="Tahoma" size="3">            APP_LOG(TS_ON, VLEVEL_L, "..."</font>
  347. <font color="#000000" face="Tahoma" size="3">                    "PONG"</font>
  348. <font color="#000000" face="Tahoma" size="3">                    "\n\r");</font>
  349. <font color="#000000" face="Tahoma" size="3">            APP_LOG(TS_ON, VLEVEL_L, "Slave  Tx start\n\r");</font>
  350. <font color="#000000" face="Tahoma" size="3">            memcpy(BufferTx, PONG, sizeof(PONG) - 1);</font>
  351. <font color="#000000" face="Tahoma" size="3">            Radio.Send(BufferTx, PAYLOAD_LEN);</font>
  352. <font color="#000000" face="Tahoma" size="3">          }</font>
  353. <font color="#000000" face="Tahoma" size="3">          else /* valid reception but not a PING as expected */</font>
  354. <font color="#000000" face="Tahoma" size="3">          {</font>
  355. <font color="#000000" face="Tahoma" size="3">            /* Set device as master and start again */</font>
  356. <font color="#000000" face="Tahoma" size="3">            isMaster = true;</font>
  357. <font color="#000000" face="Tahoma" size="3">            APP_LOG(TS_ON, VLEVEL_L, "Master Rx start\n\r");</font>
  358. <font color="#000000" face="Tahoma" size="3">            Radio.Rx(RX_TIMEOUT_VALUE);</font>
  359. <font color="#000000" face="Tahoma" size="3">          }</font>
  360. <font color="#000000" face="Tahoma" size="3">        }</font>
  361. <font color="#000000" face="Tahoma" size="3">      }</font>
  362. <font color="#000000" face="Tahoma" size="3">      break;</font>
  363. <font color="#000000" face="Tahoma" size="3">    case TX:</font>
  364. <font color="#000000" face="Tahoma" size="3">      APP_LOG(TS_ON, VLEVEL_L, "Rx start\n\r");</font>
  365. <font color="#000000" face="Tahoma" size="3">      Radio.Rx(RX_TIMEOUT_VALUE);</font>
  366. <font color="#000000" face="Tahoma" size="3">      break;</font>
  367. <font color="#000000" face="Tahoma" size="3">    case RX_TIMEOUT:</font>
  368. <font color="#000000" face="Tahoma" size="3">    case RX_ERROR:</font>
  369. <font color="#000000" face="Tahoma" size="3">      if (isMaster == true)</font>
  370. <font color="#000000" face="Tahoma" size="3">      {</font>
  371. <font color="#000000" face="Tahoma" size="3">        /* Send the next PING frame */</font>
  372. <font color="#000000" face="Tahoma" size="3">        /* Add delay between RX and TX*/</font>
  373. <font color="#000000" face="Tahoma" size="3">        /* add random_delay to force sync between boards after some trials*/</font>
  374. <font color="#000000" face="Tahoma" size="3">        HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN + random_delay);</font>
  375. <font color="#000000" face="Tahoma" size="3">        APP_LOG(TS_ON, VLEVEL_L, "Master Tx start\n\r");</font>
  376. <font color="#000000" face="Tahoma" size="3">        /* master sends PING*/</font>
  377. <font color="#000000" face="Tahoma" size="3">        memcpy(BufferTx, PING, sizeof(PING) - 1);</font>
  378. <font color="#000000" face="Tahoma" size="3">        Radio.Send(BufferTx, PAYLOAD_LEN);</font>
  379. <font color="#000000" face="Tahoma" size="3">      }</font>
  380. <font color="#000000" face="Tahoma" size="3">      else</font>
  381. <font color="#000000" face="Tahoma" size="3">      {</font>
  382. <font color="#000000" face="Tahoma" size="3">        APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");</font>
  383. <font color="#000000" face="Tahoma" size="3">        Radio.Rx(RX_TIMEOUT_VALUE);</font>
  384. <font color="#000000" face="Tahoma" size="3">      }</font>
  385. <font color="#000000" face="Tahoma" size="3">      break;</font>
  386. <font color="#000000" face="Tahoma" size="3">    case TX_TIMEOUT:</font>
  387. <font color="#000000" face="Tahoma" size="3">      APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");</font>
  388. <font color="#000000" face="Tahoma" size="3">      Radio.Rx(RX_TIMEOUT_VALUE);</font>
  389. <font color="#000000" face="Tahoma" size="3">      break;</font>
  390. <font color="#000000" face="Tahoma" size="3">    default:</font>
  391. <font color="#000000" face="Tahoma" size="3">      break;</font>
  392. <font color="#000000" face="Tahoma" size="3">  }</font>
  393. <font color="#000000" face="Tahoma" size="3">}</font>

  394. <font color="#000000" face="Tahoma" size="3">static void OnledEvent(void *context)</font>
  395. <font color="#000000" face="Tahoma" size="3">{</font>
  396. <font color="#000000" face="Tahoma" size="3">  HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* LED_GREEN */</font>
  397. <font color="#000000" face="Tahoma" size="3">  HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */</font>
  398. <font color="#000000" face="Tahoma" size="3">  UTIL_TIMER_Start(&timerLed);</font>
  399. <font color="#000000" face="Tahoma" size="3">}</font>
  400. <font color="#000000" face="Tahoma" size="3">/* USER CODE END PrFD */</font>
复制代码

三、下载测试
最后烧录下载后,正常pingpong通信

————————————————
版权声明:北世安


f1a0dcf8b9d240c6badd23d0ce95a879.png
e044f5c6d6824fc8b20e93cf9e7fa05e.png
收藏 评论0 发布时间:2022-10-20 18:31

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版