diff --git a/.gitignore b/.gitignore index c848d7a..1146fc1 100644 --- a/.gitignore +++ b/.gitignore @@ -35,7 +35,6 @@ *.app *.i*86 *.x86_64 -*.hex # Debug files *.dSYM/ diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 38f24dd..83e589b 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -98,6 +98,23 @@ void MX_TOF_Init(void); #define BUT2_GPIO_Port GPIOA #define BUT2_EXTI_IRQn EXTI1_IRQn +#ifdef STS_O5 // STS_O5_JP 2024-04-10 +#define HALL1_OUT_Pin GPIO_PIN_0 +#define HALL1_OUT_GPIO_Port GPIOA +#define HALL1_OUT_EXTI_IRQn EXTI0_IRQn + +#define HALL1_VCC_Pin GPIO_PIN_3 +#define HALL1_VCC_GPIO_Port GPIOB + +#define HALL2_OUT_Pin GPIO_PIN_10 +#define HALL2_OUT_GPIO_Port GPIOA +#define HALL2_OUT_EXTI_IRQn EXTI15_10_IRQn + +#define HALL2_VCC_Pin GPIO_PIN_4 +#define HALL2_VCC_GPIO_Port GPIOB + + +#endif #if defined(STM32WL55xx) #define BUT3_Pin GPIO_PIN_6 #define BUT3_GPIO_Port GPIOC diff --git a/Core/Inc/stm32wlxx_nucleo.h b/Core/Inc/stm32wlxx_nucleo.h deleted file mode 100644 index 6b6d18b..0000000 --- a/Core/Inc/stm32wlxx_nucleo.h +++ /dev/null @@ -1,290 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : stm32wlxx_nucleo.h - * @brief : header file for the BSP Common driver - ****************************************************************************** - * @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 __STM32WLXX_NUCLEO_H -#define __STM32WLXX_NUCLEO_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32wlxx_nucleo_conf.h" -#include "stm32wlxx_nucleo_errno.h" -#include "main.h" - -#if (USE_BSP_COM_FEATURE > 0) - #if (USE_COM_LOG > 0) - #if defined(__ICCARM__) || defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) /* For IAR and ARM Compiler 5 and 6*/ - #include - #endif - #endif -#endif -/** @addtogroup BSP - * @{ - */ - -/** @defgroup STM32WLXX_NUCLEO - * @{ - */ - -/** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL - * @{ - */ - -/** @defgroup STM32L4XX_NUCLEO_LOW_LEVEL_Exported_Constants LOW LEVEL Exported Constants - * @{ - */ -/** - * @brief STM32WLXX NUCLEO BSP Driver version number V1.0.0 - */ -#define __STM32WLXX_NUCLEO_BSP_VERSION_MAIN (uint32_t)(0x01) /*!< [31:24] main version */ -#define __STM32WLXX_NUCLEO_BSP_VERSION_SUB1 (uint32_t)(0x00) /*!< [23:16] sub1 version */ -#define __STM32WLXX_NUCLEO_BSP_VERSION_SUB2 (uint32_t)(0x00) /*!< [15:8] sub2 version */ -#define __STM32WLXX_NUCLEO_BSP_VERSION_RC (uint32_t)(0x00) /*!< [7:0] release candidate */ -#define __STM32WLXX_NUCLEO_BSP_VERSION ((__STM32WLXX_NUCLEO_BSP_VERSION_MAIN << 24)\ - |(__STM32WLXX_NUCLEO_BSP_VERSION_SUB1 << 16)\ - |(__STM32WLXX_NUCLEO_BSP_VERSION_SUB2 << 8 )\ - |(__STM32WLXX_NUCLEO_BSP_VERSION_RC)) - -/** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Types STM32WLXX_NUCLEO LOW LEVEL Exported Types - * @{ - */ - - /** - * @brief Define for STM32WLXX_NUCLEO board - */ -#if !defined (USE_STM32WLXX_NUCLEO) - #define USE_STM32WLXX_NUCLEO -#endif -#ifndef USE_BSP_COM_FEATURE - #define USE_BSP_COM_FEATURE 0U -#endif - -/** - * @} - */ - -/** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_BUTTON STM32WLXX_NUCLEO LOW LEVEL BUTTON - * @{ - */ -/* Button state */ -#define BUTTON_RELEASED 0U -#define BUTTON_PRESSED 1U -/** Define number of BUTTON **/ -#define BUTTONn 1U - -/** - * @brief User push-button - */ - /** Definition for BSP USER BUTTON **/ - -#define USER_BUTTON_PIN GPIO_PIN_0 -#define USER_BUTTON_GPIO_PORT GPIOA -#define USER_BUTTON_EXTI_IRQn EXTI0_IRQn -#define USER_BUTTON_EXTI_LINE EXTI_LINE_0 -#define H_EXTI_0 hpb_exti[BUTTON_USER] -/** - * @} - */ -/** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_COM STM32WLXX_NUCLEO LOW LEVEL COM - * @{ - */ -/** - * @brief Definition for COM portx, connected to USART1 - */ - -#define BUS_USART1_INSTANCE USART1 -#define BUS_USART1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define BUS_USART1_RX_GPIO_PORT GPIOB -#define BUS_USART1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define BUS_USART1_RX_GPIO_PIN GPIO_PIN_7 -#define BUS_USART1_RX_GPIO_AF GPIO_AF7_USART1 -#define BUS_USART1_TX_GPIO_PIN GPIO_PIN_6 -#define BUS_USART1_TX_GPIO_PORT GPIOB -#define BUS_USART1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() -#define BUS_USART1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() -#define BUS_USART1_TX_GPIO_AF GPIO_AF7_USART1 - -/** - * @} - */ - -/** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Types LOW LEVEL Exported Types - * @{ - */ -#ifndef USE_BSP_COM - #define USE_BSP_COM 0U -#endif - -#ifndef USE_COM_LOG - #define USE_COM_LOG 1U -#endif - -#ifndef BSP_BUTTON_USER_IT_PRIORITY - #define BSP_BUTTON_USER_IT_PRIORITY 15U -#endif - -typedef enum -{ - BUTTON_USER = 0U, -}Button_TypeDef; - -/* Keep compatibility with CMSIS Pack already delivered */ -#define BUTTON_KEY BUTTON_USER - -typedef enum -{ - BUTTON_MODE_GPIO = 0, - BUTTON_MODE_EXTI = 1 -} ButtonMode_TypeDef; - -#if (USE_BSP_COM_FEATURE > 0) -typedef enum -{ - COM1 = 0U, - COMn -}COM_TypeDef; - -typedef enum -{ - COM_WORDLENGTH_8B = UART_WORDLENGTH_8B, - COM_WORDLENGTH_9B = UART_WORDLENGTH_9B, -}COM_WordLengthTypeDef; - -typedef enum -{ - COM_STOPBITS_1 = UART_STOPBITS_1, - COM_STOPBITS_2 = UART_STOPBITS_2, -}COM_StopBitsTypeDef; - -typedef enum -{ - COM_PARITY_NONE = UART_PARITY_NONE, - COM_PARITY_EVEN = UART_PARITY_EVEN, - COM_PARITY_ODD = UART_PARITY_ODD, -}COM_ParityTypeDef; - -typedef enum -{ - COM_HWCONTROL_NONE = UART_HWCONTROL_NONE, - COM_HWCONTROL_RTS = UART_HWCONTROL_RTS, - COM_HWCONTROL_CTS = UART_HWCONTROL_CTS, - COM_HWCONTROL_RTS_CTS = UART_HWCONTROL_RTS_CTS, -}COM_HwFlowCtlTypeDef; - -typedef struct -{ - uint32_t BaudRate; - COM_WordLengthTypeDef WordLength; - COM_StopBitsTypeDef StopBits; - COM_ParityTypeDef Parity; - COM_HwFlowCtlTypeDef HwFlowCtl; -}COM_InitTypeDef; -#endif - -#define MX_UART_InitTypeDef COM_InitTypeDef -#define MX_UART_StopBitsTypeDef COM_StopBitsTypeDef -#define MX_UART_ParityTypeDef COM_ParityTypeDef -#define MX_UART_HwFlowCtlTypeDef COM_HwFlowCtlTypeDef -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1U) -typedef struct -{ - void (* pMspInitCb)(UART_HandleTypeDef *); - void (* pMspDeInitCb)(UART_HandleTypeDef *); -} BSP_COM_Cb_t; -#endif /* (USE_HAL_UART_REGISTER_CALLBACKS == 1U) */ - -/** - * @} - */ - -#define COMn 1U -#define COM1_UART USART1 - -#define COM_POLL_TIMEOUT 1000 -extern UART_HandleTypeDef hcom_uart[COMn]; -#define huart1 hcom_uart[COM1] - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Variables LOW LEVEL Exported Constants - * @{ - */ -extern EXTI_HandleTypeDef hpb_exti[BUTTONn]; -/** - * @} - */ - -/** @defgroup STM32WLXX_NUCLEO_LOW_LEVEL_Exported_Functions STM32WLXX_NUCLEO LOW LEVEL Exported Functions - * @{ - */ - -int32_t BSP_GetVersion(void); -int32_t BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode); -int32_t BSP_PB_DeInit(Button_TypeDef Button); -int32_t BSP_PB_GetState(Button_TypeDef Button); -void BSP_PB_Callback(Button_TypeDef Button); -void BSP_PB_IRQHandler (Button_TypeDef Button); -#if (USE_BSP_COM_FEATURE > 0) -int32_t BSP_COM_Init(COM_TypeDef COM); -int32_t BSP_COM_DeInit(COM_TypeDef COM); -#endif - -#if (USE_COM_LOG > 0) -int32_t BSP_COM_SelectLogPort(COM_TypeDef COM); -#endif - -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1U) -int32_t BSP_COM_RegisterDefaultMspCallbacks(COM_TypeDef COM); -int32_t BSP_COM_RegisterMspCallbacks(COM_TypeDef COM , BSP_COM_Cb_t *Callback); -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -#ifdef __cplusplus -} -#endif - -#endif /* __STM32WLXX_NUCLEO__H */ - diff --git a/Core/Inc/sys_conf.h b/Core/Inc/sys_conf.h index 4941614..5d27761 100644 --- a/Core/Inc/sys_conf.h +++ b/Core/Inc/sys_conf.h @@ -47,12 +47,12 @@ extern "C" { /** * @brief Verbose level for all trace logs */ -#define VERBOSE_LEVEL VLEVEL_OFF +#define VERBOSE_LEVEL VLEVEL_M /** * @brief Enable trace logs */ -#define APP_LOG_ENABLED 0 +#define APP_LOG_ENABLED 1 /** * @brief Activate monitoring (probes) of some internal RF signals for debug purpose @@ -75,7 +75,7 @@ extern "C" { * @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 0 +#define DEBUGGER_ENABLED 1 /** * @brief Disable Low Power mode diff --git a/Core/Inc/yunhorn_sts_prd_conf.h b/Core/Inc/yunhorn_sts_prd_conf.h index 0b0b134..3feb901 100644 --- a/Core/Inc/yunhorn_sts_prd_conf.h +++ b/Core/Inc/yunhorn_sts_prd_conf.h @@ -37,14 +37,15 @@ //#ifndef STM32WL55xx //#define STM32WL55xx //#endif +#ifdef STS_O5 +#define YUNHORN_STS_O5_ENABLED 1U +#endif /* * MODULE SELECTION */ //#define USE_OLED_SSD1306 //#define USE_TOF_VL53L1X //#define STS_USE_TOF_VL53L0X 1U -//#define YUNHORN_STS_R5_ENABLED - // TOF VL53LX number //#define USE_MEMS_ADXL345 @@ -233,9 +234,9 @@ -#define MajorVer 23U -#define MinorVer 11U -#define SubMinorVer 18U +#define MajorVer 24U +#define MinorVer 03U +#define SubMinorVer 10U #define FirmwareVersion 3U #define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U #define YUNHORN_STS_AC_CODE_SIZE 20U @@ -263,7 +264,6 @@ #define sts_appctrl_reply_port (YUNHORN_STS_USER_APP_CTRL_REPLY_PORT) #ifdef STS_O5 -#define YUNHORN_STS_O5_ENABLED 1U #define sts_mtmcode1 0U #define sts_mtmcode2 24U #define sts_hardware_ver 1U diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 366b255..a5867cd 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -44,7 +44,7 @@ void MX_DMA_Init(void) /* DMA controller clock enable */ __HAL_RCC_DMAMUX1_CLK_ENABLE(); __HAL_RCC_DMA1_CLK_ENABLE(); - __HAL_RCC_DMA2_CLK_ENABLE(); + /* DMA interrupt init */ // **** TIM1_CH2 WS2812B @ PA-9 @@ -70,18 +70,16 @@ void MX_DMA_Init(void) // **** I2C2 // **** USART2 +#if 0 /* DMA1_Channel6_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn); +#endif /* DMA1_Channel7_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn); // **** USART2 - /* DMA2_Channel1_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Channel1_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(DMA2_Channel1_IRQn); - } diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 4163de1..ed85601 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -51,19 +51,14 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); - //PME OFF - HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4,RESET); - GPIO_InitStruct.Pin = GPIO_PIN_All; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; - - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - __HAL_RCC_GPIOA_CLK_DISABLE(); - __HAL_RCC_GPIOB_CLK_DISABLE(); __HAL_RCC_GPIOC_CLK_DISABLE(); /*Configure GPIO pin Output Level */ @@ -96,26 +91,59 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(BUT3_GPIO_Port, &GPIO_InitStruct); #endif -#if 0 + +#ifdef STS_O5 + /*Configure GPIO pin : PtPin */ + GPIO_InitStruct.Pin = HALL1_OUT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(HALL1_OUT_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : PtPin */ + GPIO_InitStruct.Pin = HALL2_OUT_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(HALL2_OUT_GPIO_Port, &GPIO_InitStruct); + + + GPIO_InitStruct.Pin = HALL1_VCC_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(HALL1_VCC_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = HALL2_VCC_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + HAL_GPIO_Init(HALL2_VCC_GPIO_Port, &GPIO_InitStruct); + +#else + /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = BUT2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUT2_GPIO_Port, &GPIO_InitStruct); -#endif + /*Configure GPIO pin : PtPin */ - __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = BUT1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(BUT1_GPIO_Port, &GPIO_InitStruct); +#endif /*Configure GPIO pins : TOF_C_INT_Pin */ #if defined(TOF_1) GPIO_InitStruct.Pin = TOF_C_INT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(TOF_C_INT_GPIO_Port, &GPIO_InitStruct); #endif @@ -124,6 +152,7 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pin = TOF_L_INT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(TOF_L_INT_GPIO_Port, &GPIO_InitStruct); #endif /*Configure GPIO pins : TOF_R_INT_Pin */ @@ -131,6 +160,7 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pin = TOF_R_INT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(TOF_R_INT_GPIO_Port, &GPIO_InitStruct); #endif @@ -159,12 +189,12 @@ void MX_GPIO_Init(void) HAL_GPIO_Init(TOF_R_XSHUT_GPIO_Port, &GPIO_InitStruct); #endif -#if 0 +#ifdef LED_ONBOARD /*Configure GPIO pins : PBPin PBPin PBPin */ GPIO_InitStruct.Pin = LED1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct); #endif @@ -177,6 +207,7 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pin = SOAP_STATUS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; +GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(SOAP_STATUS_GPIO_Port, &GPIO_InitStruct); @@ -189,14 +220,23 @@ HAL_GPIO_Init(SOAP_SWITCH_GPIO_Port, &GPIO_InitStruct); /* ============== SOAP LEVEL DETECTION ========================= */ #endif +#ifdef STS_O5 + /* EXTI interrupt init*/ + HAL_NVIC_SetPriority(HALL1_OUT_EXTI_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(HALL1_OUT_EXTI_IRQn); + HAL_NVIC_SetPriority(HALL2_OUT_EXTI_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(HALL2_OUT_EXTI_IRQn); + +#else /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); -#if 0 + HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI1_IRQn); #endif + #if defined(TOF_1) HAL_NVIC_SetPriority(TOF_C_INT_EXTI_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TOF_C_INT_EXTI_IRQn); diff --git a/Core/Src/main.c b/Core/Src/main.c index f6c5681..9a9d493 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -38,6 +38,9 @@ #ifdef STS_USE_TOF_VL53L1X #include "app_tof_peoplecount.h" #endif + +#include "stm32wlxx_nucleo.h" + /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -63,6 +66,7 @@ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ +static void WkupPin1_Config(void); //#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) /* USER CODE END PFP */ @@ -108,48 +112,13 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); - - //MX_I2C2_Init(); - - MX_LoRaWAN_Init(); - /* USER CODE BEGIN 2 */ - //HAL_Delay(3000); - - /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ -#if 0 - while(1) - { - HAL_GPIO_WritePin(SOAP_SWITCH_GPIO_Port, SOAP_SWITCH_Pin, GPIO_PIN_SET); - HAL_Delay(1000); - //uint8_t soapData = SOAP_DATA; - uint8_t soapData = HAL_GPIO_ReadPin(SOAP_STATUS_GPIO_Port,SOAP_STATUS_Pin); - uint8_t read2nd = 0; - APP_LOG(TS_OFF, VLEVEL_L, "\r\n Soap State = %d \r\n", soapData); - #if 0 - HAL_GPIO_WritePin(SOAP_SWITCH_GPIO_Port, SOAP_SWITCH_Pin, GPIO_PIN_RESET); - HAL_Delay(1000); - read2nd = HAL_GPIO_ReadPin(SOAP_STATUS_GPIO_Port,SOAP_STATUS_Pin); - - APP_LOG(TS_OFF, VLEVEL_L, "\r\n 2nd read after 1 seconds= %d \r\n", read2nd); - - HAL_Delay(1000); - - read2nd = HAL_GPIO_ReadPin(SOAP_STATUS_GPIO_Port,SOAP_STATUS_Pin); - - APP_LOG(TS_OFF, VLEVEL_L, "\r\n 3rd read after another 1 seconds= %d \r\n", read2nd); - #endif - HAL_Delay(20000); - - } -#endif - while (1) { @@ -211,7 +180,17 @@ void SystemClock_Config(void) } /* USER CODE BEGIN 4 */ +static void WkupPin1_Config(void) +{ + /* Configure Button pin and unmask Wakeup with Interrupt request from line 0.*/ + BSP_PB_Init(BUTTON_SW1, BUTTON_MODE_EXTI); + + /* Enable wake-up pin pull-up state in Standby mode.*/ + HAL_PWREx_EnableGPIOPullUp(PWR_GPIO_A, PWR_GPIO_BIT_0); + HAL_PWREx_EnablePullUpPullDownConfig(); + +} /* USER CODE END 4 */ /** diff --git a/Core/Src/stm32_lpm_if.c b/Core/Src/stm32_lpm_if.c index 00e4c45..daa9749 100644 --- a/Core/Src/stm32_lpm_if.c +++ b/Core/Src/stm32_lpm_if.c @@ -81,9 +81,8 @@ const struct UTIL_LPM_Driver_s UTIL_PowerDriver = void PWR_EnterOffMode(void) { /* USER CODE BEGIN EnterOffMode_1 */ - HAL_SuspendTick(); - HAL_GPIO_DeInit(GPIOB,GPIO_PIN_All); - HAL_GPIO_DeInit(GPIOC,GPIO_PIN_All); + + /* USER CODE END EnterOffMode_1 */ } @@ -99,13 +98,11 @@ 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(); - //HAL_GPIO_DeInit(GPIOA,GPIO_PIN_All); - HAL_UART_DeInit(&huart2); - HAL_GPIO_DeInit(GPIOB,GPIO_PIN_All); - HAL_GPIO_DeInit(GPIOC,GPIO_PIN_All); + /* USER CODE BEGIN EnterStopMode_2 */ /* USER CODE END EnterStopMode_2 */ @@ -128,10 +125,10 @@ void PWR_ExitStopMode(void) SRAM ctrls, DMAx, DMAMux, AES, RNG, HSEM */ /* Resume not retained USARTx and DMA */ - //vcom_Resume(); + vcom_Resume(); /* USER CODE BEGIN ExitStopMode_2 */ - //MX_GPIO_Init(); - //MX_DMA_Init(); + MX_GPIO_Init(); + MX_DMA_Init(); //MX_I2C2_Init(); /* USER CODE END ExitStopMode_2 */ diff --git a/Core/Src/stm32wlxx_it.c b/Core/Src/stm32wlxx_it.c index 876bd8a..f8a7651 100644 --- a/Core/Src/stm32wlxx_it.c +++ b/Core/Src/stm32wlxx_it.c @@ -62,8 +62,8 @@ extern RTC_HandleTypeDef hrtc; extern SUBGHZ_HandleTypeDef hsubghz; extern UART_HandleTypeDef huart2; -//extern DMA_HandleTypeDef hdma_i2c2_rx; -//extern DMA_HandleTypeDef hdma_i2c2_tx; +extern DMA_HandleTypeDef hdma_i2c2_rx; +extern DMA_HandleTypeDef hdma_i2c2_tx; //extern DMA_HandleTypeDef hdma_spi1_rx; //extern DMA_HandleTypeDef hdma_spi1_tx; @@ -76,8 +76,9 @@ extern UART_HandleTypeDef huart2; //extern TIM_HandleTypeDef htim2; //extern TIM_HandleTypeDef htim16; extern DMA_HandleTypeDef hdma_usart2_tx; -//extern DMA_HandleTypeDef hdma_usart2_rx; - +#if 0 +extern DMA_HandleTypeDef hdma_usart2_rx; +#endif /* USER CODE BEGIN EV */ @@ -243,12 +244,16 @@ void EXTI0_IRQHandler(void) /* USER CODE END EXTI0_IRQn 0 */ //HAL_EXTI_IRQHandler(&H_EXTI_0); +#ifdef STS_O5 + HAL_GPIO_EXTI_IRQHandler(HALL1_OUT_Pin); +#else HAL_GPIO_EXTI_IRQHandler(BUT1_Pin); +#endif /* USER CODE BEGIN EXTI0_IRQn 1 */ /* USER CODE END EXTI0_IRQn 1 */ } -#if 0 + /** * @brief This function handles EXTI Line 1 Interrupt. */ @@ -257,14 +262,16 @@ void EXTI1_IRQHandler(void) /* USER CODE BEGIN EXTI1_IRQn 0 */ /* USER CODE END EXTI1_IRQn 0 */ +#ifdef STS_O5 +#else HAL_GPIO_EXTI_IRQHandler(BUT2_Pin); +#endif /* USER CODE BEGIN EXTI1_IRQn 1 */ /* USER CODE END EXTI1_IRQn 1 */ } -#endif -#if 0 + /** * @brief This function handles DMA1 Channel 2 Interrupt. */ @@ -315,14 +322,12 @@ void DMA1_Channel5_IRQHandler(void) /* USER CODE BEGIN DMA1_Channel5_IRQn 0 */ /* USER CODE END DMA1_Channel5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2c2_tx); + HAL_DMA_IRQHandler(&hdma_usart2_tx); /* USER CODE BEGIN DMA1_Channel5_IRQn 1 */ /* USER CODE END DMA1_Channel5_IRQn 1 */ } -#endif -#if 0 /** * @brief This function handles DMA1 Channel 6 Interrupt. */ @@ -331,12 +336,13 @@ void DMA1_Channel6_IRQHandler(void) /* USER CODE BEGIN DMA1_Channel6_IRQn 0 */ /* USER CODE END DMA1_Channel6_IRQn 0 */ +#if 0 HAL_DMA_IRQHandler(&hdma_usart2_rx); +#endif /* USER CODE BEGIN DMA1_Channel6_IRQn 1 */ /* USER CODE END DMA1_Channel6_IRQn 1 */ } -#endif /** * @brief This function handles DMA1 Channel 7 Interrupt. @@ -351,7 +357,7 @@ void DMA1_Channel7_IRQHandler(void) /* USER CODE END DMA1_Channel7_IRQn 1 */ } -#if 0 + /** * @brief This function handles EXTI Lines [4] Interrupt. */ @@ -365,9 +371,8 @@ void EXTI4_IRQHandler(void) /* USER CODE END EXTI9_5_IRQn 1 */ } -#endif -#if 0 + /** * @brief This function handles EXTI Lines [9:5] Interrupt. */ @@ -379,7 +384,7 @@ void EXTI9_5_IRQHandler(void) #if defined(STM32WL55xx) HAL_GPIO_EXTI_IRQHandler(BUT3_Pin); #endif -#if defined(STM32WLE5xx) +#if (defined(STM32WLE5xx)&&defined(TOF_1)) //HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); #endif @@ -396,14 +401,18 @@ void EXTI15_10_IRQHandler(void) /* USER CODE BEGIN EXTI15_10_IRQn 0 */ /* USER CODE END EXTI15_10_IRQn 0 */ -#if defined(STM32WL55xx) +#ifdef STS_O5 + HAL_GPIO_EXTI_IRQHandler(HALL2_OUT_Pin); + +#else + HAL_GPIO_EXTI_IRQHandler(TOF_INT_EXTI_PIN); #endif /* USER CODE BEGIN EXTI15_10_IRQn 1 */ /* USER CODE END EXTI15_10_IRQn 1 */ } -#endif + /** diff --git a/Core/Src/sys_app.c b/Core/Src/sys_app.c index 994787b..5e06fea 100644 --- a/Core/Src/sys_app.c +++ b/Core/Src/sys_app.c @@ -101,7 +101,7 @@ void SystemApp_Init(void) UTIL_TIMER_Init(); SYS_TimerInitialisedFlag = 1; /* Initializes the SW probes pins and the monitor RF pins via Alternate Function */ - //DBG_Init(); + DBG_Init(); /*Initialize the terminal */ UTIL_ADV_TRACE_Init(); @@ -122,6 +122,7 @@ void SystemApp_Init(void) /*Init low power manager*/ UTIL_LPM_Init(); /* Disable Stand-by mode */ + //UTIL_LPM_SetOffMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE); UTIL_LPM_SetOffMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_DISABLE); #if defined (LOW_POWER_DISABLE) && (LOW_POWER_DISABLE == 1) @@ -131,6 +132,7 @@ void SystemApp_Init(void) #error LOW_POWER_DISABLE not defined #endif /* LOW_POWER_DISABLE */ + /* USER CODE BEGIN SystemApp_Init_2 */ /* USER CODE END SystemApp_Init_2 */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c index 0739434..f0e4467 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -28,8 +28,9 @@ UART_HandleTypeDef huart2; DMA_HandleTypeDef hdma_usart2_tx; -//DMA_HandleTypeDef hdma_usart2_rx; - +#if 0 +DMA_HandleTypeDef hdma_usart2_rx; +#endif /* USART2 init function */ void MX_USART2_UART_Init(void) @@ -61,12 +62,10 @@ void MX_USART2_UART_Init(void) { Error_Handler(); } -#if 0 if (HAL_UARTEx_SetRxFifoThreshold(&huart2, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) { Error_Handler(); } -#endif if (HAL_UARTEx_EnableFifoMode(&huart2) != HAL_OK) { Error_Handler(); @@ -105,19 +104,13 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) PA3 ------> USART2_RX PA2 ------> USART2_TX */ - GPIO_InitStruct.Pin = USARTx_TX_Pin; + GPIO_InitStruct.Pin = USARTx_RX_Pin|USARTx_TX_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - GPIO_InitStruct.Pin = USARTx_RX_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /* USART2 DMA Init */ /* USART2_TX Init */ hdma_usart2_tx.Instance = DMA1_Channel7; @@ -141,8 +134,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) } #endif __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); -#if 0 + /* USART2_RX Init */ +#if 0 hdma_usart2_rx.Instance = DMA1_Channel6; hdma_usart2_rx.Init.Request = DMA_REQUEST_USART2_RX; hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; @@ -192,7 +186,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) /* USART2 DMA DeInit */ HAL_DMA_DeInit(uartHandle->hdmatx); +#if 0 HAL_DMA_DeInit(uartHandle->hdmarx); +#endif /* USART2 interrupt Deinit */ HAL_NVIC_DisableIRQ(USART2_IRQn); /* USER CODE BEGIN USART2_MspDeInit 1 */ diff --git a/Core/Src/usart_if.c b/Core/Src/usart_if.c index a13826a..471af60 100644 --- a/Core/Src/usart_if.c +++ b/Core/Src/usart_if.c @@ -128,7 +128,7 @@ UTIL_ADV_TRACE_Status_t vcom_DeInit(void) /* ##-3- Disable the NVIC for DMA ########################################### */ /* USER CODE BEGIN 1 */ - HAL_NVIC_DisableIRQ(DMA1_Channel5_IRQn); + HAL_NVIC_DisableIRQ(DMA1_Channel7_IRQn); return UTIL_ADV_TRACE_OK; /* USER CODE END 1 */ diff --git a/Core/Src/yunhorn_sts_process.c b/Core/Src/yunhorn_sts_process.c index 02e104d..cdc5cd2 100644 --- a/Core/Src/yunhorn_sts_process.c +++ b/Core/Src/yunhorn_sts_process.c @@ -585,7 +585,10 @@ void STS_O5_SENSOR_Read(STS_OO_SensorDataTypeDef *oo_data) oo_data->state_sensor1_on_off = sts_reed_hall_result; - +#ifdef STS_O5 + oo_data->state_sensor1_on_off = HAL_GPIO_ReadPin(HALL1_OUT_GPIO_Port, HALL1_OUT_Pin); + oo_data->state_sensor2_on_off = HAL_GPIO_ReadPin(HALL2_OUT_GPIO_Port, HALL2_OUT_Pin); +#endif sensor_data_ready = 1; } #endif diff --git a/LoRaWAN/App/lora_app.c b/LoRaWAN/App/lora_app.c index 8563aea..8b2c4eb 100644 --- a/LoRaWAN/App/lora_app.c +++ b/LoRaWAN/App/lora_app.c @@ -37,6 +37,7 @@ #include "flash_if.h" /* USER CODE BEGIN Includes */ +#include "yunhorn_sts_prd_conf.h" #include "app_tof_pin_conf.h" #include "app_tof.h" #include "yunhorn_sts_sensors.h" @@ -400,7 +401,7 @@ static LmHandlerParams_t LmHandlerParams = /** * @brief Type of Event to generate application Tx */ -static TxEventType_t EventType = TX_ON_EVENT; +static TxEventType_t EventType = TX_ON_EVENT; //TX_ON_EVENT; /** * @brief Timer to handle the application Tx @@ -614,6 +615,7 @@ void LoRaWAN_Init(void) UTIL_TIMER_Start(&YunhornSTSSamplingCheckTimer); #endif + // Heart Beat Timer // FOR Event trigger type sensor, use this as Heart Beat Timer, such as O1/O2/O3/M1 #if (defined(YUNHORN_STS_R0_ENABLED)||defined(YUNHORN_STS_R5_ENABLED)||defined(YUNHORN_STS_O5_ENABLED)) @@ -631,35 +633,54 @@ void LoRaWAN_Init(void) void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { + uint8_t pinstate = 0; switch (GPIO_Pin) { +#ifndef STS_O5 case BUT1_Pin: + uint8_t pinstate = (STS_Reed_Hall_State== 0)?1:0; + APP_LOG(TS_OFF, VLEVEL_H, "## BUTTON-1 DETECTED: %2d \r\n", pinstate); -#ifdef YUNHORN_STS_O5_ENABLED if (EventType == TX_ON_EVENT) { - UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); } -#endif break; +#endif case BUT2_Pin: #if defined(STS_USE_STM32WLE5) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), CFG_SEQ_Prio_0); #endif break; + #if defined(STS_USE_STM32WL55) case BUT3_Pin: UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStoreContextEvent), CFG_SEQ_Prio_0); -#endif + break; +#endif + #if (defined(STS_USE_TOF_VL53L1X) ||defined(STS_USE_TOF_VL53L0X)) case TOF_INT_EXTI_PIN: ToF_EventDetected = 1; // APP_LOG(TS_OFF,VLEVEL_L, "##################################### TOF_EVENT DETECTED \r\n"); break; +#endif +#ifdef STS_O5 + case HALL1_OUT_Pin: + pinstate = HAL_GPIO_ReadPin(HALL1_OUT_GPIO_Port, HALL1_OUT_Pin); + APP_LOG(TS_OFF, VLEVEL_M, "## HALL 1 DETECTED: %2d \r\n", pinstate); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + break; + + case HALL2_OUT_Pin: + pinstate = HAL_GPIO_ReadPin(HALL2_OUT_GPIO_Port, HALL2_OUT_Pin); + APP_LOG(TS_OFF, VLEVEL_M, "## HALL 2 DETECTED: %2d \r\n", pinstate); + UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0); + break; #endif default: break; @@ -721,6 +742,15 @@ static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params) break; } } + DeviceClass_t deviceClass = CLASS_A; + LmHandlerGetCurrentClass( &deviceClass ); + uint8_t i=0; + outbuf[i++] = (uint8_t) 'L'; + outbuf[i++] = (uint8_t) sts_mtmcode1; + outbuf[i++] = (uint8_t) sts_mtmcode2; + outbuf[i++] = (uint8_t) sts_version; + outbuf[i++] = (uint8_t) (0x41+ deviceClass); //translate to 'A','B','C' + STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf); break; case LORAWAN_USER_APP_PORT: if (appData->BufferSize == 1) @@ -797,7 +827,6 @@ static void SendTxData(void) STS_YunhornSTSEventP6_Process(); #endif - //UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP6), CFG_SEQ_Prio_0); #if defined(YUNHORN_STS_R0_ENABLED)||defined(YUNHORN_STS_R5_ENABLED) UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP4), CFG_SEQ_Prio_0); @@ -805,14 +834,13 @@ static void SendTxData(void) r0_data.battery_mV = batteryLevelmV; r0_data.battery_Pct = (uint8_t)(99*batteryLevel/254); #endif - //r0_data.battery_Pct = batteryLevel; //(uint8_t)(99*batteryLevel/254); + // EnvSensors_Read(&sensor_data); // APP_LOG(TS_ON, VLEVEL_M, "\r\nVDDA: %d\r\n", batteryLevel); // APP_LOG(TS_ON, VLEVEL_M, "\r\ntemp: %d\r\n", (int16_t)(sensor_data.temperature)); - //APP_LOG(TS_ON, VLEVEL_L, "\r\nDistance = %d mm, VBAT=%d%%\r\n", r0_data.distance_mm, r0_data.battery_Pct); AppData.Port = LORAWAN_USER_APP_PORT; @@ -838,15 +866,16 @@ static void SendTxData(void) } else if ((upload_message_timer !=0U)||(sensor_data_ready!=0U)) //sensor_data_ready for manual push button-1 trigger) { - //sensor_data_ready =0; - //upload_message_timer =0; + sensor_data_ready =0; + upload_message_timer =0; #ifdef ROCTEC_R5 AppData.Buffer[i++] = (uint8_t)(r0_data.distance1_mm >>8)&0xff; //#05 AppData.Buffer[i++] = (uint8_t)(r0_data.distance1_mm)&0xff; //#06 #elif defined(STS_O5) - AppData.Buffer[i++] = (uint8_t)(0x01)&0xff; // length of the following bytes + AppData.Buffer[i++] = (uint8_t)(0x02)&0xff; // length of the following bytes AppData.Buffer[i++] = (uint8_t)(oo_data.state_sensor1_on_off)&0xff; + AppData.Buffer[i++] = (uint8_t)(oo_data.state_sensor2_on_off)&0xff; #elif defined(YUNHORN_STS_R0_ENABLED) AppData.Buffer[i++] = (uint8_t)(r0_data.distance_mm >>8)&0xff; //#05 @@ -877,8 +906,6 @@ static void SendTxData(void) status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false); if (LORAMAC_HANDLER_SUCCESS == status) { - sensor_data_ready =0; - upload_message_timer =0; APP_LOG(TS_ON, VLEVEL_H, "SEND REQUEST\r\n"); } else if (LORAMAC_HANDLER_DUTYCYCLE_RESTRICTED == status) diff --git a/STM32CubeIDE/.cproject b/STM32CubeIDE/.cproject index a956c22..c25a6c1 100644 --- a/STM32CubeIDE/.cproject +++ b/STM32CubeIDE/.cproject @@ -26,7 +26,7 @@