简介
官方只提供了STM32WL55JC和STM32WL55JC1的相关应用demo,由于封装不通我们并不能直接使用相关程序,需要移植才能使用。本次我们移植pingpong通信demo
一、工程移植
1、打开STM32CubeMX,选择start My projext from MCU开始工程
2、在MCU/MPU处选择使用STM32WLE5CCU6
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
用户为自己实际的用户名
导入后会有些报错,是因为原来WL55JC是BGA的封装引脚要多一些,而stm32wle5ccu6没有
4、在Project Manager->Project中设置工程名和存放路径,Toolchain/IDE设置为MDK-ARM;Code Generator设置为Copy all used libraries into the project folder
5、时钟输入配置,HSE和LSE都配置为Crystal/Ceramic Resonator
6、RTC开启Alarm A并且使能中断
7、SubGHz_Phy设置如下
8、时钟树配置,RTC使用LSE
9、点击GENERATE CODE生成代码,打开keil工程然后编译会报以下错误,是由于我们没有添加BSP包
10、把下载的软件包C:\Users\用户\STM32Cube\Repository\STM32Cube_FW_WL_V1.2.0\Drivers中的BSP包拷贝到当前工程下。然后在keil中添加文件和其所在目录索引。
11、然后编译工程,0 error 0 waring
二、应用移植
1、修改BSP中关于射频开关部分的引脚定义,我们使用的亿佰特的E77模块,所以射频开关为PA6和PA7
stm32wlxx_nucleo_radio.h修改为下面这样,我们只使用了RF_SW_CTRL3_PIN、RF_SW_CTRL1_PIN 两个脚,另一个不用管。
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_PIN GPIO_PIN_6</font>
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_GPIO_PORT GPIOA</font>
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()</font>
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL3_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()</font>
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL1_PIN GPIO_PIN_7</font>
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL1_GPIO_PORT GPIOA</font>
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_CTRL1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()</font>
- <font color="#000000" face="Tahoma" size="3">#define RF_SW_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()</font>
复制代码
由于射频开关不同,射频控制逻辑也需要修改,把stm32wlxx_nucleo_radio.c中射频开关修改如下所示
- <font color="#000000" face="Tahoma" size="3">int32_t BSP_RADIO_ConfigRFSwitch(BSP_RADIO_Switch_TypeDef Config)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> switch (Config)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> case RADIO_SWITCH_OFF:</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /* Turn off switch */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET);</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET);</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET);</font>
- <font color="#000000" face="Tahoma" size="3"> break; </font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> case RADIO_SWITCH_RX:</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /*Turns On in Rx Mode the RF Switch */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_RESET);</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_SET); </font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_RESET); </font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> case RADIO_SWITCH_RFO_LP:</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /*Turns On in Tx Low Power the RF Switch */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET);</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); </font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); </font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> case RADIO_SWITCH_RFO_HP:</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /*Turns On in Tx High Power the RF Switch */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL3_GPIO_PORT, RF_SW_CTRL3_PIN, GPIO_PIN_SET);</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL1_GPIO_PORT, RF_SW_CTRL1_PIN, GPIO_PIN_RESET); </font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(RF_SW_CTRL2_GPIO_PORT, RF_SW_CTRL2_PIN, GPIO_PIN_SET); </font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> default:</font>
- <font color="#000000" face="Tahoma" size="3"> break; </font>
- <font color="#000000" face="Tahoma" size="3"> } </font>
- <font color="#000000" face="Tahoma" size="3"> return BSP_ERROR_NONE;</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">int32_t BSP_RADIO_GetTxConfig(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> //return RADIO_CONF_RFO_LP_HP;</font>
- <font color="#000000" face="Tahoma" size="3"> return RADIO_CONF_RFO_HP;</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">//</font>
- <font color="#000000" face="Tahoma" size="3">//使用无源晶振</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Get If TCXO is to be present on board</font>
- <font color="#000000" face="Tahoma" size="3"> * @note never remove called by MW,</font>
- <font color="#000000" face="Tahoma" size="3"> * @retval</font>
- <font color="#000000" face="Tahoma" size="3"> * RADIO_CONF_TCXO_NOT_SUPPORTED</font>
- <font color="#000000" face="Tahoma" size="3"> * RADIO_CONF_TCXO_SUPPORTED</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">int32_t BSP_RADIO_IsTCXO(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> //return RADIO_CONF_TCXO_SUPPORTED;</font>
- <font color="#000000" face="Tahoma" size="3"> return RADIO_CONF_TCXO_NOT_SUPPORTED</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">由于亿佰特的E77模块使用的是无源晶振,所以需要调整晶振负载电容以保证晶振精度</font>
- <font color="#000000" face="Tahoma" size="3">(这里不调整也可,因为是两个模块互通,但考虑后面lorawan工程还是调整为好),采用</font>
- <font color="#000000" face="Tahoma" size="3">模块厂商推荐值0x0B</font>
- <font color="#000000" face="Tahoma" size="3">//#define XTAL_DEFAULT_CAP_VALUE ( 0x20UL )</font>
- <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如下。
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN Header */</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> ******************************************************************************</font>
- <font color="#000000" face="Tahoma" size="3"> * @file subghz_phy_app.c</font>
- <font color="#000000" face="Tahoma" size="3"> * @author MCD Application Team</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Application of the SubGHz_Phy Middleware</font>
- <font color="#000000" face="Tahoma" size="3"> ******************************************************************************</font>
- <font color="#000000" face="Tahoma" size="3"> * @attention</font>
- <font color="#000000" face="Tahoma" size="3"> *</font>
- <font color="#000000" face="Tahoma" size="3"> * Copyright (c) 2022 STMicroelectronics.</font>
- <font color="#000000" face="Tahoma" size="3"> * All rights reserved.</font>
- <font color="#000000" face="Tahoma" size="3"> *</font>
- <font color="#000000" face="Tahoma" size="3"> * This software is licensed under terms that can be found in the LICENSE file</font>
- <font color="#000000" face="Tahoma" size="3"> * in the root directory of this software component.</font>
- <font color="#000000" face="Tahoma" size="3"> * If no LICENSE file comes with this software, it is provided AS-IS.</font>
- <font color="#000000" face="Tahoma" size="3"> *</font>
- <font color="#000000" face="Tahoma" size="3"> ******************************************************************************</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END Header */</font>
- <font color="#000000" face="Tahoma" size="3">/* Includes ------------------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">#include "platform.h"</font>
- <font color="#000000" face="Tahoma" size="3">#include "sys_app.h"</font>
- <font color="#000000" face="Tahoma" size="3">#include "subghz_phy_app.h"</font>
- <font color="#000000" face="Tahoma" size="3">#include "radio.h"</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN Includes */</font>
- <font color="#000000" face="Tahoma" size="3">#include "stm32_timer.h"</font>
- <font color="#000000" face="Tahoma" size="3">#include "stm32_seq.h"</font>
- <font color="#000000" face="Tahoma" size="3">#include "utilities_def.h"</font>
- <font color="#000000" face="Tahoma" size="3">#include "app_version.h"</font>
- <font color="#000000" face="Tahoma" size="3">#include "subghz_phy_version.h"</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END Includes */</font>
- <font color="#000000" face="Tahoma" size="3">/* External variables ---------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN EV */</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END EV */</font>
- <font color="#000000" face="Tahoma" size="3">/* Private typedef -----------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PTD */</font>
- <font color="#000000" face="Tahoma" size="3">typedef enum</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> RX,</font>
- <font color="#000000" face="Tahoma" size="3"> RX_TIMEOUT,</font>
- <font color="#000000" face="Tahoma" size="3"> RX_ERROR,</font>
- <font color="#000000" face="Tahoma" size="3"> TX,</font>
- <font color="#000000" face="Tahoma" size="3"> TX_TIMEOUT,</font>
- <font color="#000000" face="Tahoma" size="3">} States_t;</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END PTD */</font>
- <font color="#000000" face="Tahoma" size="3">/* Private define ------------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PD */</font>
- <font color="#000000" face="Tahoma" size="3">/* Configurations */</font>
- <font color="#000000" face="Tahoma" size="3">/*Timeout*/</font>
- <font color="#000000" face="Tahoma" size="3">#define RX_TIMEOUT_VALUE 3000</font>
- <font color="#000000" face="Tahoma" size="3">#define TX_TIMEOUT_VALUE 3000</font>
- <font color="#000000" face="Tahoma" size="3">/* PING string*/</font>
- <font color="#000000" face="Tahoma" size="3">#define PING "PING"</font>
- <font color="#000000" face="Tahoma" size="3">/* PONG string*/</font>
- <font color="#000000" face="Tahoma" size="3">#define PONG "PONG"</font>
- <font color="#000000" face="Tahoma" size="3">/*Size of the payload to be sent*/</font>
- <font color="#000000" face="Tahoma" size="3">/* Size must be greater of equal the PING and PONG*/</font>
- <font color="#000000" face="Tahoma" size="3">#define MAX_APP_BUFFER_SIZE 255</font>
- <font color="#000000" face="Tahoma" size="3">#if (PAYLOAD_LEN > MAX_APP_BUFFER_SIZE)</font>
- <font color="#000000" face="Tahoma" size="3">#error PAYLOAD_LEN must be less or equal than MAX_APP_BUFFER_SIZE</font>
- <font color="#000000" face="Tahoma" size="3">#endif /* (PAYLOAD_LEN > MAX_APP_BUFFER_SIZE) */</font>
- <font color="#000000" face="Tahoma" size="3">/* wait for remote to be in Rx, before sending a Tx frame*/</font>
- <font color="#000000" face="Tahoma" size="3">#define RX_TIME_MARGIN 200</font>
- <font color="#000000" face="Tahoma" size="3">/* Afc bandwidth in Hz */</font>
- <font color="#000000" face="Tahoma" size="3">#define FSK_AFC_BANDWIDTH 83333</font>
- <font color="#000000" face="Tahoma" size="3">/* LED blink Period*/</font>
- <font color="#000000" face="Tahoma" size="3">#define LED_PERIOD_MS 200</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END PD */</font>
- <font color="#000000" face="Tahoma" size="3">/* Private macro -------------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PM */</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END PM */</font>
- <font color="#000000" face="Tahoma" size="3">/* Private variables ---------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">/* Radio events function pointer */</font>
- <font color="#000000" face="Tahoma" size="3">static RadioEvents_t RadioEvents;</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PV */</font>
- <font color="#000000" face="Tahoma" size="3">/*Ping Pong FSM states */</font>
- <font color="#000000" face="Tahoma" size="3">static States_t State = RX;</font>
- <font color="#000000" face="Tahoma" size="3">/* App Rx Buffer*/</font>
- <font color="#000000" face="Tahoma" size="3">static uint8_t BufferRx[MAX_APP_BUFFER_SIZE];</font>
- <font color="#000000" face="Tahoma" size="3">/* App Tx Buffer*/</font>
- <font color="#000000" face="Tahoma" size="3">static uint8_t BufferTx[MAX_APP_BUFFER_SIZE];</font>
- <font color="#000000" face="Tahoma" size="3">/* Last Received Buffer Size*/</font>
- <font color="#000000" face="Tahoma" size="3">uint16_t RxBufferSize = 0;</font>
- <font color="#000000" face="Tahoma" size="3">/* Last Received packer Rssi*/</font>
- <font color="#000000" face="Tahoma" size="3">int8_t RssiValue = 0;</font>
- <font color="#000000" face="Tahoma" size="3">/* Last Received packer SNR (in Lora modulation)*/</font>
- <font color="#000000" face="Tahoma" size="3">int8_t SnrValue = 0;</font>
- <font color="#000000" face="Tahoma" size="3">/* Led Timers objects*/</font>
- <font color="#000000" face="Tahoma" size="3">static UTIL_TIMER_Object_t timerLed;</font>
- <font color="#000000" face="Tahoma" size="3">/* device state. Master: true, Slave: false*/</font>
- <font color="#000000" face="Tahoma" size="3">bool isMaster = true;</font>
- <font color="#000000" face="Tahoma" size="3">/* random delay to make sure 2 devices will sync*/</font>
- <font color="#000000" face="Tahoma" size="3">/* the closest the random delays are, the longer it will</font>
- <font color="#000000" face="Tahoma" size="3"> take for the devices to sync when started simultaneously*/</font>
- <font color="#000000" face="Tahoma" size="3">static int32_t random_delay;</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END PV */</font>
- <font color="#000000" face="Tahoma" size="3">/* Private function prototypes -----------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">/*!</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Function to be executed on Radio Tx Done event</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">static void OnTxDone(void);</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Function to be executed on Radio Rx Done event</font>
- <font color="#000000" face="Tahoma" size="3"> * @param payload ptr of buffer received</font>
- <font color="#000000" face="Tahoma" size="3"> * @param size buffer size</font>
- <font color="#000000" face="Tahoma" size="3"> * @param rssi</font>
- <font color="#000000" face="Tahoma" size="3"> * @param LoraSnr_FskCfo</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t LoraSnr_FskCfo);</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Function executed on Radio Tx Timeout event</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">static void OnTxTimeout(void);</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Function executed on Radio Rx Timeout event</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">static void OnRxTimeout(void);</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Function executed on Radio Rx Error event</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">static void OnRxError(void);</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PFP */</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief Function executed on when led timer elapses</font>
- <font color="#000000" face="Tahoma" size="3"> * @param context ptr of LED context</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">static void OnledEvent(void *context);</font>
- <font color="#000000" face="Tahoma" size="3">/**</font>
- <font color="#000000" face="Tahoma" size="3"> * @brief PingPong state machine implementation</font>
- <font color="#000000" face="Tahoma" size="3"> */</font>
- <font color="#000000" face="Tahoma" size="3">static void PingPong_Process(void);</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END PFP */</font>
- <font color="#000000" face="Tahoma" size="3">/* Exported functions ---------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">void SubghzApp_Init(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE BEGIN SubghzApp_Init_1 */</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "\n\rPING PONG\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> /* Get SubGHY_Phy APP version*/</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "APPLICATION_VERSION: V%X.%X.%X\r\n",</font>
- <font color="#000000" face="Tahoma" size="3"> (uint8_t)(APP_VERSION_MAIN),</font>
- <font color="#000000" face="Tahoma" size="3"> (uint8_t)(APP_VERSION_SUB1),</font>
- <font color="#000000" face="Tahoma" size="3"> (uint8_t)(APP_VERSION_SUB2));</font>
- <font color="#000000" face="Tahoma" size="3"> /* Get MW SubGhz_Phy info */</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "MW_RADIO_VERSION: V%X.%X.%X\r\n",</font>
- <font color="#000000" face="Tahoma" size="3"> (uint8_t)(SUBGHZ_PHY_VERSION_MAIN),</font>
- <font color="#000000" face="Tahoma" size="3"> (uint8_t)(SUBGHZ_PHY_VERSION_SUB1),</font>
- <font color="#000000" face="Tahoma" size="3"> (uint8_t)(SUBGHZ_PHY_VERSION_SUB2));</font>
- <font color="#000000" face="Tahoma" size="3"> /* Led Timers*/</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_TIMER_Create(&timerLed, LED_PERIOD_MS, UTIL_TIMER_ONESHOT, OnledEvent, NULL);</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_TIMER_Start(&timerLed);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE END SubghzApp_Init_1 */</font>
- <font color="#000000" face="Tahoma" size="3"> /* Radio initialization */</font>
- <font color="#000000" face="Tahoma" size="3"> RadioEvents.TxDone = OnTxDone;</font>
- <font color="#000000" face="Tahoma" size="3"> RadioEvents.RxDone = OnRxDone;</font>
- <font color="#000000" face="Tahoma" size="3"> RadioEvents.TxTimeout = OnTxTimeout;</font>
- <font color="#000000" face="Tahoma" size="3"> RadioEvents.RxTimeout = OnRxTimeout;</font>
- <font color="#000000" face="Tahoma" size="3"> RadioEvents.RxError = OnRxError;</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Init(&RadioEvents);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE BEGIN SubghzApp_Init_2 */</font>
- <font color="#000000" face="Tahoma" size="3">/*calculate random delay for synchronization*/</font>
- <font color="#000000" face="Tahoma" size="3"> random_delay = (Radio.Random()) >> 22; /*10bits random e.g. from 0 to 1023 ms*/</font>
- <font color="#000000" face="Tahoma" size="3"> /* Radio Set frequency */</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.SetChannel(RF_FREQUENCY);</font>
- <font color="#000000" face="Tahoma" size="3"> /* Radio configuration */</font>
- <font color="#000000" face="Tahoma" size="3">#if ((USE_MODEM_LORA == 1) && (USE_MODEM_FSK == 0))</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "---------------\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "LORA_MODULATION\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "LORA_BW=%d kHz\n\r", (1 << LORA_BANDWIDTH) * 125);</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "LORA_SF=%d\n\r", LORA_SPREADING_FACTOR);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,</font>
- <font color="#000000" face="Tahoma" size="3"> LORA_SPREADING_FACTOR, LORA_CODINGRATE,</font>
- <font color="#000000" face="Tahoma" size="3"> LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,</font>
- <font color="#000000" face="Tahoma" size="3"> true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.SetRxConfig(MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,</font>
- <font color="#000000" face="Tahoma" size="3"> LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,</font>
- <font color="#000000" face="Tahoma" size="3"> LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,</font>
- <font color="#000000" face="Tahoma" size="3"> 0, true, 0, 0, LORA_IQ_INVERSION_ON, true);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.SetMaxPayloadLength(MODEM_LORA, MAX_APP_BUFFER_SIZE);</font>
- <font color="#000000" face="Tahoma" size="3">#elif ((USE_MODEM_LORA == 0) && (USE_MODEM_FSK == 1))</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "---------------\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "FSK_MODULATION\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "FSK_BW=%d Hz\n\r", FSK_BANDWIDTH);</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_M, "FSK_DR=%d bits/s\n\r", FSK_DATARATE);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.SetTxConfig(MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,</font>
- <font color="#000000" face="Tahoma" size="3"> FSK_DATARATE, 0,</font>
- <font color="#000000" face="Tahoma" size="3"> FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,</font>
- <font color="#000000" face="Tahoma" size="3"> true, 0, 0, 0, TX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.SetRxConfig(MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,</font>
- <font color="#000000" face="Tahoma" size="3"> 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,</font>
- <font color="#000000" face="Tahoma" size="3"> 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, true,</font>
- <font color="#000000" face="Tahoma" size="3"> 0, 0, false, true);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.SetMaxPayloadLength(MODEM_FSK, MAX_APP_BUFFER_SIZE);</font>
- <font color="#000000" face="Tahoma" size="3">#else</font>
- <font color="#000000" face="Tahoma" size="3">#error "Please define a modulation in the subghz_phy_app.h file."</font>
- <font color="#000000" face="Tahoma" size="3">#endif /* USE_MODEM_LORA | USE_MODEM_FSK */</font>
- <font color="#000000" face="Tahoma" size="3"> /*fills tx buffer*/</font>
- <font color="#000000" face="Tahoma" size="3"> memset(BufferTx, 0x0, MAX_APP_BUFFER_SIZE);</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "rand=%d\n\r", random_delay);</font>
- <font color="#000000" face="Tahoma" size="3"> /*starts reception*/</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Rx(RX_TIMEOUT_VALUE + random_delay);</font>
- <font color="#000000" face="Tahoma" size="3"> /*register task to to be run in while(1) after Radio IT*/</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), UTIL_SEQ_RFU, PingPong_Process);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE END SubghzApp_Init_2 */</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN EF */</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END EF */</font>
- <font color="#000000" face="Tahoma" size="3">/* Private functions ---------------------------------------------------------*/</font>
- <font color="#000000" face="Tahoma" size="3">static void OnTxDone(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE BEGIN OnTxDone */</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "OnTxDone\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> /* Update the State of the FSM*/</font>
- <font color="#000000" face="Tahoma" size="3"> State = TX;</font>
- <font color="#000000" face="Tahoma" size="3"> /* Run PingPong process in background*/</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE END OnTxDone */</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t LoraSnr_FskCfo)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE BEGIN OnRxDone */</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "OnRxDone\n\r");</font>
- <font color="#000000" face="Tahoma" size="3">#if ((USE_MODEM_LORA == 1) && (USE_MODEM_FSK == 0))</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "RssiValue=%d dBm, SnrValue=%ddB\n\r", rssi, LoraSnr_FskCfo);</font>
- <font color="#000000" face="Tahoma" size="3"> /* Record payload Signal to noise ratio in Lora*/</font>
- <font color="#000000" face="Tahoma" size="3"> SnrValue = LoraSnr_FskCfo;</font>
- <font color="#000000" face="Tahoma" size="3">#endif /* USE_MODEM_LORA | USE_MODEM_FSK */</font>
- <font color="#000000" face="Tahoma" size="3">#if ((USE_MODEM_LORA == 0) && (USE_MODEM_FSK == 1))</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "RssiValue=%d dBm, Cfo=%dkHz\n\r", rssi, LoraSnr_FskCfo);</font>
- <font color="#000000" face="Tahoma" size="3"> SnrValue = 0; /*not applicable in GFSK*/</font>
- <font color="#000000" face="Tahoma" size="3">#endif /* USE_MODEM_LORA | USE_MODEM_FSK */</font>
- <font color="#000000" face="Tahoma" size="3"> /* Update the State of the FSM*/</font>
- <font color="#000000" face="Tahoma" size="3"> State = RX;</font>
- <font color="#000000" face="Tahoma" size="3"> /* Clear BufferRx*/</font>
- <font color="#000000" face="Tahoma" size="3"> memset(BufferRx, 0, MAX_APP_BUFFER_SIZE);</font>
- <font color="#000000" face="Tahoma" size="3"> /* Record payload size*/</font>
- <font color="#000000" face="Tahoma" size="3"> RxBufferSize = size;</font>
- <font color="#000000" face="Tahoma" size="3"> if (RxBufferSize <= MAX_APP_BUFFER_SIZE)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> memcpy(BufferRx, payload, RxBufferSize);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> /* Record Received Signal Strength*/</font>
- <font color="#000000" face="Tahoma" size="3"> RssiValue = rssi;</font>
- <font color="#000000" face="Tahoma" size="3"> /* Record payload content*/</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_H, "payload. size=%d \n\r", size);</font>
- <font color="#000000" face="Tahoma" size="3"> for (int i = 0; i < PAYLOAD_LEN; i++)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_H, "%02X", BufferRx);</font>
- <font color="#000000" face="Tahoma" size="3"> if (i % 16 == 15)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_H, "\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_OFF, VLEVEL_H, "\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> /* Run PingPong process in background*/</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE END OnRxDone */</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">static void OnTxTimeout(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE BEGIN OnTxTimeout */</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "OnTxTimeout\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> /* Update the State of the FSM*/</font>
- <font color="#000000" face="Tahoma" size="3"> State = TX_TIMEOUT;</font>
- <font color="#000000" face="Tahoma" size="3"> /* Run PingPong process in background*/</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE END OnTxTimeout */</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">static void OnRxTimeout(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE BEGIN OnRxTimeout */</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "OnRxTimeout\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> /* Update the State of the FSM*/</font>
- <font color="#000000" face="Tahoma" size="3"> State = RX_TIMEOUT;</font>
- <font color="#000000" face="Tahoma" size="3"> /* Run PingPong process in background*/</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE END OnRxTimeout */</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">static void OnRxError(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE BEGIN OnRxError */</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "OnRxError\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> /* Update the State of the FSM*/</font>
- <font color="#000000" face="Tahoma" size="3"> State = RX_ERROR;</font>
- <font color="#000000" face="Tahoma" size="3"> /* Run PingPong process in background*/</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);</font>
- <font color="#000000" face="Tahoma" size="3"> /* USER CODE END OnRxError */</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE BEGIN PrFD */</font>
- <font color="#000000" face="Tahoma" size="3">static void PingPong_Process(void)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Sleep();</font>
- <font color="#000000" face="Tahoma" size="3"> switch (State)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> case RX:</font>
- <font color="#000000" face="Tahoma" size="3"> if (isMaster == true)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> if (RxBufferSize > 0)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> if (strncmp((const char *)BufferRx, PONG, sizeof(PONG) - 1) == 0)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_TIMER_Stop(&timerLed);</font>
- <font color="#000000" face="Tahoma" size="3"> /* switch off green led */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); /* LED_GREEN */</font>
- <font color="#000000" face="Tahoma" size="3"> /* master toggles red led */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */</font>
- <font color="#000000" face="Tahoma" size="3"> /* Add delay between RX and TX */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN);</font>
- <font color="#000000" face="Tahoma" size="3"> /* master sends PING*/</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "..."</font>
- <font color="#000000" face="Tahoma" size="3"> "PING"</font>
- <font color="#000000" face="Tahoma" size="3"> "\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Master Tx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> memcpy(BufferTx, PING, sizeof(PING) - 1);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Send(BufferTx, PAYLOAD_LEN);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> else if (strncmp((const char *)BufferRx, PING, sizeof(PING) - 1) == 0)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /* A master already exists then become a slave */</font>
- <font color="#000000" face="Tahoma" size="3"> isMaster = false;</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Rx(RX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> else /* valid reception but neither a PING or a PONG message */</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /* Set device as master and start again */</font>
- <font color="#000000" face="Tahoma" size="3"> isMaster = true;</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Master Rx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Rx(RX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> else</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> if (RxBufferSize > 0)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> if (strncmp((const char *)BufferRx, PING, sizeof(PING) - 1) == 0)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_TIMER_Stop(&timerLed);</font>
- <font color="#000000" face="Tahoma" size="3"> /* switch off red led */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */</font>
- <font color="#000000" face="Tahoma" size="3"> /* slave toggles green led */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* LED_GREEN */</font>
- <font color="#000000" face="Tahoma" size="3"> /* Add delay between RX and TX */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN);</font>
- <font color="#000000" face="Tahoma" size="3"> /*slave sends PONG*/</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "..."</font>
- <font color="#000000" face="Tahoma" size="3"> "PONG"</font>
- <font color="#000000" face="Tahoma" size="3"> "\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Slave Tx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> memcpy(BufferTx, PONG, sizeof(PONG) - 1);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Send(BufferTx, PAYLOAD_LEN);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> else /* valid reception but not a PING as expected */</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /* Set device as master and start again */</font>
- <font color="#000000" face="Tahoma" size="3"> isMaster = true;</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Master Rx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Rx(RX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> case TX:</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Rx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Rx(RX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> case RX_TIMEOUT:</font>
- <font color="#000000" face="Tahoma" size="3"> case RX_ERROR:</font>
- <font color="#000000" face="Tahoma" size="3"> if (isMaster == true)</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> /* Send the next PING frame */</font>
- <font color="#000000" face="Tahoma" size="3"> /* Add delay between RX and TX*/</font>
- <font color="#000000" face="Tahoma" size="3"> /* add random_delay to force sync between boards after some trials*/</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN + random_delay);</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Master Tx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> /* master sends PING*/</font>
- <font color="#000000" face="Tahoma" size="3"> memcpy(BufferTx, PING, sizeof(PING) - 1);</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Send(BufferTx, PAYLOAD_LEN);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> else</font>
- <font color="#000000" face="Tahoma" size="3"> {</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Rx(RX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> case TX_TIMEOUT:</font>
- <font color="#000000" face="Tahoma" size="3"> APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");</font>
- <font color="#000000" face="Tahoma" size="3"> Radio.Rx(RX_TIMEOUT_VALUE);</font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> default:</font>
- <font color="#000000" face="Tahoma" size="3"> break;</font>
- <font color="#000000" face="Tahoma" size="3"> }</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">static void OnledEvent(void *context)</font>
- <font color="#000000" face="Tahoma" size="3">{</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* LED_GREEN */</font>
- <font color="#000000" face="Tahoma" size="3"> HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */</font>
- <font color="#000000" face="Tahoma" size="3"> UTIL_TIMER_Start(&timerLed);</font>
- <font color="#000000" face="Tahoma" size="3">}</font>
- <font color="#000000" face="Tahoma" size="3">/* USER CODE END PrFD */</font>
复制代码
三、下载测试
最后烧录下载后,正常pingpong通信
————————————————
版权声明:北世安
|