generated from Embedded_Projects/YZL_WLE5CB_Template
MX Generated Ping-Pong demo.
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
Signed-off-by: Yilin Sun <imi415@imi.moe>
This commit is contained in:
parent
bf57ad8093
commit
30f432c295
|
@ -8,7 +8,7 @@
|
|||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2020(-2021) STMicroelectronics.
|
||||
* Copyright (c) 2020-2021 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
|
@ -23,7 +23,7 @@
|
|||
|
||||
/** @addtogroup BSP
|
||||
* @{
|
||||
*/
|
||||
*/
|
||||
|
||||
/** @addtogroup STM32WLXX_NUCLEO
|
||||
* @{
|
||||
|
@ -155,7 +155,7 @@ int32_t BSP_RADIO_ConfigRFSwitch(BSP_RADIO_Switch_TypeDef Config)
|
|||
*/
|
||||
int32_t BSP_RADIO_GetTxConfig(void)
|
||||
{
|
||||
return RADIO_CONF_RFO_HP;
|
||||
return RADIO_CONF_RFO_HP;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -167,7 +167,6 @@ int32_t BSP_RADIO_GetTxConfig(void)
|
|||
*/
|
||||
int32_t BSP_RADIO_IsTCXO(void)
|
||||
{
|
||||
//return RADIO_CONF_TCXO_SUPPORTED;
|
||||
return RADIO_CONF_TCXO_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
|
@ -182,6 +181,7 @@ int32_t BSP_RADIO_IsDCDC(void)
|
|||
{
|
||||
return RADIO_CONF_DCDC_SUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return RF Output Max Power Configuration
|
||||
* @retval
|
||||
|
@ -203,6 +203,7 @@ int32_t BSP_RADIO_GetRFOMaxPowerConfig(BSP_RADIO_RFOMaxPowerConfig_TypeDef Confi
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
@ -217,6 +218,4 @@ int32_t BSP_RADIO_GetRFOMaxPowerConfig(BSP_RADIO_RFOMaxPowerConfig_TypeDef Confi
|
|||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||
*/
|
||||
|
|
|
@ -14,23 +14,27 @@ set(TARGET_SOURCES
|
|||
"BSP/stm32wlxx_nucleo_radio.c"
|
||||
"MX_Generated/startup_stm32wle5xx.s"
|
||||
"MX_Generated/Core/Src/adc.c"
|
||||
"MX_Generated/Core/Src/dma.c"
|
||||
"MX_Generated/Core/Src/gpio.c"
|
||||
"MX_Generated/Core/Src/main.c"
|
||||
"MX_Generated/Core/Src/rtc.c"
|
||||
"MX_Generated/Core/Src/stm32_adv_trace_if.c"
|
||||
"MX_Generated/Core/Src/stm32_lpm_if.c"
|
||||
"MX_Generated/Core/Src/stm32wlxx_hal_msp.c"
|
||||
"MX_Generated/Core/Src/stm32wlxx_it.c"
|
||||
"MX_Generated/Core/Src/subghz.c"
|
||||
"MX_Generated/Core/Src/sys_app.c"
|
||||
"MX_Generated/Core/Src/sys_debug.c"
|
||||
"MX_Generated/Core/Src/system_stm32wlxx.c"
|
||||
"MX_Generated/Core/Src/timer_if.c"
|
||||
"MX_Generated/Core/Src/usart.c"
|
||||
"MX_Generated/Core/Src/usart_if.c"
|
||||
"MX_Generated/SubGHz_Phy/App/app_subghz_phy.c"
|
||||
"MX_Generated/SubGHz_Phy/App/subghz_phy_app.c"
|
||||
"MX_Generated/SubGHz_Phy/Target/radio_board_if.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_cortex.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_dma_ex.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_gpio.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_pwr_ex.c"
|
||||
|
@ -41,8 +45,16 @@ set(TARGET_SOURCES
|
|||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_subghz.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart.c"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Src/stm32wlxx_hal_uart_ex.c"
|
||||
"SDK/Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/lr_fhss_mac.c"
|
||||
"SDK/Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_driver.c"
|
||||
"SDK/Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio_fw.c"
|
||||
"SDK/Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/radio.c"
|
||||
"SDK/Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver/wl_lr_fhss.c"
|
||||
"SDK/Utilities/lpm/tiny_lpm/stm32_lpm.c"
|
||||
"SDK/Utilities/misc/stm32_mem.c"
|
||||
"SDK/Utilities/misc/stm32_systime.c"
|
||||
"SDK/Utilities/misc/stm32_tiny_vsnprintf.c"
|
||||
"SDK/Utilities/sequencer/stm32_seq.c"
|
||||
"SDK/Utilities/timer/stm32_timer.c"
|
||||
"SDK/Utilities/trace/adv_trace/stm32_adv_trace.c"
|
||||
"src/app_syscalls.c"
|
||||
|
@ -64,8 +76,10 @@ set(TARGET_C_INCLUDES
|
|||
"SDK/Drivers/CMSIS/Device/ST/STM32WLxx/Include"
|
||||
"SDK/Drivers/STM32WLxx_HAL_Driver/Inc"
|
||||
"SDK/Middlewares/Third_Party/SubGHz_Phy"
|
||||
"SDK/Middlewares/Third_Party/SubGHz_Phy/stm32_radio_driver"
|
||||
"SDK/Utilities/lpm/tiny_lpm"
|
||||
"SDK/Utilities/misc"
|
||||
"SDK/Utilities/sequencer"
|
||||
"SDK/Utilities/timer"
|
||||
"SDK/Utilities/trace/adv_trace"
|
||||
"include"
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file dma.h
|
||||
* @brief This file contains all the function prototypes for
|
||||
* the dma.c file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __DMA_H__
|
||||
#define __DMA_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
|
||||
/* DMA memory to memory transfer handles -------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
/* USER CODE END Private defines */
|
||||
|
||||
void MX_DMA_Init(void);
|
||||
|
||||
/* USER CODE BEGIN Prototypes */
|
||||
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __DMA_H__ */
|
||||
|
|
@ -57,6 +57,15 @@ void Error_Handler(void);
|
|||
/* USER CODE END EFP */
|
||||
|
||||
/* Private defines -----------------------------------------------------------*/
|
||||
#define RTC_N_PREDIV_S 10
|
||||
#define RTC_PREDIV_S ((1<<RTC_N_PREDIV_S)-1)
|
||||
#define RTC_PREDIV_A ((1<<(15-RTC_N_PREDIV_S))-1)
|
||||
#define LED3_Pin GPIO_PIN_3
|
||||
#define LED3_GPIO_Port GPIOB
|
||||
#define LED2_Pin GPIO_PIN_4
|
||||
#define LED2_GPIO_Port GPIOB
|
||||
#define LED1_Pin GPIO_PIN_5
|
||||
#define LED1_GPIO_Port GPIOB
|
||||
|
||||
/* USER CODE BEGIN Private defines */
|
||||
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : stm32_adv_trace_if.h
|
||||
* @brief : Header file for stm32_adv_trace interface file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
#include "stm32_adv_trace.h"
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __STM32_ADV_TRACE_IF_H__
|
||||
#define __STM32_ADV_TRACE_IF_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** @defgroup ADV_TRACE_IF low layer level of the advanced tracer
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <stdint.h>
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* External variables --------------------------------------------------------*/
|
||||
/* Exported functions ------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* @brief Init the UART and associated DMA.
|
||||
* @param cb tx function callback.
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t UART_Init(void (*cb)(void *));
|
||||
|
||||
/**
|
||||
* @brief DeInit the UART and associated DMA.
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t UART_DeInit(void);
|
||||
|
||||
/**
|
||||
* @brief send buffer to UART using DMA
|
||||
* @param pdata data to be sent
|
||||
* @param size of buffer p_data to be sent
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t UART_TransmitDMA(uint8_t *pdata, uint16_t size);
|
||||
|
||||
/**
|
||||
* @brief start Rx process
|
||||
* @param cb callback to receive the data
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t UART_StartRx(void (*cb)(uint8_t *pdata, uint16_t size, uint8_t error));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* __STM32_ADV_TRACE_IF_H__*/
|
|
@ -55,6 +55,14 @@ void SVC_Handler(void);
|
|||
void DebugMon_Handler(void);
|
||||
void PendSV_Handler(void);
|
||||
void SysTick_Handler(void);
|
||||
void PVD_PVM_IRQHandler(void);
|
||||
void TAMP_STAMP_LSECSS_SSRU_IRQHandler(void);
|
||||
void RCC_IRQHandler(void);
|
||||
void DMA1_Channel1_IRQHandler(void);
|
||||
void DMA1_Channel2_IRQHandler(void);
|
||||
void LPUART1_IRQHandler(void);
|
||||
void RTC_Alarm_IRQHandler(void);
|
||||
void SUBGHZ_Radio_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
|
|
@ -28,6 +28,8 @@ extern "C" {
|
|||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stdint.h"
|
||||
#include "sys_conf.h"
|
||||
#include "stm32_adv_trace.h"
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
@ -53,11 +55,18 @@ extern "C" {
|
|||
/* USER CODE END EV */
|
||||
|
||||
/* Exported macros -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN APP_PRINT */
|
||||
/* Map your own trace mechanism or to map UTIL_ADV_TRACE see examples from CubeFw, e.g.: */
|
||||
#define APP_PRINTF(...) /* do{ {UTIL_ADV_TRACE_COND_FSend(VLEVEL_ALWAYS, T_REG_OFF, TS_OFF, __VA_ARGS__);} }while(0); */
|
||||
#define APP_LOG(TS,VL,...) /* do{ {UTIL_ADV_TRACE_COND_FSend(VL, T_REG_OFF, TS, __VA_ARGS__);} }while(0); */
|
||||
/* USER CODE END APP_PRINT */
|
||||
#define APP_PPRINTF(...) do{ } while( UTIL_ADV_TRACE_OK \
|
||||
!= UTIL_ADV_TRACE_COND_FSend(VLEVEL_ALWAYS, T_REG_OFF, TS_OFF, __VA_ARGS__) ) /* Polling Mode */
|
||||
#define APP_TPRINTF(...) do{ {UTIL_ADV_TRACE_COND_FSend(VLEVEL_ALWAYS, T_REG_OFF, TS_ON, __VA_ARGS__);} }while(0); /* with timestamp */
|
||||
#define APP_PRINTF(...) do{ {UTIL_ADV_TRACE_COND_FSend(VLEVEL_ALWAYS, T_REG_OFF, TS_OFF, __VA_ARGS__);} }while(0);
|
||||
|
||||
#if defined (APP_LOG_ENABLED) && (APP_LOG_ENABLED == 1)
|
||||
#define APP_LOG(TS,VL,...) do{ {UTIL_ADV_TRACE_COND_FSend(VL, T_REG_OFF, TS, __VA_ARGS__);} }while(0);
|
||||
#elif defined (APP_LOG_ENABLED) && (APP_LOG_ENABLED == 0) /* APP_LOG disabled */
|
||||
#define APP_LOG(TS,VL,...)
|
||||
#else
|
||||
#error "APP_LOG_ENABLED not defined or out of range <0,1>"
|
||||
#endif /* APP_LOG_ENABLED */
|
||||
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file sys_conf.h
|
||||
* @author MCD Application Team
|
||||
* @brief Applicative configuration, e.g. : debug, trace, low power, sensors
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __SYS_CONF_H__
|
||||
#define __SYS_CONF_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Verbose level for all trace logs
|
||||
*/
|
||||
#define VERBOSE_LEVEL VLEVEL_M
|
||||
|
||||
/**
|
||||
* @brief Enable trace logs
|
||||
*/
|
||||
#define APP_LOG_ENABLED 1
|
||||
|
||||
/**
|
||||
* @brief Activate monitoring (probes) of some internal RF signals for debug purpose
|
||||
*/
|
||||
#define DEBUG_SUBGHZSPI_MONITORING_ENABLED 0
|
||||
|
||||
#define DEBUG_RF_NRESET_ENABLED 0
|
||||
|
||||
#define DEBUG_RF_HSE32RDY_ENABLED 0
|
||||
|
||||
#define DEBUG_RF_SMPSRDY_ENABLED 0
|
||||
|
||||
#define DEBUG_RF_LDORDY_ENABLED 0
|
||||
|
||||
#define DEBUG_RF_DTB1_ENABLED 0
|
||||
|
||||
#define DEBUG_RF_BUSY_ENABLED 0
|
||||
|
||||
/**
|
||||
* @brief Enable/Disable MCU Debugger pins (dbg serial wires)
|
||||
* @note by HW serial wires are ON by default, need to put them OFF to save power
|
||||
*/
|
||||
#define DEBUGGER_ENABLED 1
|
||||
|
||||
/**
|
||||
* @brief Disable Low Power mode
|
||||
* @note 0: LowPowerMode enabled. MCU enters stop2 mode, 1: LowPowerMode disabled. MCU enters sleep mode only
|
||||
*/
|
||||
#define LOW_POWER_DISABLE 1
|
||||
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
/* USER CODE END EC */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
/* USER CODE END EM */
|
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __SYS_CONF_H__ */
|
|
@ -0,0 +1,109 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file sys_debug.h
|
||||
* @author MCD Application Team
|
||||
* @brief Configuration of the debug.c instances
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __SYS_DEBUG_H__
|
||||
#define __SYS_DEBUG_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "sys_conf.h"
|
||||
#include "platform.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* Pin defines */
|
||||
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
/* USER CODE END EC */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
#if !defined (DISABLE_PROBE_GPIO)
|
||||
|
||||
/**
|
||||
* @brief Set pin to x value
|
||||
*/
|
||||
#define PROBE_GPIO_WRITE( gpio, n, x ) HAL_GPIO_WritePin( gpio, n, (GPIO_PinState)(x) )
|
||||
|
||||
/**
|
||||
* @brief Set pin to high level
|
||||
*/
|
||||
#define PROBE_GPIO_SET_LINE( gpio, n ) LL_GPIO_SetOutputPin( gpio, n )
|
||||
|
||||
/**
|
||||
* @brief Set pin to low level
|
||||
*/
|
||||
#define PROBE_GPIO_RST_LINE( gpio, n ) LL_GPIO_ResetOutputPin( gpio, n )
|
||||
|
||||
#else /* DISABLE_PROBE_GPIO */
|
||||
|
||||
/**
|
||||
* @brief not usable
|
||||
*/
|
||||
#define PROBE_GPIO_WRITE( gpio, n, x )
|
||||
|
||||
/**
|
||||
* @brief not usable
|
||||
*/
|
||||
#define PROBE_GPIO_SET_LINE( gpio, n )
|
||||
|
||||
/**
|
||||
* @brief not usable
|
||||
*/
|
||||
#define PROBE_GPIO_RST_LINE( gpio, n )
|
||||
|
||||
#endif /* DISABLE_PROBE_GPIO */
|
||||
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
/* USER CODE END EM */
|
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
/**
|
||||
* @brief Initializes the SW probes pins and the monitor RF pins via Alternate Function
|
||||
*/
|
||||
void DBG_Init(void);
|
||||
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __SYS_DEBUG_H__ */
|
|
@ -0,0 +1,117 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file usart_if.h
|
||||
* @author MCD Application Team
|
||||
* @brief Header for USART interface configuration
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
#include "stm32_adv_trace.h"
|
||||
#include "usart.h"
|
||||
#include "dma.h"
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __USART_IF_H__
|
||||
#define __USART_IF_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
/* USER CODE END EC */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
/* USER CODE END EM */
|
||||
|
||||
/* Exported functions prototypes ---------------------------------------------*/
|
||||
/**
|
||||
* @brief Init the UART and associated DMA.
|
||||
* @param cb TxCpltCallback
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t vcom_Init(void (*cb)(void *));
|
||||
|
||||
/**
|
||||
* @brief init receiver of vcom
|
||||
* @param RxCb callback when Rx char is received
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t vcom_ReceiveInit(void (*RxCb)(uint8_t *rxChar, uint16_t size, uint8_t error));
|
||||
|
||||
/**
|
||||
* @brief DeInit the UART and associated DMA.
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t vcom_DeInit(void);
|
||||
|
||||
/**
|
||||
* @brief send buffer \p p_data of size \p size to vcom in polling mode
|
||||
* @param p_data data to be sent
|
||||
* @param size of buffer p_data to be sent
|
||||
*/
|
||||
void vcom_Trace(uint8_t *p_data, uint16_t size);
|
||||
|
||||
/**
|
||||
* @brief send buffer \p p_data of size \p size to vcom using DMA
|
||||
* @param p_data data to be sent
|
||||
* @param size of buffer p_data to be sent
|
||||
* @return @ref UTIL_ADV_TRACE_Status_t
|
||||
*/
|
||||
UTIL_ADV_TRACE_Status_t vcom_Trace_DMA(uint8_t *p_data, uint16_t size);
|
||||
|
||||
/**
|
||||
* @brief last byte has been sent on the uart line
|
||||
*/
|
||||
void vcom_IRQHandler(void);
|
||||
|
||||
/**
|
||||
* @brief last byte has been sent from memory to uart data register
|
||||
*/
|
||||
void vcom_DMA_TX_IRQHandler(void);
|
||||
|
||||
/**
|
||||
* @brief Resume the UART and associated DMA (used by LPM)
|
||||
*/
|
||||
void vcom_Resume(void);
|
||||
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __USART_IF_H__ */
|
|
@ -45,7 +45,8 @@ typedef enum
|
|||
/* USER CODE BEGIN CFG_LPM_Id_t_0 */
|
||||
|
||||
/* USER CODE END CFG_LPM_Id_t_0 */
|
||||
CFG_LPM_DUMMY_Id,
|
||||
CFG_LPM_APPLI_Id,
|
||||
CFG_LPM_UART_TX_Id,
|
||||
/* USER CODE BEGIN CFG_LPM_Id_t */
|
||||
|
||||
/* USER CODE END CFG_LPM_Id_t */
|
||||
|
@ -74,7 +75,7 @@ typedef enum
|
|||
*/
|
||||
typedef enum
|
||||
{
|
||||
CFG_SEQ_Task_Default,
|
||||
CFG_SEQ_Task_SubGHz_Phy_App_Process,
|
||||
/* USER CODE BEGIN CFG_SEQ_Task_Id_t */
|
||||
|
||||
/* USER CODE END CFG_SEQ_Task_Id_t */
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file dma.c
|
||||
* @brief This file provides code for the configuration
|
||||
* of all the requested memory to memory DMA transfers.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "dma.h"
|
||||
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Configure DMA */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
/**
|
||||
* Enable DMA controller clock
|
||||
*/
|
||||
void MX_DMA_Init(void)
|
||||
{
|
||||
|
||||
/* DMA controller clock enable */
|
||||
__HAL_RCC_DMAMUX1_CLK_ENABLE();
|
||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||
|
||||
/* DMA interrupt init */
|
||||
/* DMA1_Channel1_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
||||
/* DMA1_Channel2_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
|
||||
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
|
@ -42,10 +42,23 @@
|
|||
void MX_GPIO_Init(void)
|
||||
{
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, LED3_Pin|LED2_Pin|LED1_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pins : PBPin PBPin PBPin */
|
||||
GPIO_InitStruct.Pin = LED3_Pin|LED2_Pin|LED1_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "main.h"
|
||||
#include "adc.h"
|
||||
#include "dma.h"
|
||||
#include "usart.h"
|
||||
#include "rtc.h"
|
||||
#include "app_subghz_phy.h"
|
||||
|
|
|
@ -34,8 +34,7 @@ void MX_RTC_Init(void)
|
|||
|
||||
/* USER CODE END RTC_Init 0 */
|
||||
|
||||
RTC_TimeTypeDef sTime = {0};
|
||||
RTC_DateTypeDef sDate = {0};
|
||||
RTC_AlarmTypeDef sAlarm = {0};
|
||||
|
||||
/* USER CODE BEGIN RTC_Init 1 */
|
||||
|
||||
|
@ -44,15 +43,13 @@ void MX_RTC_Init(void)
|
|||
/** Initialize RTC Only
|
||||
*/
|
||||
hrtc.Instance = RTC;
|
||||
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
|
||||
hrtc.Init.AsynchPrediv = 127;
|
||||
hrtc.Init.SynchPrediv = 255;
|
||||
hrtc.Init.AsynchPrediv = RTC_PREDIV_A;
|
||||
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
|
||||
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
|
||||
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
|
||||
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
|
||||
hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
|
||||
hrtc.Init.BinMode = RTC_BINARY_NONE;
|
||||
hrtc.Init.BinMode = RTC_BINARY_ONLY;
|
||||
if (HAL_RTC_Init(&hrtc) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
|
@ -64,21 +61,19 @@ void MX_RTC_Init(void)
|
|||
|
||||
/** Initialize RTC and set the Time and Date
|
||||
*/
|
||||
sTime.Hours = 0x0;
|
||||
sTime.Minutes = 0x0;
|
||||
sTime.Seconds = 0x0;
|
||||
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
|
||||
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
|
||||
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
|
||||
if (HAL_RTCEx_SetSSRU_IT(&hrtc) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
|
||||
sDate.Month = RTC_MONTH_JANUARY;
|
||||
sDate.Date = 0x1;
|
||||
sDate.Year = 0x0;
|
||||
|
||||
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
|
||||
/** Enable the Alarm A
|
||||
*/
|
||||
sAlarm.BinaryAutoClr = RTC_ALARMSUBSECONDBIN_AUTOCLR_NO;
|
||||
sAlarm.AlarmTime.SubSeconds = 0x0;
|
||||
sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
|
||||
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDBINMASK_NONE;
|
||||
sAlarm.Alarm = RTC_ALARM_A;
|
||||
if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, 0) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
@ -111,6 +106,12 @@ void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
|
|||
/* RTC clock enable */
|
||||
__HAL_RCC_RTC_ENABLE();
|
||||
__HAL_RCC_RTCAPB_CLK_ENABLE();
|
||||
|
||||
/* RTC interrupt Init */
|
||||
HAL_NVIC_SetPriority(TAMP_STAMP_LSECSS_SSRU_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TAMP_STAMP_LSECSS_SSRU_IRQn);
|
||||
HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
|
||||
/* USER CODE BEGIN RTC_MspInit 1 */
|
||||
|
||||
/* USER CODE END RTC_MspInit 1 */
|
||||
|
@ -128,6 +129,10 @@ void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle)
|
|||
/* Peripheral clock disable */
|
||||
__HAL_RCC_RTC_DISABLE();
|
||||
__HAL_RCC_RTCAPB_CLK_DISABLE();
|
||||
|
||||
/* RTC interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(TAMP_STAMP_LSECSS_SSRU_IRQn);
|
||||
HAL_NVIC_DisableIRQ(RTC_Alarm_IRQn);
|
||||
/* USER CODE BEGIN RTC_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END RTC_MspDeInit 1 */
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : stm32_adv_trace_if.c
|
||||
* @brief : Source file for interfacing the stm32_adv_trace to hardware
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
#include "stm32_adv_trace.h"
|
||||
#include "stm32_adv_trace_if.h"
|
||||
/* USER CODE BEGIN include */
|
||||
|
||||
/* USER CODE END include */
|
||||
|
||||
/* Exported variables --------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief trace tracer definition.
|
||||
*
|
||||
* list all the driver interface used by the trace application.
|
||||
*/
|
||||
const UTIL_ADV_TRACE_Driver_s UTIL_TraceDriver =
|
||||
{
|
||||
UART_Init,
|
||||
UART_DeInit,
|
||||
UART_StartRx,
|
||||
UART_TransmitDMA
|
||||
};
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN Private_Function_Prototypes */
|
||||
|
||||
/* USER CODE END Private_Function_Prototypes */
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Private_Typedef */
|
||||
|
||||
/* USER CODE END Private_Typedef */
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Private_Define */
|
||||
|
||||
/* USER CODE END Private_Define */
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Private_Macro */
|
||||
|
||||
/* USER CODE END Private_Macro */
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Private_Variables */
|
||||
|
||||
/* USER CODE END Private_Variables */
|
||||
|
||||
UTIL_ADV_TRACE_Status_t UART_Init(void (*cb)(void *))
|
||||
{
|
||||
/* USER CODE BEGIN UART_Init */
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE END UART_Init */
|
||||
}
|
||||
|
||||
UTIL_ADV_TRACE_Status_t UART_DeInit(void)
|
||||
{
|
||||
/* USER CODE BEGIN UART_DeInit */
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE END UART_DeInit */
|
||||
}
|
||||
|
||||
UTIL_ADV_TRACE_Status_t UART_StartRx(void (*cb)(uint8_t *pdata, uint16_t size, uint8_t error))
|
||||
{
|
||||
/* USER CODE BEGIN UART_StartRx */
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE END UART_StartRx */
|
||||
}
|
||||
|
||||
UTIL_ADV_TRACE_Status_t UART_TransmitDMA(uint8_t *pdata, uint16_t size)
|
||||
{
|
||||
/* USER CODE BEGIN UART_TransmitDMA */
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE END UART_TransmitDMA */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN Private_Functions */
|
||||
|
||||
/* USER CODE END Private_Functions */
|
|
@ -19,8 +19,10 @@
|
|||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "platform.h"
|
||||
#include "stm32_lpm.h"
|
||||
#include "stm32_lpm_if.h"
|
||||
#include "usart_if.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
|
@ -92,6 +94,17 @@ void PWR_EnterStopMode(void)
|
|||
/* USER CODE BEGIN EnterStopMode_1 */
|
||||
|
||||
/* USER CODE END EnterStopMode_1 */
|
||||
HAL_SuspendTick();
|
||||
/* Clear Status Flag before entering STOP/STANDBY Mode */
|
||||
LL_PWR_ClearFlag_C1STOP_C1STB();
|
||||
|
||||
/* USER CODE BEGIN EnterStopMode_2 */
|
||||
|
||||
/* USER CODE END EnterStopMode_2 */
|
||||
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
|
||||
/* USER CODE BEGIN EnterStopMode_3 */
|
||||
|
||||
/* USER CODE END EnterStopMode_3 */
|
||||
}
|
||||
|
||||
void PWR_ExitStopMode(void)
|
||||
|
@ -99,6 +112,18 @@ void PWR_ExitStopMode(void)
|
|||
/* USER CODE BEGIN ExitStopMode_1 */
|
||||
|
||||
/* USER CODE END ExitStopMode_1 */
|
||||
/* Resume sysTick : work around for debugger problem in dual core */
|
||||
HAL_ResumeTick();
|
||||
/*Not retained periph:
|
||||
ADC interface
|
||||
DAC interface USARTx, TIMx, i2Cx, SPIx
|
||||
SRAM ctrls, DMAx, DMAMux, AES, RNG, HSEM */
|
||||
|
||||
/* Resume not retained USARTx and DMA */
|
||||
vcom_Resume();
|
||||
/* USER CODE BEGIN ExitStopMode_2 */
|
||||
|
||||
/* USER CODE END ExitStopMode_2 */
|
||||
}
|
||||
|
||||
void PWR_EnterSleepMode(void)
|
||||
|
@ -106,6 +131,15 @@ void PWR_EnterSleepMode(void)
|
|||
/* USER CODE BEGIN EnterSleepMode_1 */
|
||||
|
||||
/* USER CODE END EnterSleepMode_1 */
|
||||
/* Suspend sysTick */
|
||||
HAL_SuspendTick();
|
||||
/* USER CODE BEGIN EnterSleepMode_2 */
|
||||
|
||||
/* USER CODE END EnterSleepMode_2 */
|
||||
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
||||
/* USER CODE BEGIN EnterSleepMode_3 */
|
||||
|
||||
/* USER CODE END EnterSleepMode_3 */
|
||||
}
|
||||
|
||||
void PWR_ExitSleepMode(void)
|
||||
|
@ -113,6 +147,12 @@ void PWR_ExitSleepMode(void)
|
|||
/* USER CODE BEGIN ExitSleepMode_1 */
|
||||
|
||||
/* USER CODE END ExitSleepMode_1 */
|
||||
/* Resume sysTick */
|
||||
HAL_ResumeTick();
|
||||
|
||||
/* USER CODE BEGIN ExitSleepMode_2 */
|
||||
|
||||
/* USER CODE END ExitSleepMode_2 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN EF */
|
||||
|
|
|
@ -68,6 +68,14 @@ void HAL_MspInit(void)
|
|||
|
||||
/* System interrupt init*/
|
||||
|
||||
/* Peripheral interrupt init */
|
||||
/* PVD_PVM_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(PVD_PVM_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(PVD_PVM_IRQn);
|
||||
/* RCC_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(RCC_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(RCC_IRQn);
|
||||
|
||||
/* USER CODE BEGIN MspInit 1 */
|
||||
|
||||
/* USER CODE END MspInit 1 */
|
||||
|
|
|
@ -55,7 +55,11 @@
|
|||
/* USER CODE END 0 */
|
||||
|
||||
/* External variables --------------------------------------------------------*/
|
||||
|
||||
extern DMA_HandleTypeDef hdma_lpuart1_tx;
|
||||
extern DMA_HandleTypeDef hdma_lpuart1_rx;
|
||||
extern UART_HandleTypeDef hlpuart1;
|
||||
extern RTC_HandleTypeDef hrtc;
|
||||
extern SUBGHZ_HandleTypeDef hsubghz;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
@ -199,6 +203,117 @@ void SysTick_Handler(void)
|
|||
/* please refer to the startup file (startup_stm32wlxx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles PVD and PVM detector.
|
||||
*/
|
||||
void PVD_PVM_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN PVD_PVM_IRQn 0 */
|
||||
|
||||
/* USER CODE END PVD_PVM_IRQn 0 */
|
||||
HAL_PWREx_PVD_PVM_IRQHandler();
|
||||
/* USER CODE BEGIN PVD_PVM_IRQn 1 */
|
||||
|
||||
/* USER CODE END PVD_PVM_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles RTC Tamper, RTC TimeStamp, LSECSS and RTC SSRU Interrupts.
|
||||
*/
|
||||
void TAMP_STAMP_LSECSS_SSRU_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TAMP_STAMP_LSECSS_SSRU_IRQn 0 */
|
||||
|
||||
/* USER CODE END TAMP_STAMP_LSECSS_SSRU_IRQn 0 */
|
||||
HAL_RTCEx_SSRUIRQHandler(&hrtc);
|
||||
/* USER CODE BEGIN TAMP_STAMP_LSECSS_SSRU_IRQn 1 */
|
||||
|
||||
/* USER CODE END TAMP_STAMP_LSECSS_SSRU_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles RCC Interrupt.
|
||||
*/
|
||||
void RCC_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN RCC_IRQn 0 */
|
||||
|
||||
/* USER CODE END RCC_IRQn 0 */
|
||||
/* USER CODE BEGIN RCC_IRQn 1 */
|
||||
|
||||
/* USER CODE END RCC_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles DMA1 Channel 1 Interrupt.
|
||||
*/
|
||||
void DMA1_Channel1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
|
||||
|
||||
/* USER CODE END DMA1_Channel1_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_lpuart1_tx);
|
||||
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
|
||||
|
||||
/* USER CODE END DMA1_Channel1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles DMA1 Channel 2 Interrupt.
|
||||
*/
|
||||
void DMA1_Channel2_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
|
||||
|
||||
/* USER CODE END DMA1_Channel2_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_lpuart1_rx);
|
||||
/* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
|
||||
|
||||
/* USER CODE END DMA1_Channel2_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles LPUART1 Interrupt.
|
||||
*/
|
||||
void LPUART1_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN LPUART1_IRQn 0 */
|
||||
|
||||
/* USER CODE END LPUART1_IRQn 0 */
|
||||
HAL_UART_IRQHandler(&hlpuart1);
|
||||
/* USER CODE BEGIN LPUART1_IRQn 1 */
|
||||
|
||||
/* USER CODE END LPUART1_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles RTC Alarms (A and B) Interrupt.
|
||||
*/
|
||||
void RTC_Alarm_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN RTC_Alarm_IRQn 0 */
|
||||
|
||||
/* USER CODE END RTC_Alarm_IRQn 0 */
|
||||
HAL_RTC_AlarmIRQHandler(&hrtc);
|
||||
/* USER CODE BEGIN RTC_Alarm_IRQn 1 */
|
||||
|
||||
/* USER CODE END RTC_Alarm_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles SUBGHZ Radio Interrupt.
|
||||
*/
|
||||
void SUBGHZ_Radio_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN SUBGHZ_Radio_IRQn 0 */
|
||||
|
||||
/* USER CODE END SUBGHZ_Radio_IRQn 0 */
|
||||
HAL_SUBGHZ_IRQHandler(&hsubghz);
|
||||
/* USER CODE BEGIN SUBGHZ_Radio_IRQn 1 */
|
||||
|
||||
/* USER CODE END SUBGHZ_Radio_IRQn 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
|
|
@ -56,6 +56,10 @@ void HAL_SUBGHZ_MspInit(SUBGHZ_HandleTypeDef* subghzHandle)
|
|||
/* USER CODE END SUBGHZ_MspInit 0 */
|
||||
/* SUBGHZ clock enable */
|
||||
__HAL_RCC_SUBGHZSPI_CLK_ENABLE();
|
||||
|
||||
/* SUBGHZ interrupt Init */
|
||||
HAL_NVIC_SetPriority(SUBGHZ_Radio_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(SUBGHZ_Radio_IRQn);
|
||||
/* USER CODE BEGIN SUBGHZ_MspInit 1 */
|
||||
|
||||
/* USER CODE END SUBGHZ_MspInit 1 */
|
||||
|
@ -69,6 +73,9 @@ void HAL_SUBGHZ_MspDeInit(SUBGHZ_HandleTypeDef* subghzHandle)
|
|||
/* USER CODE END SUBGHZ_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_SUBGHZSPI_CLK_DISABLE();
|
||||
|
||||
/* SUBGHZ interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(SUBGHZ_Radio_IRQn);
|
||||
/* USER CODE BEGIN SUBGHZ_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END SUBGHZ_MspDeInit 1 */
|
||||
|
|
|
@ -22,9 +22,12 @@
|
|||
#include <stdio.h>
|
||||
#include "platform.h"
|
||||
#include "sys_app.h"
|
||||
#include "stm32_seq.h"
|
||||
#include "stm32_systime.h"
|
||||
#include "stm32_lpm.h"
|
||||
#include "timer_if.h"
|
||||
#include "utilities_def.h"
|
||||
#include "sys_debug.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
|
@ -41,6 +44,8 @@
|
|||
/* USER CODE END PTD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
#define MAX_TS_SIZE (int) 16
|
||||
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
@ -58,6 +63,18 @@ static uint8_t SYS_TimerInitialisedFlag = 0;
|
|||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/**
|
||||
* @brief Returns sec and msec based on the systime in use
|
||||
* @param buff to update with timestamp
|
||||
* @param size of updated buffer
|
||||
*/
|
||||
static void TimestampNow(uint8_t *buff, uint16_t *size);
|
||||
|
||||
/**
|
||||
* @brief it calls UTIL_ADV_TRACE_VSNPRINTF
|
||||
*/
|
||||
static void tiny_snprintf_like(char *buf, uint32_t maxsize, const char *strFormat, ...);
|
||||
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
@ -69,6 +86,51 @@ void SystemApp_Init(void)
|
|||
|
||||
/* USER CODE END SystemApp_Init_1 */
|
||||
|
||||
/* Ensure that MSI is wake-up system clock */
|
||||
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);
|
||||
|
||||
/*Initialize timer and RTC*/
|
||||
UTIL_TIMER_Init();
|
||||
SYS_TimerInitialisedFlag = 1;
|
||||
/* Initializes the SW probes pins and the monitor RF pins via Alternate Function */
|
||||
DBG_Init();
|
||||
|
||||
/*Initialize the terminal */
|
||||
UTIL_ADV_TRACE_Init();
|
||||
UTIL_ADV_TRACE_RegisterTimeStampFunction(TimestampNow);
|
||||
|
||||
/*Set verbose LEVEL*/
|
||||
UTIL_ADV_TRACE_SetVerboseLevel(VERBOSE_LEVEL);
|
||||
|
||||
/*Init low power manager*/
|
||||
UTIL_LPM_Init();
|
||||
/* Disable Stand-by mode */
|
||||
UTIL_LPM_SetOffMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE);
|
||||
|
||||
#if defined (LOW_POWER_DISABLE) && (LOW_POWER_DISABLE == 1)
|
||||
/* Disable Stop Mode */
|
||||
UTIL_LPM_SetStopMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE);
|
||||
#elif !defined (LOW_POWER_DISABLE)
|
||||
#error LOW_POWER_DISABLE not defined
|
||||
#endif /* LOW_POWER_DISABLE */
|
||||
|
||||
/* USER CODE BEGIN SystemApp_Init_2 */
|
||||
|
||||
/* USER CODE END SystemApp_Init_2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief redefines __weak function in stm32_seq.c such to enter low power
|
||||
*/
|
||||
void UTIL_SEQ_Idle(void)
|
||||
{
|
||||
/* USER CODE BEGIN UTIL_SEQ_Idle_1 */
|
||||
|
||||
/* USER CODE END UTIL_SEQ_Idle_1 */
|
||||
UTIL_LPM_EnterLowPower();
|
||||
/* USER CODE BEGIN UTIL_SEQ_Idle_2 */
|
||||
|
||||
/* USER CODE END UTIL_SEQ_Idle_2 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN EF */
|
||||
|
@ -76,21 +138,63 @@ void SystemApp_Init(void)
|
|||
/* USER CODE END EF */
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
|
||||
static void TimestampNow(uint8_t *buff, uint16_t *size)
|
||||
{
|
||||
/* USER CODE BEGIN TimestampNow_1 */
|
||||
|
||||
/* USER CODE END TimestampNow_1 */
|
||||
SysTime_t curtime = SysTimeGet();
|
||||
tiny_snprintf_like((char *)buff, MAX_TS_SIZE, "%ds%03d:", curtime.Seconds, curtime.SubSeconds);
|
||||
*size = strlen((char *)buff);
|
||||
/* USER CODE BEGIN TimestampNow_2 */
|
||||
|
||||
/* USER CODE END TimestampNow_2 */
|
||||
}
|
||||
|
||||
/* Disable StopMode when traces need to be printed */
|
||||
void UTIL_ADV_TRACE_PreSendHook(void)
|
||||
{
|
||||
/* USER CODE BEGIN UTIL_ADV_TRACE_PreSendHook_1 */
|
||||
|
||||
/* USER CODE END UTIL_ADV_TRACE_PreSendHook_1 */
|
||||
UTIL_LPM_SetStopMode((1 << CFG_LPM_UART_TX_Id), UTIL_LPM_DISABLE);
|
||||
/* USER CODE BEGIN UTIL_ADV_TRACE_PreSendHook_2 */
|
||||
|
||||
/* USER CODE END UTIL_ADV_TRACE_PreSendHook_2 */
|
||||
}
|
||||
/* Re-enable StopMode when traces have been printed */
|
||||
void UTIL_ADV_TRACE_PostSendHook(void)
|
||||
{
|
||||
/* USER CODE BEGIN UTIL_LPM_SetStopMode_1 */
|
||||
|
||||
/* USER CODE END UTIL_LPM_SetStopMode_1 */
|
||||
UTIL_LPM_SetStopMode((1 << CFG_LPM_UART_TX_Id), UTIL_LPM_ENABLE);
|
||||
/* USER CODE BEGIN UTIL_LPM_SetStopMode_2 */
|
||||
|
||||
/* USER CODE END UTIL_LPM_SetStopMode_2 */
|
||||
}
|
||||
|
||||
static void tiny_snprintf_like(char *buf, uint32_t maxsize, const char *strFormat, ...)
|
||||
{
|
||||
/* USER CODE BEGIN tiny_snprintf_like_1 */
|
||||
|
||||
/* USER CODE END tiny_snprintf_like_1 */
|
||||
va_list vaArgs;
|
||||
va_start(vaArgs, strFormat);
|
||||
UTIL_ADV_TRACE_VSNPRINTF(buf, maxsize, strFormat, vaArgs);
|
||||
va_end(vaArgs);
|
||||
/* USER CODE BEGIN tiny_snprintf_like_2 */
|
||||
|
||||
/* USER CODE END tiny_snprintf_like_2 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN PrFD */
|
||||
|
||||
/* USER CODE END PrFD */
|
||||
|
||||
/* HAL overload functions ---------------------------------------------------------*/
|
||||
|
||||
/* Set #if 0 if you want to keep the default HAL instead overcharge them*/
|
||||
/* USER CODE BEGIN Overload_HAL_weaks_1 */
|
||||
#if 1
|
||||
/* USER CODE END Overload_HAL_weaks_1 */
|
||||
|
||||
/* USER CODE BEGIN Overload_HAL_weaks_1a */
|
||||
|
||||
/* USER CODE END Overload_HAL_weaks_1a */
|
||||
|
||||
/**
|
||||
* @note This function overwrites the __weak one from HAL
|
||||
*/
|
||||
|
@ -138,8 +242,6 @@ void HAL_Delay(__IO uint32_t Delay)
|
|||
/* USER CODE END HAL_Delay_2 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN Overload_HAL_weaks_2 */
|
||||
#endif /* 1 default HAL overcharge */
|
||||
/* if needed set #if 0 and redefine here your own "Tick" functions*/
|
||||
/* USER CODE BEGIN Overload_HAL_weaks */
|
||||
|
||||
/* USER CODE END Overload_HAL_weaks_2 */
|
||||
/* USER CODE END Overload_HAL_weaks */
|
||||
|
|
|
@ -0,0 +1,187 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file sys_debug.c
|
||||
* @author MCD Application Team
|
||||
* @brief Configure probes pins RealTime debugging and JTAG/SerialWires for LowPower
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "platform.h"
|
||||
#include "sys_debug.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* External variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PTD */
|
||||
|
||||
/* USER CODE END PTD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PM */
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Initializes the SW probes pins and the monitor RF pins via Alternate Function
|
||||
*/
|
||||
void DBG_Init(void)
|
||||
{
|
||||
/* USER CODE BEGIN DBG_Init_1 */
|
||||
|
||||
/* USER CODE END DBG_Init_1 */
|
||||
|
||||
/* SW probes */
|
||||
#if defined (DEBUGGER_ENABLED) && ( DEBUGGER_ENABLED == 0 )
|
||||
HAL_DBGMCU_DisableDBGSleepMode();
|
||||
HAL_DBGMCU_DisableDBGStopMode();
|
||||
HAL_DBGMCU_DisableDBGStandbyMode();
|
||||
#elif defined (DEBUGGER_ENABLED) && ( DEBUGGER_ENABLED == 1 )
|
||||
/*Debug power up request wakeup CBDGPWRUPREQ*/
|
||||
LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_46);
|
||||
/* Disabled HAL_DBGMCU_ */
|
||||
HAL_DBGMCU_EnableDBGSleepMode();
|
||||
HAL_DBGMCU_EnableDBGStopMode();
|
||||
HAL_DBGMCU_EnableDBGStandbyMode();
|
||||
#elif !defined (DEBUGGER_ENABLED)
|
||||
#error "DEBUGGER_ENABLED not defined or out of range <0,1>"
|
||||
#endif /* DEBUGGER_OFF */
|
||||
|
||||
#if (DEBUG_SUBGHZSPI_MONITORING_ENABLED == 1) || \
|
||||
(DEBUG_RF_NRESET_ENABLED == 1) || \
|
||||
(DEBUG_RF_HSE32RDY_ENABLED == 1) || \
|
||||
(DEBUG_RF_SMPSRDY_ENABLED == 1) || \
|
||||
(DEBUG_RF_LDORDY_ENABLED == 1) || \
|
||||
(DEBUG_RF_DTB1_ENABLED == 1) || \
|
||||
(DEBUG_RF_BUSY_ENABLED == 1)
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
#endif
|
||||
|
||||
/* USER CODE BEGIN DBG_Init_2 */
|
||||
|
||||
/* USER CODE END DBG_Init_2 */
|
||||
|
||||
/* HW alternate functions for monitoring RF */
|
||||
|
||||
#if (DEBUG_SUBGHZSPI_MONITORING_ENABLED == 1)
|
||||
/*spi dbg*/
|
||||
GPIO_InitStruct.Pin = (GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DEBUG_SUBGHZSPI;
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
#endif /* DEBUG_SUBGHZSPI_MONITORING_ENABLED */
|
||||
|
||||
#if (DEBUG_RF_NRESET_ENABLED == 1)
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_11;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DEBUG_RF;
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
#endif /* DEBUG_RF_NRESET_ENABLED */
|
||||
|
||||
#if (DEBUG_RF_HSE32RDY_ENABLED == 1)
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DEBUG_RF;
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
#endif /* DEBUG_RF_HSE32RDY_ENABLED */
|
||||
|
||||
#if (DEBUG_RF_SMPSRDY_ENABLED == 1)
|
||||
GPIO_InitStruct.Pin = (GPIO_PIN_2);
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DEBUG_RF;
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
#endif /* DEBUG_RF_SMPSRDY_ENABLED */
|
||||
|
||||
#if (DEBUG_RF_LDORDY_ENABLED == 1)
|
||||
GPIO_InitStruct.Pin = (GPIO_PIN_4);
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DEBUG_RF;
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
#endif /* DEBUG_RF_LDORDY_ENABLED */
|
||||
|
||||
#if (DEBUG_RF_DTB1_ENABLED == 1)
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_3;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF13_DEBUG_RF;
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
#endif /* DEBUG_RF_DTB1_ENABLED */
|
||||
|
||||
#if (DEBUG_RF_BUSY_ENABLED == 1)
|
||||
/* Busy */
|
||||
GPIO_InitStruct.Pin = (GPIO_PIN_12);
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF6_RF_BUSY;
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE() ;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
#endif /* DEBUG_RF_BUSY_ENABLED */
|
||||
|
||||
/* USER CODE BEGIN DBG_Init_3 */
|
||||
|
||||
/* USER CODE END DBG_Init_3 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN EF */
|
||||
|
||||
/* USER CODE END EF */
|
||||
|
||||
/* Private Functions Definition -----------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PrFD */
|
||||
|
||||
/* USER CODE END PrFD */
|
|
@ -21,12 +21,20 @@
|
|||
/* Includes ------------------------------------------------------------------*/
|
||||
#include <math.h>
|
||||
#include "timer_if.h"
|
||||
#include "main.h" /*for STM32CubeMX generated RTC_N_PREDIV_S and RTC_N_PREDIV_A*/
|
||||
#include "rtc.h"
|
||||
#include "utilities_def.h"
|
||||
#include "stm32wlxx_ll_rtc.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* External variables ---------------------------------------------------------*/
|
||||
/**
|
||||
* @brief RTC handle
|
||||
*/
|
||||
extern RTC_HandleTypeDef hrtc;
|
||||
|
||||
/**
|
||||
* @brief Timer driver callbacks handler
|
||||
|
@ -72,16 +80,67 @@ const UTIL_SYSTIM_Driver_s UTIL_SYSTIMDriver =
|
|||
/* USER CODE END PTD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Minimum timeout delay of Alarm in ticks
|
||||
*/
|
||||
#define MIN_ALARM_DELAY 3
|
||||
|
||||
/**
|
||||
* @brief Backup seconds register
|
||||
*/
|
||||
#define RTC_BKP_SECONDS RTC_BKP_DR0
|
||||
|
||||
/**
|
||||
* @brief Backup subseconds register
|
||||
*/
|
||||
#define RTC_BKP_SUBSECONDS RTC_BKP_DR1
|
||||
|
||||
/**
|
||||
* @brief Backup msbticks register
|
||||
*/
|
||||
#define RTC_BKP_MSBTICKS RTC_BKP_DR2
|
||||
|
||||
/* #define RTIF_DEBUG */
|
||||
|
||||
/**
|
||||
* @brief Map UTIL_TIMER_IRQ can be overridden in utilities_conf.h to Map on Task rather then Isr
|
||||
*/
|
||||
#ifndef UTIL_TIMER_IRQ_MAP_INIT
|
||||
#define UTIL_TIMER_IRQ_MAP_INIT()
|
||||
#endif /* UTIL_TIMER_IRQ_MAP_INIT */
|
||||
|
||||
#ifndef UTIL_TIMER_IRQ_MAP_PROCESS
|
||||
#define UTIL_TIMER_IRQ_MAP_PROCESS() UTIL_TIMER_IRQ_Handler()
|
||||
#endif /* UTIL_TIMER_IRQ_MAP_PROCESS */
|
||||
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
#ifdef RTIF_DEBUG
|
||||
#include "sys_app.h" /*for app_log*/
|
||||
/**
|
||||
* @brief Post the RTC log string format to the circular queue for printing in using the polling mode
|
||||
*/
|
||||
#define TIMER_IF_DBG_PRINTF(...) do{ {UTIL_ADV_TRACE_COND_FSend(VLEVEL_ALWAYS, T_REG_OFF, TS_OFF, __VA_ARGS__);} }while(0);
|
||||
#else
|
||||
/**
|
||||
* @brief not used
|
||||
*/
|
||||
#define TIMER_IF_DBG_PRINTF(...)
|
||||
#endif /* RTIF_DEBUG */
|
||||
|
||||
/* USER CODE BEGIN PM */
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Indicates if the RTC is already Initialized or not
|
||||
*/
|
||||
static bool RTC_Initialized = false;
|
||||
|
||||
/**
|
||||
* @brief RtcTimerContext
|
||||
*/
|
||||
|
@ -92,6 +151,28 @@ static uint32_t RtcTimerContext = 0;
|
|||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/**
|
||||
* @brief Get rtc timer Value in rtc tick
|
||||
* @return val the rtc timer value (upcounting)
|
||||
*/
|
||||
static inline uint32_t GetTimerTicks(void);
|
||||
|
||||
/**
|
||||
* @brief Writes MSBticks to backup register
|
||||
* Absolute RTC time in tick is (MSBticks)<<32 + (32bits binary counter)
|
||||
* @note MSBticks incremented every time the 32bits RTC timer wraps around (~44days)
|
||||
* @param[in] MSBticks
|
||||
*/
|
||||
static void TIMER_IF_BkUp_Write_MSBticks(uint32_t MSBticks);
|
||||
|
||||
/**
|
||||
* @brief Reads MSBticks from backup register
|
||||
* Absolute RTC time in tick is (MSBticks)<<32 + (32bits binary counter)
|
||||
* @note MSBticks incremented every time the 32bits RTC timer wraps around (~44days)
|
||||
* @retval MSBticks
|
||||
*/
|
||||
static uint32_t TIMER_IF_BkUp_Read_MSBticks(void);
|
||||
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
@ -103,6 +184,34 @@ UTIL_TIMER_Status_t TIMER_IF_Init(void)
|
|||
/* USER CODE BEGIN TIMER_IF_Init */
|
||||
|
||||
/* USER CODE END TIMER_IF_Init */
|
||||
if (RTC_Initialized == false)
|
||||
{
|
||||
hrtc.IsEnabled.RtcFeatures = UINT32_MAX;
|
||||
/*Init RTC*/
|
||||
MX_RTC_Init();
|
||||
/*Stop Timer */
|
||||
TIMER_IF_StopTimer();
|
||||
/** DeActivate the Alarm A enabled by STM32CubeMX during MX_RTC_Init() */
|
||||
HAL_RTC_DeactivateAlarm(&hrtc, RTC_ALARM_A);
|
||||
/*overload RTC feature enable*/
|
||||
hrtc.IsEnabled.RtcFeatures = UINT32_MAX;
|
||||
|
||||
/*Enable Direct Read of the calendar registers (not through Shadow) */
|
||||
HAL_RTCEx_EnableBypassShadow(&hrtc);
|
||||
/*Initialize MSB ticks*/
|
||||
TIMER_IF_BkUp_Write_MSBticks(0);
|
||||
|
||||
TIMER_IF_SetTimerContext();
|
||||
|
||||
/* Register a task to associate to UTIL_TIMER_Irq() interrupt */
|
||||
UTIL_TIMER_IRQ_MAP_INIT();
|
||||
|
||||
RTC_Initialized = true;
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN TIMER_IF_Init_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_Init_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -112,6 +221,25 @@ UTIL_TIMER_Status_t TIMER_IF_StartTimer(uint32_t timeout)
|
|||
/* USER CODE BEGIN TIMER_IF_StartTimer */
|
||||
|
||||
/* USER CODE END TIMER_IF_StartTimer */
|
||||
RTC_AlarmTypeDef sAlarm = {0};
|
||||
/*Stop timer if one is already started*/
|
||||
TIMER_IF_StopTimer();
|
||||
timeout += RtcTimerContext;
|
||||
|
||||
TIMER_IF_DBG_PRINTF("Start timer: time=%d, alarm=%d\n\r", GetTimerTicks(), timeout);
|
||||
/* starts timer*/
|
||||
sAlarm.BinaryAutoClr = RTC_ALARMSUBSECONDBIN_AUTOCLR_NO;
|
||||
sAlarm.AlarmTime.SubSeconds = UINT32_MAX - timeout;
|
||||
sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
|
||||
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDBINMASK_NONE;
|
||||
sAlarm.Alarm = RTC_ALARM_A;
|
||||
if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIMER_IF_StartTimer_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_StartTimer_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -121,15 +249,28 @@ UTIL_TIMER_Status_t TIMER_IF_StopTimer(void)
|
|||
/* USER CODE BEGIN TIMER_IF_StopTimer */
|
||||
|
||||
/* USER CODE END TIMER_IF_StopTimer */
|
||||
/* Clear RTC Alarm Flag */
|
||||
__HAL_RTC_ALARM_CLEAR_FLAG(&hrtc, RTC_FLAG_ALRAF);
|
||||
/* Disable the Alarm A interrupt */
|
||||
HAL_RTC_DeactivateAlarm(&hrtc, RTC_ALARM_A);
|
||||
/*overload RTC feature enable*/
|
||||
hrtc.IsEnabled.RtcFeatures = UINT32_MAX;
|
||||
/* USER CODE BEGIN TIMER_IF_StopTimer_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_StopTimer_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint32_t TIMER_IF_SetTimerContext(void)
|
||||
{
|
||||
/*store time context*/
|
||||
RtcTimerContext = GetTimerTicks();
|
||||
|
||||
/* USER CODE BEGIN TIMER_IF_SetTimerContext */
|
||||
|
||||
/* USER CODE END TIMER_IF_SetTimerContext */
|
||||
|
||||
TIMER_IF_DBG_PRINTF("TIMER_IF_SetTimerContext=%d\n\r", RtcTimerContext);
|
||||
/*return time context*/
|
||||
return RtcTimerContext;
|
||||
}
|
||||
|
@ -140,6 +281,7 @@ uint32_t TIMER_IF_GetTimerContext(void)
|
|||
|
||||
/* USER CODE END TIMER_IF_GetTimerContext */
|
||||
|
||||
TIMER_IF_DBG_PRINTF("TIMER_IF_GetTimerContext=%d\n\r", RtcTimerContext);
|
||||
/*return time context*/
|
||||
return RtcTimerContext;
|
||||
}
|
||||
|
@ -150,6 +292,10 @@ uint32_t TIMER_IF_GetTimerElapsedTime(void)
|
|||
/* USER CODE BEGIN TIMER_IF_GetTimerElapsedTime */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetTimerElapsedTime */
|
||||
ret = ((uint32_t)(GetTimerTicks() - RtcTimerContext));
|
||||
/* USER CODE BEGIN TIMER_IF_GetTimerElapsedTime_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetTimerElapsedTime_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -159,6 +305,13 @@ uint32_t TIMER_IF_GetTimerValue(void)
|
|||
/* USER CODE BEGIN TIMER_IF_GetTimerValue */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetTimerValue */
|
||||
if (RTC_Initialized == true)
|
||||
{
|
||||
ret = GetTimerTicks();
|
||||
}
|
||||
/* USER CODE BEGIN TIMER_IF_GetTimerValue_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetTimerValue_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -168,6 +321,10 @@ uint32_t TIMER_IF_GetMinimumTimeout(void)
|
|||
/* USER CODE BEGIN TIMER_IF_GetMinimumTimeout */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetMinimumTimeout */
|
||||
ret = (MIN_ALARM_DELAY);
|
||||
/* USER CODE BEGIN TIMER_IF_GetMinimumTimeout_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetMinimumTimeout_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -177,6 +334,10 @@ uint32_t TIMER_IF_Convert_ms2Tick(uint32_t timeMilliSec)
|
|||
/* USER CODE BEGIN TIMER_IF_Convert_ms2Tick */
|
||||
|
||||
/* USER CODE END TIMER_IF_Convert_ms2Tick */
|
||||
ret = ((uint32_t)((((uint64_t) timeMilliSec) << RTC_N_PREDIV_S) / 1000));
|
||||
/* USER CODE BEGIN TIMER_IF_Convert_ms2Tick_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_Convert_ms2Tick_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -186,6 +347,10 @@ uint32_t TIMER_IF_Convert_Tick2ms(uint32_t tick)
|
|||
/* USER CODE BEGIN TIMER_IF_Convert_Tick2ms */
|
||||
|
||||
/* USER CODE END TIMER_IF_Convert_Tick2ms */
|
||||
ret = ((uint32_t)((((uint64_t)(tick)) * 1000) >> RTC_N_PREDIV_S));
|
||||
/* USER CODE BEGIN TIMER_IF_Convert_Tick2ms_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_Convert_Tick2ms_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -194,6 +359,43 @@ void TIMER_IF_DelayMs(uint32_t delay)
|
|||
/* USER CODE BEGIN TIMER_IF_DelayMs */
|
||||
|
||||
/* USER CODE END TIMER_IF_DelayMs */
|
||||
uint32_t delayTicks = TIMER_IF_Convert_ms2Tick(delay);
|
||||
uint32_t timeout = GetTimerTicks();
|
||||
|
||||
/* Wait delay ms */
|
||||
while (((GetTimerTicks() - timeout)) < delayTicks)
|
||||
{
|
||||
__NOP();
|
||||
}
|
||||
/* USER CODE BEGIN TIMER_IF_DelayMs_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_DelayMs_Last */
|
||||
}
|
||||
|
||||
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
|
||||
{
|
||||
/* USER CODE BEGIN HAL_RTC_AlarmAEventCallback */
|
||||
|
||||
/* USER CODE END HAL_RTC_AlarmAEventCallback */
|
||||
UTIL_TIMER_IRQ_MAP_PROCESS();
|
||||
/* USER CODE BEGIN HAL_RTC_AlarmAEventCallback_Last */
|
||||
|
||||
/* USER CODE END HAL_RTC_AlarmAEventCallback_Last */
|
||||
}
|
||||
|
||||
void HAL_RTCEx_SSRUEventCallback(RTC_HandleTypeDef *hrtc)
|
||||
{
|
||||
/* USER CODE BEGIN HAL_RTCEx_SSRUEventCallback */
|
||||
|
||||
/* USER CODE END HAL_RTCEx_SSRUEventCallback */
|
||||
/*called every 48 days with 1024 ticks per seconds*/
|
||||
TIMER_IF_DBG_PRINTF(">>Handler SSRUnderflow at %d\n\r", GetTimerTicks());
|
||||
/*Increment MSBticks*/
|
||||
uint32_t MSB_ticks = TIMER_IF_BkUp_Read_MSBticks();
|
||||
TIMER_IF_BkUp_Write_MSBticks(MSB_ticks + 1);
|
||||
/* USER CODE BEGIN HAL_RTCEx_SSRUEventCallback_Last */
|
||||
|
||||
/* USER CODE END HAL_RTCEx_SSRUEventCallback_Last */
|
||||
}
|
||||
|
||||
uint32_t TIMER_IF_GetTime(uint16_t *mSeconds)
|
||||
|
@ -202,6 +404,21 @@ uint32_t TIMER_IF_GetTime(uint16_t *mSeconds)
|
|||
/* USER CODE BEGIN TIMER_IF_GetTime */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetTime */
|
||||
uint64_t ticks;
|
||||
uint32_t timerValueLsb = GetTimerTicks();
|
||||
uint32_t timerValueMSB = TIMER_IF_BkUp_Read_MSBticks();
|
||||
|
||||
ticks = (((uint64_t) timerValueMSB) << 32) + timerValueLsb;
|
||||
|
||||
seconds = (uint32_t)(ticks >> RTC_N_PREDIV_S);
|
||||
|
||||
ticks = (uint32_t) ticks & RTC_PREDIV_S;
|
||||
|
||||
*mSeconds = TIMER_IF_Convert_Tick2ms(ticks);
|
||||
|
||||
/* USER CODE BEGIN TIMER_IF_GetTime_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_GetTime_Last */
|
||||
return seconds;
|
||||
}
|
||||
|
||||
|
@ -210,6 +427,10 @@ void TIMER_IF_BkUp_Write_Seconds(uint32_t Seconds)
|
|||
/* USER CODE BEGIN TIMER_IF_BkUp_Write_Seconds */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Write_Seconds */
|
||||
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_SECONDS, Seconds);
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Write_Seconds_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Write_Seconds_Last */
|
||||
}
|
||||
|
||||
void TIMER_IF_BkUp_Write_SubSeconds(uint32_t SubSeconds)
|
||||
|
@ -217,6 +438,10 @@ void TIMER_IF_BkUp_Write_SubSeconds(uint32_t SubSeconds)
|
|||
/* USER CODE BEGIN TIMER_IF_BkUp_Write_SubSeconds */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Write_SubSeconds */
|
||||
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_SUBSECONDS, SubSeconds);
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Write_SubSeconds_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Write_SubSeconds_Last */
|
||||
}
|
||||
|
||||
uint32_t TIMER_IF_BkUp_Read_Seconds(void)
|
||||
|
@ -225,6 +450,10 @@ uint32_t TIMER_IF_BkUp_Read_Seconds(void)
|
|||
/* USER CODE BEGIN TIMER_IF_BkUp_Read_Seconds */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Read_Seconds */
|
||||
ret = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_SECONDS);
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Read_Seconds_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Read_Seconds_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -234,6 +463,10 @@ uint32_t TIMER_IF_BkUp_Read_SubSeconds(void)
|
|||
/* USER CODE BEGIN TIMER_IF_BkUp_Read_SubSeconds */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Read_SubSeconds */
|
||||
ret = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_SUBSECONDS);
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Read_SubSeconds_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Read_SubSeconds_Last */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -242,6 +475,47 @@ uint32_t TIMER_IF_BkUp_Read_SubSeconds(void)
|
|||
/* USER CODE END EF */
|
||||
|
||||
/* Private functions ---------------------------------------------------------*/
|
||||
static void TIMER_IF_BkUp_Write_MSBticks(uint32_t MSBticks)
|
||||
{
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Write_MSBticks */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Write_MSBticks */
|
||||
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_MSBTICKS, MSBticks);
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Write_MSBticks_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Write_MSBticks_Last */
|
||||
}
|
||||
|
||||
static uint32_t TIMER_IF_BkUp_Read_MSBticks(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Read_MSBticks */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Read_MSBticks */
|
||||
uint32_t MSBticks;
|
||||
MSBticks = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_MSBTICKS);
|
||||
return MSBticks;
|
||||
/* USER CODE BEGIN TIMER_IF_BkUp_Read_MSBticks_Last */
|
||||
|
||||
/* USER CODE END TIMER_IF_BkUp_Read_MSBticks_Last */
|
||||
}
|
||||
|
||||
static inline uint32_t GetTimerTicks(void)
|
||||
{
|
||||
/* USER CODE BEGIN GetTimerTicks */
|
||||
|
||||
/* USER CODE END GetTimerTicks */
|
||||
uint32_t ssr = LL_RTC_TIME_GetSubSecond(RTC);
|
||||
/* read twice to make sure value it valid*/
|
||||
while (ssr != LL_RTC_TIME_GetSubSecond(RTC))
|
||||
{
|
||||
ssr = LL_RTC_TIME_GetSubSecond(RTC);
|
||||
}
|
||||
return UINT32_MAX - ssr;
|
||||
/* USER CODE BEGIN GetTimerTicks_Last */
|
||||
|
||||
/* USER CODE END GetTimerTicks_Last */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN PrFD */
|
||||
|
||||
/* USER CODE END PrFD */
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
/* USER CODE END 0 */
|
||||
|
||||
UART_HandleTypeDef hlpuart1;
|
||||
DMA_HandleTypeDef hdma_lpuart1_tx;
|
||||
DMA_HandleTypeDef hdma_lpuart1_rx;
|
||||
|
||||
/* LPUART1 init function */
|
||||
|
||||
|
@ -106,6 +108,44 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||
GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* LPUART1 DMA Init */
|
||||
/* LPUART1_TX Init */
|
||||
hdma_lpuart1_tx.Instance = DMA1_Channel1;
|
||||
hdma_lpuart1_tx.Init.Request = DMA_REQUEST_LPUART1_TX;
|
||||
hdma_lpuart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
||||
hdma_lpuart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
hdma_lpuart1_tx.Init.MemInc = DMA_MINC_ENABLE;
|
||||
hdma_lpuart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||
hdma_lpuart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||
hdma_lpuart1_tx.Init.Mode = DMA_NORMAL;
|
||||
hdma_lpuart1_tx.Init.Priority = DMA_PRIORITY_LOW;
|
||||
if (HAL_DMA_Init(&hdma_lpuart1_tx) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
__HAL_LINKDMA(uartHandle,hdmatx,hdma_lpuart1_tx);
|
||||
|
||||
/* LPUART1_RX Init */
|
||||
hdma_lpuart1_rx.Instance = DMA1_Channel2;
|
||||
hdma_lpuart1_rx.Init.Request = DMA_REQUEST_LPUART1_RX;
|
||||
hdma_lpuart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||
hdma_lpuart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
hdma_lpuart1_rx.Init.MemInc = DMA_MINC_ENABLE;
|
||||
hdma_lpuart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||
hdma_lpuart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||
hdma_lpuart1_rx.Init.Mode = DMA_NORMAL;
|
||||
hdma_lpuart1_rx.Init.Priority = DMA_PRIORITY_LOW;
|
||||
if (HAL_DMA_Init(&hdma_lpuart1_rx) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
__HAL_LINKDMA(uartHandle,hdmarx,hdma_lpuart1_rx);
|
||||
|
||||
/* LPUART1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(LPUART1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(LPUART1_IRQn);
|
||||
/* USER CODE BEGIN LPUART1_MspInit 1 */
|
||||
|
||||
/* USER CODE END LPUART1_MspInit 1 */
|
||||
|
@ -129,6 +169,12 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
|
||||
|
||||
/* LPUART1 DMA DeInit */
|
||||
HAL_DMA_DeInit(uartHandle->hdmatx);
|
||||
HAL_DMA_DeInit(uartHandle->hdmarx);
|
||||
|
||||
/* LPUART1 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(LPUART1_IRQn);
|
||||
/* USER CODE BEGIN LPUART1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END LPUART1_MspDeInit 1 */
|
||||
|
|
|
@ -0,0 +1,254 @@
|
|||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file usart_if.c
|
||||
* @author MCD Application Team
|
||||
* @brief Configuration of UART driver interface for hyperterminal communication
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "usart_if.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* External variables ---------------------------------------------------------*/
|
||||
/**
|
||||
* @brief DMA handle
|
||||
*/
|
||||
extern DMA_HandleTypeDef hdma_lpuart1_tx;
|
||||
|
||||
/**
|
||||
* @brief UART handle
|
||||
*/
|
||||
extern UART_HandleTypeDef hlpuart1;
|
||||
|
||||
/**
|
||||
* @brief buffer to receive 1 character
|
||||
*/
|
||||
uint8_t charRx;
|
||||
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/**
|
||||
* @brief Trace driver callbacks handler
|
||||
*/
|
||||
const UTIL_ADV_TRACE_Driver_s UTIL_TraceDriver =
|
||||
{
|
||||
vcom_Init,
|
||||
vcom_DeInit,
|
||||
vcom_ReceiveInit,
|
||||
vcom_Trace_DMA,
|
||||
};
|
||||
|
||||
/* USER CODE BEGIN PTD */
|
||||
|
||||
/* USER CODE END PTD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PM */
|
||||
|
||||
/* USER CODE END PM */
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/**
|
||||
* @brief TX complete callback
|
||||
* @return none
|
||||
*/
|
||||
static void (*TxCpltCallback)(void *);
|
||||
/**
|
||||
* @brief RX complete callback
|
||||
* @param rxChar ptr of chars buffer sent by user
|
||||
* @param size buffer size
|
||||
* @param error errorcode
|
||||
* @return none
|
||||
*/
|
||||
static void (*RxCpltCallback)(uint8_t *rxChar, uint16_t size, uint8_t error);
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
/* Exported functions --------------------------------------------------------*/
|
||||
|
||||
UTIL_ADV_TRACE_Status_t vcom_Init(void (*cb)(void *))
|
||||
{
|
||||
/* USER CODE BEGIN vcom_Init_1 */
|
||||
|
||||
/* USER CODE END vcom_Init_1 */
|
||||
TxCpltCallback = cb;
|
||||
MX_DMA_Init();
|
||||
MX_LPUART1_UART_Init();
|
||||
LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_28);
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE BEGIN vcom_Init_2 */
|
||||
|
||||
/* USER CODE END vcom_Init_2 */
|
||||
}
|
||||
|
||||
UTIL_ADV_TRACE_Status_t vcom_DeInit(void)
|
||||
{
|
||||
/* USER CODE BEGIN vcom_DeInit_1 */
|
||||
|
||||
/* USER CODE END vcom_DeInit_1 */
|
||||
/* ##-1- Reset peripherals ################################################## */
|
||||
__HAL_RCC_LPUART1_FORCE_RESET();
|
||||
__HAL_RCC_LPUART1_RELEASE_RESET();
|
||||
|
||||
/* ##-2- MspDeInit ################################################## */
|
||||
HAL_UART_MspDeInit(&hlpuart1);
|
||||
|
||||
/* ##-3- Disable the NVIC for DMA ########################################### */
|
||||
/* USER CODE BEGIN 1 */
|
||||
HAL_NVIC_DisableIRQ(DMA1_Channel5_IRQn);
|
||||
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE END 1 */
|
||||
/* USER CODE BEGIN vcom_DeInit_2 */
|
||||
|
||||
/* USER CODE END vcom_DeInit_2 */
|
||||
}
|
||||
|
||||
void vcom_Trace(uint8_t *p_data, uint16_t size)
|
||||
{
|
||||
/* USER CODE BEGIN vcom_Trace_1 */
|
||||
|
||||
/* USER CODE END vcom_Trace_1 */
|
||||
HAL_UART_Transmit(&hlpuart1, p_data, size, 1000);
|
||||
/* USER CODE BEGIN vcom_Trace_2 */
|
||||
|
||||
/* USER CODE END vcom_Trace_2 */
|
||||
}
|
||||
|
||||
UTIL_ADV_TRACE_Status_t vcom_Trace_DMA(uint8_t *p_data, uint16_t size)
|
||||
{
|
||||
/* USER CODE BEGIN vcom_Trace_DMA_1 */
|
||||
|
||||
/* USER CODE END vcom_Trace_DMA_1 */
|
||||
HAL_UART_Transmit_DMA(&hlpuart1, p_data, size);
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE BEGIN vcom_Trace_DMA_2 */
|
||||
|
||||
/* USER CODE END vcom_Trace_DMA_2 */
|
||||
}
|
||||
|
||||
UTIL_ADV_TRACE_Status_t vcom_ReceiveInit(void (*RxCb)(uint8_t *rxChar, uint16_t size, uint8_t error))
|
||||
{
|
||||
/* USER CODE BEGIN vcom_ReceiveInit_1 */
|
||||
|
||||
/* USER CODE END vcom_ReceiveInit_1 */
|
||||
UART_WakeUpTypeDef WakeUpSelection;
|
||||
|
||||
/*record call back*/
|
||||
RxCpltCallback = RxCb;
|
||||
|
||||
/*Set wakeUp event on start bit*/
|
||||
WakeUpSelection.WakeUpEvent = UART_WAKEUP_ON_STARTBIT;
|
||||
|
||||
HAL_UARTEx_StopModeWakeUpSourceConfig(&hlpuart1, WakeUpSelection);
|
||||
|
||||
/* Make sure that no UART transfer is on-going */
|
||||
while (__HAL_UART_GET_FLAG(&hlpuart1, USART_ISR_BUSY) == SET);
|
||||
|
||||
/* Make sure that UART is ready to receive) */
|
||||
while (__HAL_UART_GET_FLAG(&hlpuart1, USART_ISR_REACK) == RESET);
|
||||
|
||||
/* Enable USART interrupt */
|
||||
__HAL_UART_ENABLE_IT(&hlpuart1, UART_IT_WUF);
|
||||
|
||||
/*Enable wakeup from stop mode*/
|
||||
HAL_UARTEx_EnableStopMode(&hlpuart1);
|
||||
|
||||
/*Start LPUART receive on IT*/
|
||||
HAL_UART_Receive_IT(&hlpuart1, &charRx, 1);
|
||||
|
||||
return UTIL_ADV_TRACE_OK;
|
||||
/* USER CODE BEGIN vcom_ReceiveInit_2 */
|
||||
|
||||
/* USER CODE END vcom_ReceiveInit_2 */
|
||||
}
|
||||
|
||||
void vcom_Resume(void)
|
||||
{
|
||||
/* USER CODE BEGIN vcom_Resume_1 */
|
||||
|
||||
/* USER CODE END vcom_Resume_1 */
|
||||
/*to re-enable lost DMA settings*/
|
||||
if (HAL_DMA_Init(&hdma_lpuart1_tx) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN vcom_Resume_2 */
|
||||
|
||||
/* USER CODE END vcom_Resume_2 */
|
||||
}
|
||||
|
||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
/* USER CODE BEGIN HAL_UART_TxCpltCallback_1 */
|
||||
|
||||
/* USER CODE END HAL_UART_TxCpltCallback_1 */
|
||||
/* buffer transmission complete*/
|
||||
if (huart->Instance == LPUART1)
|
||||
{
|
||||
TxCpltCallback(NULL);
|
||||
}
|
||||
/* USER CODE BEGIN HAL_UART_TxCpltCallback_2 */
|
||||
|
||||
/* USER CODE END HAL_UART_TxCpltCallback_2 */
|
||||
}
|
||||
|
||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||
{
|
||||
/* USER CODE BEGIN HAL_UART_RxCpltCallback_1 */
|
||||
|
||||
/* USER CODE END HAL_UART_RxCpltCallback_1 */
|
||||
if (huart->Instance == LPUART1)
|
||||
{
|
||||
if ((NULL != RxCpltCallback) && (HAL_UART_ERROR_NONE == huart->ErrorCode))
|
||||
{
|
||||
RxCpltCallback(&charRx, 1, 0);
|
||||
}
|
||||
HAL_UART_Receive_IT(huart, &charRx, 1);
|
||||
}
|
||||
/* USER CODE BEGIN HAL_UART_RxCpltCallback_2 */
|
||||
|
||||
/* USER CODE END HAL_UART_RxCpltCallback_2 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN EF */
|
||||
|
||||
/* USER CODE END EF */
|
||||
|
||||
/* Private Functions Definition -----------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PrFD */
|
||||
|
||||
/* USER CODE END PrFD */
|
|
@ -5,6 +5,43 @@ ADC.SelectedChannel=ADC_CHANNEL_VREFINT|ADC_CHANNEL_VBAT
|
|||
CAD.formats=
|
||||
CAD.pinconfig=
|
||||
CAD.provider=
|
||||
Dma.LPUART1_RX.1.Direction=DMA_PERIPH_TO_MEMORY
|
||||
Dma.LPUART1_RX.1.EventEnable=DISABLE
|
||||
Dma.LPUART1_RX.1.Instance=DMA1_Channel2
|
||||
Dma.LPUART1_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.LPUART1_RX.1.MemInc=DMA_MINC_ENABLE
|
||||
Dma.LPUART1_RX.1.Mode=DMA_NORMAL
|
||||
Dma.LPUART1_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||
Dma.LPUART1_RX.1.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.LPUART1_RX.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING
|
||||
Dma.LPUART1_RX.1.Priority=DMA_PRIORITY_LOW
|
||||
Dma.LPUART1_RX.1.RequestNumber=1
|
||||
Dma.LPUART1_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
|
||||
Dma.LPUART1_RX.1.SignalID=NONE
|
||||
Dma.LPUART1_RX.1.SyncEnable=DISABLE
|
||||
Dma.LPUART1_RX.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
|
||||
Dma.LPUART1_RX.1.SyncRequestNumber=1
|
||||
Dma.LPUART1_RX.1.SyncSignalID=NONE
|
||||
Dma.LPUART1_TX.0.Direction=DMA_MEMORY_TO_PERIPH
|
||||
Dma.LPUART1_TX.0.EventEnable=DISABLE
|
||||
Dma.LPUART1_TX.0.Instance=DMA1_Channel1
|
||||
Dma.LPUART1_TX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.LPUART1_TX.0.MemInc=DMA_MINC_ENABLE
|
||||
Dma.LPUART1_TX.0.Mode=DMA_NORMAL
|
||||
Dma.LPUART1_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
||||
Dma.LPUART1_TX.0.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.LPUART1_TX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING
|
||||
Dma.LPUART1_TX.0.Priority=DMA_PRIORITY_LOW
|
||||
Dma.LPUART1_TX.0.RequestNumber=1
|
||||
Dma.LPUART1_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
|
||||
Dma.LPUART1_TX.0.SignalID=NONE
|
||||
Dma.LPUART1_TX.0.SyncEnable=DISABLE
|
||||
Dma.LPUART1_TX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
|
||||
Dma.LPUART1_TX.0.SyncRequestNumber=1
|
||||
Dma.LPUART1_TX.0.SyncSignalID=NONE
|
||||
Dma.Request0=LPUART1_TX
|
||||
Dma.Request1=LPUART1_RX
|
||||
Dma.RequestsNb=2
|
||||
File.Version=6
|
||||
GPIO.groupedBy=Group By Peripherals
|
||||
KeepUserPlacement=false
|
||||
|
@ -18,57 +55,70 @@ Mcu.CPN=STM32WLE5CBU6
|
|||
Mcu.Family=STM32WL
|
||||
Mcu.IP0=ADC
|
||||
Mcu.IP1=ADV_TRACE
|
||||
Mcu.IP10=SUBGHZ_PHY
|
||||
Mcu.IP11=SYS
|
||||
Mcu.IP12=TIMER
|
||||
Mcu.IP13=TINY_LPM
|
||||
Mcu.IP10=SUBGHZ
|
||||
Mcu.IP11=SUBGHZ_PHY
|
||||
Mcu.IP12=SYS
|
||||
Mcu.IP13=TIMER
|
||||
Mcu.IP14=TINY_LPM
|
||||
Mcu.IP2=DEBUG
|
||||
Mcu.IP3=LPUART1
|
||||
Mcu.IP4=MISC
|
||||
Mcu.IP5=NVIC
|
||||
Mcu.IP6=RCC
|
||||
Mcu.IP7=RTC
|
||||
Mcu.IP8=SEQUENCER
|
||||
Mcu.IP9=SUBGHZ
|
||||
Mcu.IPNb=14
|
||||
Mcu.IP3=DMA
|
||||
Mcu.IP4=LPUART1
|
||||
Mcu.IP5=MISC
|
||||
Mcu.IP6=NVIC
|
||||
Mcu.IP7=RCC
|
||||
Mcu.IP8=RTC
|
||||
Mcu.IP9=SEQUENCER
|
||||
Mcu.IPNb=15
|
||||
Mcu.Name=STM32WLE5CBUx
|
||||
Mcu.Package=UFQFPN48
|
||||
Mcu.Pin0=PA2
|
||||
Mcu.Pin1=PA3
|
||||
Mcu.Pin10=VP_ADV_TRACE_VS_ADV_TRACE
|
||||
Mcu.Pin11=VP_MISC_VS_MISC
|
||||
Mcu.Pin12=VP_RTC_VS_RTC_Activate
|
||||
Mcu.Pin13=VP_RTC_VS_RTC_Calendar
|
||||
Mcu.Pin14=VP_SEQUENCER_VS_SEQUENCER
|
||||
Mcu.Pin15=VP_SUBGHZ_VS_SUBGHZ
|
||||
Mcu.Pin16=VP_SUBGHZ_PHY_VS_SubGhzPhy
|
||||
Mcu.Pin17=VP_SYS_VS_Systick
|
||||
Mcu.Pin18=VP_TIMER_VS_TIMER
|
||||
Mcu.Pin19=VP_TINY_LPM_VS_TINY_LPM
|
||||
Mcu.Pin2=OSC_IN
|
||||
Mcu.Pin3=OSC_OUT
|
||||
Mcu.Pin4=PA13
|
||||
Mcu.Pin5=PC14-OSC32_IN
|
||||
Mcu.Pin6=PC15-OSC32_OUT
|
||||
Mcu.Pin7=PA14
|
||||
Mcu.Pin8=VP_ADC_Vref_Input
|
||||
Mcu.Pin9=VP_ADC_Vbat_Input
|
||||
Mcu.PinsNb=20
|
||||
Mcu.Pin0=PB3
|
||||
Mcu.Pin1=PB4
|
||||
Mcu.Pin10=PA14
|
||||
Mcu.Pin11=VP_ADC_Vref_Input
|
||||
Mcu.Pin12=VP_ADC_Vbat_Input
|
||||
Mcu.Pin13=VP_ADV_TRACE_VS_ADV_TRACE
|
||||
Mcu.Pin14=VP_MISC_VS_MISC
|
||||
Mcu.Pin15=VP_RTC_VS_RTC_Activate
|
||||
Mcu.Pin16=VP_RTC_VS_RTC_Calendar
|
||||
Mcu.Pin17=VP_RTC_VS_RTC_Alarm_A_Intern
|
||||
Mcu.Pin18=VP_SEQUENCER_VS_SEQUENCER
|
||||
Mcu.Pin19=VP_SUBGHZ_VS_SUBGHZ
|
||||
Mcu.Pin2=PB5
|
||||
Mcu.Pin20=VP_SUBGHZ_PHY_VS_SubGhzPhy
|
||||
Mcu.Pin21=VP_SYS_VS_Systick
|
||||
Mcu.Pin22=VP_TIMER_VS_TIMER
|
||||
Mcu.Pin23=VP_TINY_LPM_VS_TINY_LPM
|
||||
Mcu.Pin3=PA2
|
||||
Mcu.Pin4=PA3
|
||||
Mcu.Pin5=OSC_IN
|
||||
Mcu.Pin6=OSC_OUT
|
||||
Mcu.Pin7=PA13
|
||||
Mcu.Pin8=PC14-OSC32_IN
|
||||
Mcu.Pin9=PC15-OSC32_OUT
|
||||
Mcu.PinsNb=24
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
Mcu.UserConstants=RTC_N_PREDIV_S,10;RTC_PREDIV_S,((1<<RTC_N_PREDIV_S)-1);RTC_PREDIV_A,((1<<(15-RTC_N_PREDIV_S))-1)
|
||||
Mcu.UserName=STM32WLE5CBUx
|
||||
MxCube.Version=6.8.1
|
||||
MxDb.Version=DB.6.0.81
|
||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
|
||||
NVIC.DMA1_Channel2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.ForceEnableDMAVector=true
|
||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.LPUART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false
|
||||
NVIC.PVD_PVM_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
||||
NVIC.RCC_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:true
|
||||
NVIC.RTC_Alarm_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.SUBGHZ_Radio_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
||||
NVIC.TAMP_STAMP_LSECSS_SSRU_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
OSC_IN.Mode=HSE-External-Oscillator
|
||||
OSC_IN.Signal=RCC_OSC_IN
|
||||
|
@ -84,6 +134,18 @@ PA2.Signal=LPUART1_TX
|
|||
PA3.Locked=true
|
||||
PA3.Mode=Asynchronous
|
||||
PA3.Signal=LPUART1_RX
|
||||
PB3.GPIOParameters=GPIO_Label
|
||||
PB3.GPIO_Label=LED3
|
||||
PB3.Locked=true
|
||||
PB3.Signal=GPIO_Output
|
||||
PB4.GPIOParameters=GPIO_Label
|
||||
PB4.GPIO_Label=LED2
|
||||
PB4.Locked=true
|
||||
PB4.Signal=GPIO_Output
|
||||
PB5.GPIOParameters=GPIO_Label
|
||||
PB5.GPIO_Label=LED1
|
||||
PB5.Locked=true
|
||||
PB5.Signal=GPIO_Output
|
||||
PC14-OSC32_IN.Mode=LSE-External-Oscillator
|
||||
PC14-OSC32_IN.Signal=RCC_OSC32_IN
|
||||
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
|
||||
|
@ -124,7 +186,7 @@ ProjectManager.StackSize=0x400
|
|||
ProjectManager.TargetToolchain=Makefile
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UnderRoot=false
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_RTC_Init-RTC-false-HAL-true,4-MX_SUBGHZ_Init-SUBGHZ-true-HAL-false,5-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,6-MX_ADC_Init-ADC-false-HAL-true,7-MX_SubGHz_Phy_Init-SUBGHZ_PHY-false-HAL-false
|
||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_SUBGHZ_Init-SUBGHZ-true-HAL-false,6-MX_LPUART1_UART_Init-LPUART1-false-HAL-true,7-MX_ADC_Init-ADC-false-HAL-true,8-MX_SubGHz_Phy_Init-SUBGHZ_PHY-false-HAL-false
|
||||
RCC.AHBFreq_Value=48000000
|
||||
RCC.APB1Freq_Value=48000000
|
||||
RCC.APB1TimFreq_Value=48000000
|
||||
|
@ -171,12 +233,38 @@ RCC.USART1Freq_Value=48000000
|
|||
RCC.USART2Freq_Value=48000000
|
||||
RCC.VCOInputFreq_Value=8000000
|
||||
RCC.VCOOutputFreq_Value=144000000
|
||||
RTC.BinMode=RTC_BINARY_NONE
|
||||
RTC.IPParameters=BinMode
|
||||
RTC.Alarm-Alarm\ A=RTC_ALARM_A
|
||||
RTC.AsynchPrediv=RTC_PREDIV_A
|
||||
RTC.BinMode=RTC_BINARY_ONLY
|
||||
RTC.BinaryAutoClr_A-Alarm\ A=RTC_ALARMSUBSECONDBIN_AUTOCLR_NO
|
||||
RTC.IPParameters=BinMode,AsynchPrediv,Alarm-Alarm A,BinaryAutoClr_A-Alarm A
|
||||
SUBGHZ_PHY.Activate_RADIO_BOARD_INTERFACE=Bsp
|
||||
SUBGHZ_PHY.IPParameters=Activate_RADIO_BOARD_INTERFACE,USE_RTC,USE_LPM
|
||||
SUBGHZ_PHY.USE_LPM=false
|
||||
SUBGHZ_PHY.USE_RTC=false
|
||||
SUBGHZ_PHY.IPParameters=Activate_RADIO_BOARD_INTERFACE,SUBGHZ_APPLICATION,LOW_POWER_DISABLE,RF_FREQUENCY,LORA_SPREADING_FACTOR
|
||||
SUBGHZ_PHY.LORA_SPREADING_FACTOR=9
|
||||
SUBGHZ_PHY.LOW_POWER_DISABLE=true
|
||||
SUBGHZ_PHY.RF_FREQUENCY=491975000
|
||||
SUBGHZ_PHY.SUBGHZ_APPLICATION=SUBGHZ_ADV_APPLICATION
|
||||
SubGHz_Phy.BSP.number=2
|
||||
SubGHz_Phy0.BSP.STBoard=false
|
||||
SubGHz_Phy0.BSP.api=Unknown
|
||||
SubGHz_Phy0.BSP.component=
|
||||
SubGHz_Phy0.BSP.condition=\!SEM_SUBGHZ_USER_APPLICATION | SEM_SUBGHZ_USE_RTC
|
||||
SubGHz_Phy0.BSP.instance=RTC
|
||||
SubGHz_Phy0.BSP.ip=RTC
|
||||
SubGHz_Phy0.BSP.mode=RTC Enabled
|
||||
SubGHz_Phy0.BSP.name=RTC
|
||||
SubGHz_Phy0.BSP.semaphore=
|
||||
SubGHz_Phy0.BSP.solution=RTC
|
||||
SubGHz_Phy1.BSP.STBoard=false
|
||||
SubGHz_Phy1.BSP.api=Unknown
|
||||
SubGHz_Phy1.BSP.component=
|
||||
SubGHz_Phy1.BSP.condition=\!SEM_SUBGHZ_USER_APPLICATION | SEM_SUBGHZ_USE_UART
|
||||
SubGHz_Phy1.BSP.instance=LPUART1
|
||||
SubGHz_Phy1.BSP.ip=(LPU|US)ART
|
||||
SubGHz_Phy1.BSP.mode=Asynchronous
|
||||
SubGHz_Phy1.BSP.name=USART
|
||||
SubGHz_Phy1.BSP.semaphore=
|
||||
SubGHz_Phy1.BSP.solution=LPUART1
|
||||
VP_ADC_Vbat_Input.Mode=IN-Vbat
|
||||
VP_ADC_Vbat_Input.Signal=ADC_Vbat_Input
|
||||
VP_ADC_Vref_Input.Mode=IN-Vrefint
|
||||
|
@ -187,6 +275,8 @@ VP_MISC_VS_MISC.Mode=MISC_Enabled
|
|||
VP_MISC_VS_MISC.Signal=MISC_VS_MISC
|
||||
VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
|
||||
VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
|
||||
VP_RTC_VS_RTC_Alarm_A_Intern.Mode=Alarm A
|
||||
VP_RTC_VS_RTC_Alarm_A_Intern.Signal=RTC_VS_RTC_Alarm_A_Intern
|
||||
VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
|
||||
VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
|
||||
VP_SEQUENCER_VS_SEQUENCER.Mode=SEQUENCER_Enabled
|
||||
|
|
|
@ -22,9 +22,12 @@
|
|||
#include "app_subghz_phy.h"
|
||||
#include "subghz_phy_app.h"
|
||||
#include "sys_app.h"
|
||||
#include "stm32_seq.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
#include "stm32_seq.h"
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* External variables ---------------------------------------------------------*/
|
||||
|
@ -79,9 +82,10 @@ void MX_SubGHz_Phy_Process(void)
|
|||
/* USER CODE BEGIN MX_SubGHz_Phy_Process_1 */
|
||||
|
||||
/* USER CODE END MX_SubGHz_Phy_Process_1 */
|
||||
/* USER CODE BEGIN MX_SubGHz_Phy_Process_OS */
|
||||
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
|
||||
/* USER CODE BEGIN MX_SubGHz_Phy_Process_2 */
|
||||
|
||||
/* USER CODE END MX_SubGHz_Phy_Process_OS */
|
||||
/* USER CODE END MX_SubGHz_Phy_Process_2 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN EF */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2023 STMicroelectronics.
|
||||
* Copyright (c) 2021 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
|
@ -25,7 +25,11 @@
|
|||
#include "radio.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
#include "stm32_timer.h"
|
||||
#include "stm32_seq.h"
|
||||
#include "utilities_def.h"
|
||||
#include "app_version.h"
|
||||
#include "subghz_phy_version.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* External variables ---------------------------------------------------------*/
|
||||
|
@ -35,11 +39,39 @@
|
|||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PTD */
|
||||
typedef enum
|
||||
{
|
||||
RX,
|
||||
RX_TIMEOUT,
|
||||
RX_ERROR,
|
||||
TX,
|
||||
TX_TIMEOUT,
|
||||
} States_t;
|
||||
|
||||
/* USER CODE END PTD */
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
/* Configurations */
|
||||
/*Timeout*/
|
||||
#define RX_TIMEOUT_VALUE 3000
|
||||
#define TX_TIMEOUT_VALUE 3000
|
||||
/* PING string*/
|
||||
#define PING "PING"
|
||||
/* PONG string*/
|
||||
#define PONG "PONG"
|
||||
/*Size of the payload to be sent*/
|
||||
/* Size must be greater of equal the PING and PONG*/
|
||||
#define MAX_APP_BUFFER_SIZE 255
|
||||
#if (PAYLOAD_LEN > MAX_APP_BUFFER_SIZE)
|
||||
#error PAYLOAD_LEN must be less or equal than MAX_APP_BUFFER_SIZE
|
||||
#endif /* (PAYLOAD_LEN > MAX_APP_BUFFER_SIZE) */
|
||||
/* wait for remote to be in Rx, before sending a Tx frame*/
|
||||
#define RX_TIME_MARGIN 200
|
||||
/* Afc bandwidth in Hz */
|
||||
#define FSK_AFC_BANDWIDTH 83333
|
||||
/* LED blink Period*/
|
||||
#define LED_PERIOD_MS 200
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
|
@ -53,6 +85,26 @@
|
|||
static RadioEvents_t RadioEvents;
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
/*Ping Pong FSM states */
|
||||
static States_t State = RX;
|
||||
/* App Rx Buffer*/
|
||||
static uint8_t BufferRx[MAX_APP_BUFFER_SIZE];
|
||||
/* App Tx Buffer*/
|
||||
static uint8_t BufferTx[MAX_APP_BUFFER_SIZE];
|
||||
/* Last Received Buffer Size*/
|
||||
uint16_t RxBufferSize = 0;
|
||||
/* Last Received packer Rssi*/
|
||||
int8_t RssiValue = 0;
|
||||
/* Last Received packer SNR (in Lora modulation)*/
|
||||
int8_t SnrValue = 0;
|
||||
/* Led Timers objects*/
|
||||
static UTIL_TIMER_Object_t timerLed;
|
||||
/* device state. Master: true, Slave: false*/
|
||||
bool isMaster = true;
|
||||
/* random delay to make sure 2 devices will sync*/
|
||||
/* the closest the random delays are, the longer it will
|
||||
take for the devices to sync when started simultaneously*/
|
||||
static int32_t random_delay;
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
|
@ -87,6 +139,16 @@ static void OnRxTimeout(void);
|
|||
static void OnRxError(void);
|
||||
|
||||
/* USER CODE BEGIN PFP */
|
||||
/**
|
||||
* @brief Function executed on when led timer elapses
|
||||
* @param context ptr of LED context
|
||||
*/
|
||||
static void OnledEvent(void *context);
|
||||
|
||||
/**
|
||||
* @brief PingPong state machine implementation
|
||||
*/
|
||||
static void PingPong_Process(void);
|
||||
|
||||
/* USER CODE END PFP */
|
||||
|
||||
|
@ -95,6 +157,22 @@ void SubghzApp_Init(void)
|
|||
{
|
||||
/* USER CODE BEGIN SubghzApp_Init_1 */
|
||||
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "\n\rPING PONG\n\r");
|
||||
/* Get SubGHY_Phy APP version*/
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "APPLICATION_VERSION: V%X.%X.%X\r\n",
|
||||
(uint8_t)(APP_VERSION_MAIN),
|
||||
(uint8_t)(APP_VERSION_SUB1),
|
||||
(uint8_t)(APP_VERSION_SUB2));
|
||||
|
||||
/* Get MW SubGhz_Phy info */
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "MW_RADIO_VERSION: V%X.%X.%X\r\n",
|
||||
(uint8_t)(SUBGHZ_PHY_VERSION_MAIN),
|
||||
(uint8_t)(SUBGHZ_PHY_VERSION_SUB1),
|
||||
(uint8_t)(SUBGHZ_PHY_VERSION_SUB2));
|
||||
|
||||
/* Led Timers*/
|
||||
UTIL_TIMER_Create(&timerLed, LED_PERIOD_MS, UTIL_TIMER_ONESHOT, OnledEvent, NULL);
|
||||
UTIL_TIMER_Start(&timerLed);
|
||||
/* USER CODE END SubghzApp_Init_1 */
|
||||
|
||||
/* Radio initialization */
|
||||
|
@ -107,7 +185,62 @@ void SubghzApp_Init(void)
|
|||
Radio.Init(&RadioEvents);
|
||||
|
||||
/* USER CODE BEGIN SubghzApp_Init_2 */
|
||||
/*calculate random delay for synchronization*/
|
||||
random_delay = (Radio.Random()) >> 22; /*10bits random e.g. from 0 to 1023 ms*/
|
||||
|
||||
/* Radio Set frequency */
|
||||
Radio.SetChannel(RF_FREQUENCY);
|
||||
|
||||
/* Radio configuration */
|
||||
#if ((USE_MODEM_LORA == 1) && (USE_MODEM_FSK == 0))
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "---------------\n\r");
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "LORA_MODULATION\n\r");
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "LORA_BW=%d kHz\n\r", (1 << LORA_BANDWIDTH) * 125);
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "LORA_SF=%d\n\r", LORA_SPREADING_FACTOR);
|
||||
|
||||
Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
|
||||
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
|
||||
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
|
||||
true, 0, 0, LORA_IQ_INVERSION_ON, TX_TIMEOUT_VALUE);
|
||||
|
||||
Radio.SetRxConfig(MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
|
||||
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
|
||||
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
|
||||
0, true, 0, 0, LORA_IQ_INVERSION_ON, true);
|
||||
|
||||
Radio.SetMaxPayloadLength(MODEM_LORA, MAX_APP_BUFFER_SIZE);
|
||||
|
||||
#elif ((USE_MODEM_LORA == 0) && (USE_MODEM_FSK == 1))
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "---------------\n\r");
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "FSK_MODULATION\n\r");
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "FSK_BW=%d Hz\n\r", FSK_BANDWIDTH);
|
||||
APP_LOG(TS_OFF, VLEVEL_M, "FSK_DR=%d bits/s\n\r", FSK_DATARATE);
|
||||
|
||||
Radio.SetTxConfig(MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
|
||||
FSK_DATARATE, 0,
|
||||
FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
|
||||
true, 0, 0, 0, TX_TIMEOUT_VALUE);
|
||||
|
||||
Radio.SetRxConfig(MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
|
||||
0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
|
||||
0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, true,
|
||||
0, 0, false, true);
|
||||
|
||||
Radio.SetMaxPayloadLength(MODEM_FSK, MAX_APP_BUFFER_SIZE);
|
||||
|
||||
#else
|
||||
#error "Please define a modulation in the subghz_phy_app.h file."
|
||||
#endif /* USE_MODEM_LORA | USE_MODEM_FSK */
|
||||
|
||||
/*fills tx buffer*/
|
||||
memset(BufferTx, 0x0, MAX_APP_BUFFER_SIZE);
|
||||
|
||||
APP_LOG(TS_ON, VLEVEL_L, "rand=%d\n\r", random_delay);
|
||||
/*starts reception*/
|
||||
Radio.Rx(RX_TIMEOUT_VALUE + random_delay);
|
||||
|
||||
/*register task to to be run in while(1) after Radio IT*/
|
||||
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), UTIL_SEQ_RFU, PingPong_Process);
|
||||
/* USER CODE END SubghzApp_Init_2 */
|
||||
}
|
||||
|
||||
|
@ -119,33 +252,202 @@ void SubghzApp_Init(void)
|
|||
static void OnTxDone(void)
|
||||
{
|
||||
/* USER CODE BEGIN OnTxDone */
|
||||
APP_LOG(TS_ON, VLEVEL_L, "OnTxDone\n\r");
|
||||
/* Update the State of the FSM*/
|
||||
State = TX;
|
||||
/* Run PingPong process in background*/
|
||||
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);
|
||||
/* USER CODE END OnTxDone */
|
||||
}
|
||||
|
||||
static void OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t LoraSnr_FskCfo)
|
||||
{
|
||||
/* USER CODE BEGIN OnRxDone */
|
||||
APP_LOG(TS_ON, VLEVEL_L, "OnRxDone\n\r");
|
||||
#if ((USE_MODEM_LORA == 1) && (USE_MODEM_FSK == 0))
|
||||
APP_LOG(TS_ON, VLEVEL_L, "RssiValue=%d dBm, SnrValue=%ddB\n\r", rssi, LoraSnr_FskCfo);
|
||||
/* Record payload Signal to noise ratio in Lora*/
|
||||
SnrValue = LoraSnr_FskCfo;
|
||||
#endif /* USE_MODEM_LORA | USE_MODEM_FSK */
|
||||
#if ((USE_MODEM_LORA == 0) && (USE_MODEM_FSK == 1))
|
||||
APP_LOG(TS_ON, VLEVEL_L, "RssiValue=%d dBm, Cfo=%dkHz\n\r", rssi, LoraSnr_FskCfo);
|
||||
SnrValue = 0; /*not applicable in GFSK*/
|
||||
#endif /* USE_MODEM_LORA | USE_MODEM_FSK */
|
||||
/* Update the State of the FSM*/
|
||||
State = RX;
|
||||
/* Clear BufferRx*/
|
||||
memset(BufferRx, 0, MAX_APP_BUFFER_SIZE);
|
||||
/* Record payload size*/
|
||||
RxBufferSize = size;
|
||||
if (RxBufferSize <= MAX_APP_BUFFER_SIZE)
|
||||
{
|
||||
memcpy(BufferRx, payload, RxBufferSize);
|
||||
}
|
||||
/* Record Received Signal Strength*/
|
||||
RssiValue = rssi;
|
||||
/* Record payload content*/
|
||||
APP_LOG(TS_ON, VLEVEL_H, "payload. size=%d \n\r", size);
|
||||
for (int32_t i = 0; i < PAYLOAD_LEN; i++)
|
||||
{
|
||||
APP_LOG(TS_OFF, VLEVEL_H, "%02X", BufferRx[i]);
|
||||
if (i % 16 == 15)
|
||||
{
|
||||
APP_LOG(TS_OFF, VLEVEL_H, "\n\r");
|
||||
}
|
||||
}
|
||||
APP_LOG(TS_OFF, VLEVEL_H, "\n\r");
|
||||
/* Run PingPong process in background*/
|
||||
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);
|
||||
/* USER CODE END OnRxDone */
|
||||
}
|
||||
|
||||
static void OnTxTimeout(void)
|
||||
{
|
||||
/* USER CODE BEGIN OnTxTimeout */
|
||||
APP_LOG(TS_ON, VLEVEL_L, "OnTxTimeout\n\r");
|
||||
/* Update the State of the FSM*/
|
||||
State = TX_TIMEOUT;
|
||||
/* Run PingPong process in background*/
|
||||
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);
|
||||
/* USER CODE END OnTxTimeout */
|
||||
}
|
||||
|
||||
static void OnRxTimeout(void)
|
||||
{
|
||||
/* USER CODE BEGIN OnRxTimeout */
|
||||
APP_LOG(TS_ON, VLEVEL_L, "OnRxTimeout\n\r");
|
||||
/* Update the State of the FSM*/
|
||||
State = RX_TIMEOUT;
|
||||
/* Run PingPong process in background*/
|
||||
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);
|
||||
/* USER CODE END OnRxTimeout */
|
||||
}
|
||||
|
||||
static void OnRxError(void)
|
||||
{
|
||||
/* USER CODE BEGIN OnRxError */
|
||||
APP_LOG(TS_ON, VLEVEL_L, "OnRxError\n\r");
|
||||
/* Update the State of the FSM*/
|
||||
State = RX_ERROR;
|
||||
/* Run PingPong process in background*/
|
||||
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_SubGHz_Phy_App_Process), CFG_SEQ_Prio_0);
|
||||
/* USER CODE END OnRxError */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN PrFD */
|
||||
static void PingPong_Process(void)
|
||||
{
|
||||
Radio.Sleep();
|
||||
|
||||
switch (State)
|
||||
{
|
||||
case RX:
|
||||
|
||||
if (isMaster == true)
|
||||
{
|
||||
if (RxBufferSize > 0)
|
||||
{
|
||||
if (strncmp((const char *)BufferRx, PONG, sizeof(PONG) - 1) == 0)
|
||||
{
|
||||
UTIL_TIMER_Stop(&timerLed);
|
||||
/* switch off green led */
|
||||
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); /* LED_GREEN */
|
||||
/* master toggles red led */
|
||||
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */
|
||||
/* Add delay between RX and TX */
|
||||
HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN);
|
||||
/* master sends PING*/
|
||||
APP_LOG(TS_ON, VLEVEL_L, "..."
|
||||
"PING"
|
||||
"\n\r");
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Master Tx start\n\r");
|
||||
memcpy(BufferTx, PING, sizeof(PING) - 1);
|
||||
Radio.Send(BufferTx, PAYLOAD_LEN);
|
||||
}
|
||||
else if (strncmp((const char *)BufferRx, PING, sizeof(PING) - 1) == 0)
|
||||
{
|
||||
/* A master already exists then become a slave */
|
||||
isMaster = false;
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");
|
||||
Radio.Rx(RX_TIMEOUT_VALUE);
|
||||
}
|
||||
else /* valid reception but neither a PING or a PONG message */
|
||||
{
|
||||
/* Set device as master and start again */
|
||||
isMaster = true;
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Master Rx start\n\r");
|
||||
Radio.Rx(RX_TIMEOUT_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RxBufferSize > 0)
|
||||
{
|
||||
if (strncmp((const char *)BufferRx, PING, sizeof(PING) - 1) == 0)
|
||||
{
|
||||
UTIL_TIMER_Stop(&timerLed);
|
||||
/* switch off red led */
|
||||
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */
|
||||
/* slave toggles green led */
|
||||
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* LED_GREEN */
|
||||
/* Add delay between RX and TX */
|
||||
HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN);
|
||||
/*slave sends PONG*/
|
||||
APP_LOG(TS_ON, VLEVEL_L, "..."
|
||||
"PONG"
|
||||
"\n\r");
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Slave Tx start\n\r");
|
||||
memcpy(BufferTx, PONG, sizeof(PONG) - 1);
|
||||
Radio.Send(BufferTx, PAYLOAD_LEN);
|
||||
}
|
||||
else /* valid reception but not a PING as expected */
|
||||
{
|
||||
/* Set device as master and start again */
|
||||
isMaster = true;
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Master Rx start\n\r");
|
||||
Radio.Rx(RX_TIMEOUT_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TX:
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Rx start\n\r");
|
||||
Radio.Rx(RX_TIMEOUT_VALUE);
|
||||
break;
|
||||
case RX_TIMEOUT:
|
||||
case RX_ERROR:
|
||||
if (isMaster == true)
|
||||
{
|
||||
/* Send the next PING frame */
|
||||
/* Add delay between RX and TX*/
|
||||
/* add random_delay to force sync between boards after some trials*/
|
||||
HAL_Delay(Radio.GetWakeupTime() + RX_TIME_MARGIN + random_delay);
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Master Tx start\n\r");
|
||||
/* master sends PING*/
|
||||
memcpy(BufferTx, PING, sizeof(PING) - 1);
|
||||
Radio.Send(BufferTx, PAYLOAD_LEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");
|
||||
Radio.Rx(RX_TIMEOUT_VALUE);
|
||||
}
|
||||
break;
|
||||
case TX_TIMEOUT:
|
||||
APP_LOG(TS_ON, VLEVEL_L, "Slave Rx start\n\r");
|
||||
Radio.Rx(RX_TIMEOUT_VALUE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void OnledEvent(void *context)
|
||||
{
|
||||
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin); /* LED_GREEN */
|
||||
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */
|
||||
UTIL_TIMER_Start(&timerLed);
|
||||
}
|
||||
|
||||
/* USER CODE END PrFD */
|
||||
|
|
|
@ -34,9 +34,43 @@ extern "C" {
|
|||
/* Exported types ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN ET */
|
||||
|
||||
#define TX_OUTPUT_POWER 7
|
||||
|
||||
/* USER CODE END ET */
|
||||
|
||||
/* Exported constants --------------------------------------------------------*/
|
||||
/* MODEM type: one shall be 1 the other shall be 0 */
|
||||
#define USE_MODEM_LORA 1
|
||||
#define USE_MODEM_FSK 0
|
||||
|
||||
#define RF_FREQUENCY 491975000 /* Hz */
|
||||
|
||||
#ifndef TX_OUTPUT_POWER /* please, to change this value, redefine it in USER CODE SECTION */
|
||||
#define TX_OUTPUT_POWER 14 /* dBm */
|
||||
#endif /* TX_OUTPUT_POWER */
|
||||
|
||||
#if (( USE_MODEM_LORA == 1 ) && ( USE_MODEM_FSK == 0 ))
|
||||
#define LORA_BANDWIDTH 0 /* [0: 125 kHz, 1: 250 kHz, 2: 500 kHz, 3: Reserved] */
|
||||
#define LORA_SPREADING_FACTOR 9 /* [SF7..SF12] */
|
||||
#define LORA_CODINGRATE 1 /* [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8] */
|
||||
#define LORA_PREAMBLE_LENGTH 8 /* Same for Tx and Rx */
|
||||
#define LORA_SYMBOL_TIMEOUT 5 /* Symbols */
|
||||
#define LORA_FIX_LENGTH_PAYLOAD_ON false
|
||||
#define LORA_IQ_INVERSION_ON false
|
||||
|
||||
#elif (( USE_MODEM_LORA == 0 ) && ( USE_MODEM_FSK == 1 ))
|
||||
|
||||
#define FSK_FDEV 25000 /* Hz */
|
||||
#define FSK_DATARATE 50000 /* bps */
|
||||
#define FSK_BANDWIDTH 50000 /* Hz */
|
||||
#define FSK_PREAMBLE_LENGTH 5 /* Same for Tx and Rx */
|
||||
#define FSK_FIX_LENGTH_PAYLOAD_ON false
|
||||
|
||||
#else
|
||||
#error "Please define a modem in the compiler subghz_phy_app.h."
|
||||
#endif /* USE_MODEM_LORA | USE_MODEM_FSK */
|
||||
|
||||
#define PAYLOAD_LEN 64
|
||||
|
||||
/* USER CODE BEGIN EC */
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "stm32_adv_trace.h"
|
||||
|
||||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
@ -50,15 +52,9 @@ extern "C" {
|
|||
|
||||
/* Exported macro ------------------------------------------------------------*/
|
||||
#ifdef MW_LOG_ENABLED
|
||||
/* USER CODE BEGIN Mw_Logs_En*/
|
||||
/* Map your own trace mechanism or to map UTIL_ADV_TRACE see examples from CubeFw, i.e.:
|
||||
do{ {UTIL_ADV_TRACE_COND_FSend(VL, T_REG_OFF, TS, __VA_ARGS__);} }while(0) */
|
||||
#define MW_LOG(TS,VL, ...)
|
||||
/* USER CODE END Mw_Logs_En */
|
||||
#define MW_LOG(TS,VL, ...) do{ {UTIL_ADV_TRACE_COND_FSend(VL, T_REG_OFF, TS, __VA_ARGS__);} }while(0)
|
||||
#else /* MW_LOG_ENABLED */
|
||||
/* USER CODE BEGIN Mw_Logs_Dis*/
|
||||
#define MW_LOG(TS,VL, ...)
|
||||
/* USER CODE END Mw_Logs_Dis */
|
||||
#endif /* MW_LOG_ENABLED */
|
||||
/* USER CODE BEGIN EM */
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ extern "C" {
|
|||
#include "mw_log_conf.h" /* mw trace conf */
|
||||
#include "radio_board_if.h" /* low layer api (bsp) */
|
||||
#include "utilities_def.h" /* low layer api (bsp) */
|
||||
#include "sys_debug.h"
|
||||
/* USER CODE BEGIN include */
|
||||
|
||||
/* USER CODE END include */
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "subghz.h"
|
||||
#include "usart.h"
|
||||
|
||||
#include "radio.h"
|
||||
#include "app_subghz_phy.h"
|
||||
|
||||
extern void SystemClock_Config(void);
|
||||
|
||||
|
@ -19,13 +19,12 @@ int main(void) {
|
|||
/* Hardware initialization */
|
||||
MX_GPIO_Init();
|
||||
SystemClock_Config();
|
||||
MX_RTC_Init();
|
||||
MX_LPUART1_UART_Init();
|
||||
MX_SUBGHZ_Init();
|
||||
|
||||
MX_SubGHz_Phy_Init();
|
||||
|
||||
printf("Initialization completed.\r\n");
|
||||
|
||||
for (;;) {
|
||||
/* -- */
|
||||
MX_SubGHz_Phy_Process();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue