Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrihab kouki <rihab.kouki@st.com>2021-07-23 12:14:42 +0300
committerrihab kouki <rihab.kouki@st.com>2021-07-23 16:12:38 +0300
commit95f19205e36f1e26409b88e302537cbc8918f7e9 (patch)
tree300d4ed71cc66e1e68c12ebc51aedb5d5136b6c8 /Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton
parent2d1f0ea0748169a268228d0f7b6416e5127e6027 (diff)
Release v1.12.0
Diffstat (limited to 'Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton')
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/app_conf.h38
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/gpio_lld.h152
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/hw_if.h8
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm32wbxx_it.h18
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/app_entry.c82
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/gpio_lld.c591
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/hw_uart.c148
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/main.c135
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/pressbutton_app.c407
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32_lpm_if.c6
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_hal_msp.c48
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_it.c73
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/system_stm32wbxx.c30
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewd8
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewp30
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/stm32wb15xx_flash_cm4.icf2
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvoptx793
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvprojx689
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/startup_stm32wb15xx_cm4.s336
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/stm32wb15xx_flash_cm4.sct21
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.cproject199
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.project249
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/Startup/startup_stm32wb15ccux.s394
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/syscalls.c159
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/sysmem.c80
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/STM32WB15CCUX_FLASH.ld179
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.c261
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.h29
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.c558
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.h217
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld_private.h310
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.c161
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.h (renamed from Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/pressbutton_app.h)1
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.c233
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.h57
-rw-r--r--Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/readme.txt78
36 files changed, 3818 insertions, 2962 deletions
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/app_conf.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/app_conf.h
index b05951fbd..f24d94eb9 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/app_conf.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/app_conf.h
@@ -29,6 +29,9 @@
/******************************************************************************
* Application Config
******************************************************************************/
+#define CFG_HS_STARTUP_TIME 0x0099 /* Start up time of the high speed oscillator in system time units (625/256us) */
+
+#define CFG_BACK2BACK_TIME 200 /* Back to back time (us) */
/******************************************************************************
* Transport Layer
@@ -56,7 +59,7 @@
* Select UART interfaces
*/
#define CFG_DEBUG_TRACE_UART hw_lpuart1
-#define CFG_CLI_UART hw_uart1
+#define CFG_UART hw_uart1
/******************************************************************************
* USB interface
@@ -77,12 +80,14 @@
*
******************************************************************************/
#define CFG_LPM_SUPPORTED 0
-
+
#ifdef BLE_LLD_LP
#undef CFG_LPM_SUPPORTED
#define CFG_LPM_SUPPORTED 1
#endif
+#define CFG_PWR_MODE_STOP LL_PWR_MODE_STOP1
+
/******************************************************************************
* Timer Server
******************************************************************************/
@@ -181,11 +186,6 @@ typedef enum
*/
#define CFG_DEBUGGER_SUPPORTED 1
-#if (CFG_LPM_SUPPORTED == 1)
-#undef CFG_DEBUGGER_SUPPORTED
-#define CFG_DEBUGGER_SUPPORTED 0
-#endif
-
/*****************************************************************************
* Traces
* Enable or Disable traces in application
@@ -196,11 +196,6 @@ typedef enum
*****************************************************************************/
#define CFG_DEBUG_TRACE 1
-#if (CFG_LPM_SUPPORTED == 1)
-#undef CFG_DEBUG_TRACE
-#define CFG_DEBUG_TRACE 0
-#endif
-
/**
* When CFG_DEBUG_TRACE_FULL is set to 1, the trace are output with the API name, the file name and the line number
* When CFG_DEBUG_TRACE_LIGHT is set to 1, only the debug message is output
@@ -249,24 +244,9 @@ typedef enum
* When CFG_LED_SUPPORTED is set, LEDS are activated if requested
* When CFG_BUTTON_SUPPORTED is set, the push button are activated if requested
******************************************************************************/
-#if (CFG_LPM_SUPPORTED == 1)
-#define CFG_LED_SUPPORTED 0
-#define CFG_BUTTON_SUPPORTED 0
-#else
#define CFG_LED_SUPPORTED 1
#define CFG_BUTTON_SUPPORTED 1
-#endif
-
-#ifdef STM32WB15xx
-#define PUSH_BUTTON_SW1_EXTI_IRQHandler EXTI0_IRQHandler
-#define PUSH_BUTTON_SW2_EXTI_IRQHandler EXTI4_IRQHandler
-#define PUSH_BUTTON_SW3_EXTI_IRQHandler EXTI9_5_IRQHandler
-#else
-#define PUSH_BUTTON_SW1_EXTI_IRQHandler EXTI4_IRQHandler
-#define PUSH_BUTTON_SW2_EXTI_IRQHandler EXTI0_IRQHandler
-#define PUSH_BUTTON_SW3_EXTI_IRQHandler EXTI1_IRQHandler
-#endif
/* USER CODE END Defines */
/******************************************************************************
@@ -282,10 +262,8 @@ typedef enum
CFG_TASK_CMD_FROM_M0_TO_M4,
CFG_TASK_SEND_CLI_TO_M0,
CFG_TASK_SEND_TO_M0,
- CFG_TASK_HAL_BLE_INIT,
/* USER CODE BEGIN IdleTask */
- CFG_TASK_HAL_BLE_SENDPACKET,
- CFG_TASK_HAL_BLE_RECEIVEPACKET,
+ CFG_TASK_BUTTON,
/* USER CODE END IdleTask */
CFG_TASK_SYSTEM_HCI_ASYNCH_EVT,
CFG_TASK_PROCESS_UART_RX_BUFFER,
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/gpio_lld.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/gpio_lld.h
index 71678202a..e9ceb78c0 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/gpio_lld.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/gpio_lld.h
@@ -6,41 +6,9 @@
#ifndef GPIO_LLD_H_
#define GPIO_LLD_H_
-#if defined (USE_SIMU) || defined (USE_FPGA)
-/* Be carefull with GPIO used on SIMU plateform */
-// GPIOA port is used for CRC management on MASTER only
-// GPIOC ad GPIOD ports are used to send messages between the 2 DORYs
-#define GPIO_TX_PIN GPIO_PIN_8
-#define GPIO_TX_PORT GPIOB
-
-#define GPIO_1_PIN GPIO_PIN_9
-#define GPIO_1_PORT GPIOB
-#else /* on Nucleo boards */
-/* Use GPIO PB.8 to monitor TX time during valid on Boards */
-#define GPIO_TX_PIN GPIO_PIN_8
-#define GPIO_TX_PORT GPIOB
-
#define GPIO_HARD_FAULT_PIN GPIO_PIN_4
#define GPIO_HARD_FAULT_PORT GPIOA
-#define GPIO_MCO_PIN GPIO_PIN_15
-#define GPIO_MCO_PORT GPIOA
-
-#ifdef STM32WB35xx
-#define GPIO_1_PIN GPIO_PIN_3
-#define GPIO_1_PORT GPIOB
-
-#define GPIO_2_PIN GPIO_PIN_4
-#define GPIO_2_PORT GPIOB
-#else
-#define GPIO_1_PIN GPIO_PIN_2
-#define GPIO_1_PORT GPIOC
-
-#define GPIO_2_PIN GPIO_PIN_3
-#define GPIO_2_PORT GPIOC
-#endif
-#endif
-
// External PA TX/RX pin is fixed by the chip
#define GPIO_EXT_PA_TX_PIN GPIO_PIN_0
#define GPIO_EXT_PA_TX_PORT GPIOB
@@ -88,4 +56,124 @@ void gpio_lld_led1_toggle(void);
void gpio_lld_led2_toggle(void);
void gpio_lld_led3_toggle(void);
+#ifdef STM32WB15xx
+#define BUTTON_SW1_EXTI_IRQHandler EXTI0_IRQHandler
+#define BUTTON_SW2_EXTI_IRQHandler EXTI4_IRQHandler
+#define BUTTON_SW3_EXTI_IRQHandler EXTI9_5_IRQHandler
+
+/**
+ * @brief USART pins
+ */
+#define USART_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
+
+#define USART_TX_AF GPIO_AF7_USART1
+#define USART_TX_GPIO_PORT GPIOA
+#define USART_TX_PIN GPIO_PIN_9
+#define USART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
+#define USART_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
+
+#define USART_RX_AF GPIO_AF7_USART1
+#define USART_RX_GPIO_PORT GPIOA
+#define USART_RX_PIN GPIO_PIN_10
+#define USART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
+#define USART_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
+
+/**
+ * @brief LPUART pins
+ */
+#define LPUART_CLK_ENABLE() __HAL_RCC_LPUART1_CLK_ENABLE()
+
+#define LPUART_TX_AF GPIO_AF8_LPUART1
+#define LPUART_TX_GPIO_PORT GPIOA
+#define LPUART_TX_PIN GPIO_PIN_2
+#define LPUART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
+#define LPUART_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
+
+#define LPUART_RX_AF GPIO_AF8_LPUART1
+#define LPUART_RX_GPIO_PORT GPIOA
+#define LPUART_RX_PIN GPIO_PIN_3
+#define LPUART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
+#define LPUART_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
+#endif
+
+#ifdef STM32WB35xx
+#define BUTTON_SW1_EXTI_IRQHandler EXTI0_IRQHandler
+#define BUTTON_SW2_EXTI_IRQHandler EXTI4_IRQHandler
+#define BUTTON_SW3_EXTI_IRQHandler EXTI9_5_IRQHandler
+
+/**
+ * @brief USART pins
+ */
+#define USART_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
+
+#define USART_TX_AF GPIO_AF7_USART1
+#define USART_TX_GPIO_PORT GPIOB
+#define USART_TX_PIN GPIO_PIN_6
+#define USART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
+#define USART_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
+
+#define USART_RX_AF GPIO_AF7_USART1
+#define USART_RX_GPIO_PORT GPIOB
+#define USART_RX_PIN GPIO_PIN_7
+#define USART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
+#define USART_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
+
+/**
+ * @brief LPUART pins
+ */
+#define LPUART_CLK_ENABLE() __HAL_RCC_LPUART1_CLK_ENABLE()
+
+#define LPUART_TX_AF GPIO_AF8_LPUART1
+#define LPUART_TX_GPIO_PORT GPIOB
+#define LPUART_TX_PIN GPIO_PIN_5
+#define LPUART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
+#define LPUART_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
+
+#define LPUART_RX_AF GPIO_AF8_LPUART1
+#define LPUART_RX_GPIO_PORT GPIOA
+#define LPUART_RX_PIN GPIO_PIN_3
+#define LPUART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
+#define LPUART_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
+#endif
+
+#ifdef STM32WB55xx
+#define BUTTON_SW1_EXTI_IRQHandler EXTI4_IRQHandler
+#define BUTTON_SW2_EXTI_IRQHandler EXTI0_IRQHandler
+#define BUTTON_SW3_EXTI_IRQHandler EXTI1_IRQHandler
+
+/**
+ * @brief USART pins
+ */
+#define USART_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
+
+#define USART_TX_AF GPIO_AF7_USART1
+#define USART_TX_GPIO_PORT GPIOB
+#define USART_TX_PIN GPIO_PIN_6
+#define USART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
+#define USART_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
+
+#define USART_RX_AF GPIO_AF7_USART1
+#define USART_RX_GPIO_PORT GPIOB
+#define USART_RX_PIN GPIO_PIN_7
+#define USART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
+#define USART_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
+
+/**
+ * @brief LPUART pins
+ */
+#define LPUART_CLK_ENABLE() __HAL_RCC_LPUART1_CLK_ENABLE()
+
+#define LPUART_TX_AF GPIO_AF8_LPUART1
+#define LPUART_TX_GPIO_PORT GPIOC
+#define LPUART_TX_PIN GPIO_PIN_1
+#define LPUART_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
+#define LPUART_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
+
+#define LPUART_RX_AF GPIO_AF8_LPUART1
+#define LPUART_RX_GPIO_PORT GPIOC
+#define LPUART_RX_PIN GPIO_PIN_0
+#define LPUART_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
+#define LPUART_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
+#endif
+
#endif /* GPIO_LLD_H_ */
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/hw_if.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/hw_if.h
index 8acd008a3..1499891d6 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/hw_if.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/hw_if.h
@@ -44,9 +44,15 @@ extern "C" {
#ifdef USE_STM32WBXX_USB_DONGLE
#include "stm32wbxx_usb_dongle.h"
#endif
+
#ifdef USE_STM32WBXX_NUCLEO
+
+#ifdef STM32WB15xx
#include "nucleo_wb15cc.h"
#endif
+
+#endif
+
#ifdef USE_X_NUCLEO_EPD
#include "x_nucleo_epd.h"
#endif
@@ -261,6 +267,8 @@ void MX_USART1_UART_DeInit(void);
*/
void HW_TS_RTC_CountUpdated_AppNot(void);
+void MX_UART_Init(hw_uart_id_t uart);
+void MX_UART_Deinit(hw_uart_id_t uart);
#ifdef __cplusplus
}
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm32wbxx_it.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm32wbxx_it.h
index c539feca5..485c7fc81 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm32wbxx_it.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm32wbxx_it.h
@@ -29,6 +29,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "app_common.h"
+#include "gpio_lld.h"
/* USER CODE END Includes */
/* Exported types ------------------------------------------------------------*/
@@ -56,13 +57,8 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
-#ifdef STM32WB35xx
void DMA1_Channel4_IRQHandler(void);
-void DMA2_Channel4_IRQHandler(void);
-#else
-void DMA1_Channel1_IRQHandler(void);
-void DMA1_Channel2_IRQHandler(void);
-#endif
+void DMA1_Channel5_IRQHandler(void);
void USART1_IRQHandler(void);
void LPUART1_IRQHandler(void);
/* USER CODE BEGIN EFP */
@@ -71,12 +67,12 @@ void RTC_WKUP_IRQHandler(void);
#endif
void IPCC_C1_TX_IRQHandler(void);
void IPCC_C1_RX_IRQHandler(void);
-#if 1 // Not needed for LLD tests : remove to use less power
-void PUSH_BUTTON_SW1_EXTI_IRQHandler(void);
-void PUSH_BUTTON_SW2_EXTI_IRQHandler(void);
-void PUSH_BUTTON_SW3_EXTI_IRQHandler(void);
+
+void BUTTON_SW1_EXTI_IRQHandler(void);
+void BUTTON_SW2_EXTI_IRQHandler(void);
+void BUTTON_SW3_EXTI_IRQHandler(void);
void TIM2_IRQHandler(void);
-#endif
+
/* USER CODE END EFP */
#ifdef __cplusplus
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/app_entry.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/app_entry.c
index fedd3087a..4a8eab1cd 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/app_entry.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/app_entry.c
@@ -154,13 +154,9 @@ static void Init_Debug( void )
#endif
/* Send a first trace to debug trace port to see that M4 is alive */
- PRINT_MESG_DBG("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
-#ifdef STM32WB35xx
- PRINT_MESG_DBG("traces init done on Little DORY M4");
-#else
- PRINT_MESG_DBG("traces init done on DORY M4");
-#endif
- PRINT_MESG_DBG("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
+ APP_DBG("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
+ APP_DBG("traces init done on M4");
+ APP_DBG("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
return;
}
@@ -272,15 +268,15 @@ static void APPE_SysEvtError( SCHI_SystemErrCode_t ErrorCode)
switch(ErrorCode)
{
case ERR_THREAD_LLD_FATAL_ERROR:
- PRINT_MESG_DBG("** ERR_LLD_TESTS : LLD_FATAL_ERROR \n");
+ APP_DBG("** ERR_LLD_TESTS : LLD_FATAL_ERROR \n");
break;
case ERR_THREAD_UNKNOWN_CMD:
- PRINT_MESG_DBG("** ERR_LLD_TESTS : UNKNOWN_CMD \n");
+ APP_DBG("** ERR_LLD_TESTS : UNKNOWN_CMD \n");
break;
default:
- PRINT_MESG_DBG("** ERR_LLD_TESTS : ErroCode=%d \n",ErrorCode);
+ APP_DBG("** ERR_LLD_TESTS : ErroCode=%d \n",ErrorCode);
break;
}
return;
@@ -311,18 +307,11 @@ static void Led_Init( void )
* Leds Initialization
*/
#if (CFG_HW_LPUART1_ENABLED != 1) || ! defined (STM32WB35xx)
- // On Little DORY, LED_BLUE share the GPIO PB5 with LPUART
+ // On WB35, LED_BLUE share the GPIO PB5 with LPUART
BSP_LED_Init(LED_BLUE);
- //BSP_LED_On(LED_BLUE);
#endif
-
-//#if (CFG_HW_EXTPA_ENABLED != 1)
BSP_LED_Init(LED_GREEN);
- //BSP_LED_On(LED_GREEN);
-//#endif
-
BSP_LED_Init(LED_RED);
- //BSP_LED_On(LED_RED);
#endif
return;
@@ -360,24 +349,6 @@ void UTIL_SEQ_Idle( void )
return;
}
-/**
- * @brief This function is called by the scheduler each time an event
- * is pending.
- *
- * @param evt_waited_bm : Event pending.
- * @retval None
- */
-void UTIL_SEQ_EvtIdle( UTIL_SEQ_bm_t task_id_bm, UTIL_SEQ_bm_t evt_waited_bm )
-{
- switch(evt_waited_bm)
- {
- default :
- /* default case : schedule all tasks */
- UTIL_SEQ_Run( UTIL_SEQ_DEFAULT );
- break;
- }
-}
-
void shci_notify_asynch_evt(void* pdata)
{
UNUSED(pdata);
@@ -419,10 +390,10 @@ void TL_TRACES_EvtReceived( TL_EvtPacket_t * hcievt )
#if(CFG_DEBUG_TRACE != 0)
void DbgOutputInit( void )
{
-#if (CFG_HW_LPUART1_ENABLED == 1)
- MX_LPUART1_UART_Init();
+/* USER CODE BEGIN DbgOutputInit */
+#ifdef CFG_DEBUG_TRACE_UART
+ MX_UART_Init(CFG_DEBUG_TRACE_UART);
#endif
-
return;
}
@@ -442,39 +413,6 @@ void DbgOutputTraces( uint8_t *p_data, uint16_t size, void (*cb)(void) )
#endif
/* USER CODE BEGIN FD_WRAP_FUNCTIONS */
-void HAL_GPIO_EXTI_Callback( uint16_t GPIO_Pin )
-{
- switch (GPIO_Pin)
- {
- case BUTTON_SW1_PIN:
- Appli_GPIO_EXTI_Callback(BUTTON_SW1_PIN);
- break;
-
- case BUTTON_SW2_PIN:
- Appli_GPIO_EXTI_Callback(BUTTON_SW2_PIN);
- break;
-
- case BUTTON_SW3_PIN:
- Appli_GPIO_EXTI_Callback(BUTTON_SW3_PIN);
- break;
-
- default:
- break;
-
- }
- return;
-}
-
-void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
-{
- Appli_TIM_IC_CaptureCallback();
-}
-
-void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
-{
- Appli_TIM_PeriodElapsedCallback();
-}
-
/* USER CODE END FD_WRAP_FUNCTIONS */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/gpio_lld.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/gpio_lld.c
index ba3565389..1ccb7b42f 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/gpio_lld.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/gpio_lld.c
@@ -41,107 +41,6 @@
#include "app_conf.h"
#include "gpio_lld.h"
-/* Initialize GPIOs fused by PHY valid CLI */
-void gpio_lld_phy_init(void) {
- GPIO_InitTypeDef GPIO_InitStruct;
-
- /* Enable clock(s) for GPIOs */
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
-#ifdef STM32WB35xx
-#else
- __HAL_RCC_GPIOC_CLK_ENABLE();
-#endif
-#ifdef USE_SIMU
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
-#endif
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
-#ifdef STM32WB35xx
-#else
- __HAL_RCC_C2GPIOC_CLK_ENABLE();
-#endif
-#ifdef USE_SIMU
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
- __HAL_RCC_C2GPIOC_CLK_ENABLE();
- __HAL_RCC_C2GPIOD_CLK_ENABLE();
-#endif
-#endif
-
-#if defined (USE_SIMU)
- // Initialize GPIO used to detect if current DORY is master or slave
- // 4 GPIOs are needed while only one is enougth but this must be kept as it is
- // because this is also used by tests which are not managed by MDG-RF
- GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- // Initialize GPIOs used to have both DORYs communicating over
- // 13 bits of the port C and D which are cross connected in SIMU test bench
- GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13);
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
-#endif
-
- // configure the GPIO to be set to '1' during frame TX
- GPIO_InitStruct.Pin = (GPIO_TX_PIN);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIO_TX_PORT, &GPIO_InitStruct);
- gpio_lld_phy_gpioTx_down();
-
- // configure the GPIO to be set to '1' during HardFault'
- GPIO_InitStruct.Pin = (GPIO_HARD_FAULT_PIN);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIO_HARD_FAULT_PORT, &GPIO_InitStruct);
- gpio_lld_phy_gpioHardFault_down();
-
- // configure 2 GPIOs that can be used for debug purposes
- GPIO_InitStruct.Pin = (GPIO_1_PIN);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIO_1_PORT, &GPIO_InitStruct);
- gpio_lld_phy_gpio1_down();
-#if !defined (USE_SIMU) && !defined (USE_FPGA)
- GPIO_InitStruct.Pin = (GPIO_2_PIN);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIO_2_PORT, &GPIO_InitStruct);
- gpio_lld_phy_gpio2_down();
-#endif
-}
-
-/* Set PHY GPIO_TX to '1' */
-void gpio_lld_phy_gpioTx_up(void) {
- HAL_GPIO_WritePin(GPIO_TX_PORT, GPIO_TX_PIN, GPIO_PIN_SET);
-}
-
-/* Set PHY GPIO_TX to '0' */
-void gpio_lld_phy_gpioTx_down(void) {
- HAL_GPIO_WritePin(GPIO_TX_PORT, GPIO_TX_PIN, GPIO_PIN_RESET);
-}
-
/* Set PHY GPIO_HARD_FAULT to '1' */
void gpio_lld_phy_gpioHardFault_up(void) {
HAL_GPIO_WritePin(GPIO_HARD_FAULT_PORT, GPIO_HARD_FAULT_PIN, GPIO_PIN_SET);
@@ -152,462 +51,82 @@ void gpio_lld_phy_gpioHardFault_down(void) {
HAL_GPIO_WritePin(GPIO_HARD_FAULT_PORT, GPIO_HARD_FAULT_PIN, GPIO_PIN_RESET);
}
-/* Set PHY GPIO_1 to '1' */
-void gpio_lld_phy_gpio1_up(void) {
- HAL_GPIO_WritePin(GPIO_1_PORT, GPIO_1_PIN, GPIO_PIN_SET);
-}
-
-/* Set PHY GPIO_1 to '0' */
-void gpio_lld_phy_gpio1_down(void) {
- HAL_GPIO_WritePin(GPIO_1_PORT, GPIO_1_PIN, GPIO_PIN_RESET);
-}
-
-/* Set PHY GPIO_2 to '1' */
-void gpio_lld_phy_gpio2_up(void) {
- HAL_GPIO_WritePin(GPIO_2_PORT, GPIO_2_PIN, GPIO_PIN_SET);
-}
-
-/* Set PHY GPIO_2 to '0' */
-void gpio_lld_phy_gpio2_down(void) {
- HAL_GPIO_WritePin(GPIO_2_PORT, GPIO_2_PIN, GPIO_PIN_RESET);
-}
-
-/* De-initialize GPIOs fused by PHY valid CLI */
-void gpio_lld_phy_deInit(void) {
- HAL_GPIO_DeInit(GPIO_TX_PORT, GPIO_TX_PIN);
- HAL_GPIO_DeInit(GPIO_HARD_FAULT_PORT, GPIO_HARD_FAULT_PIN);
- HAL_GPIO_DeInit(GPIO_1_PORT, GPIO_1_PIN);
- HAL_GPIO_DeInit(GPIO_2_PORT, GPIO_2_PIN);
-}
-
-/* Initialize GPIOs for MCO use */
-void gpio_lld_mco_init(uint32_t mcoSource, uint32_t mcoDiv) {
- GPIO_InitTypeDef GPIO_InitStruct;
-
- //HAL_RCC_MCOConfig(RCC_MCO3, mcoSource, mcoDiv);
- LL_RCC_ConfigMCO(mcoSource, mcoDiv);
-
- /* Enable clock(s) for GPIOs */
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOA_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
-#endif
-
- // configure the GPIO PA15 in AF6 to be used as MCO
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF6_MCO;
- GPIO_InitStruct.Pin = GPIO_MCO_PIN;
- HAL_GPIO_Init(GPIO_MCO_PORT, &GPIO_InitStruct);
-}
-
-/* De-initialize GPIOs for external PA use */
-void gpio_lld_mco_deInit(void) {
- HAL_GPIO_DeInit(GPIO_MCO_PORT, GPIO_MCO_PIN);
- //HAL_RCC_MCOConfig(RCC_MCO3, RCC_MCO1SOURCE_NOCLOCK, RCC_MCODIV_1);
- LL_RCC_ConfigMCO(RCC_MCO1SOURCE_NOCLOCK, RCC_MCODIV_1);
-}
-
-/* Initialize GPIOs for external PA use */
-void gpio_lld_extPa_init(void) {
- GPIO_InitTypeDef GPIO_InitStruct;
+/* Initialize GPIOs used by USART */
+void gpio_lld_usart_init(void)
+{
+ GPIO_InitTypeDef gpioinitstruct = {0};
- /* Enable clock(s) for GPIOs */
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOB_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
-#endif
-
- // configure the GPIO PB0 in AF6 to be used as RF_TX_MOD_EXT_PA
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF6_RF_DTB0;
- GPIO_InitStruct.Pin = GPIO_EXT_PA_TX_PIN;
- HAL_GPIO_Init(GPIO_EXT_PA_TX_PORT, &GPIO_InitStruct);
-
- // configure the GPIO which will be managed by M0 stack to enable Ext PA
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Pin = GPIO_EXT_PA_EN_PIN;
- HAL_GPIO_Init(GPIO_EXT_PA_EN_PORT, &GPIO_InitStruct);
-}
+ /*** Configure the GPIOs ***/
+ /* Enable GPIO clock */
+ USART_TX_GPIO_CLK_ENABLE();
+ USART_RX_GPIO_CLK_ENABLE();
-/* De-initialize GPIOs for external PA use */
-void gpio_lld_extPa_deInit(void) {
- HAL_GPIO_DeInit(GPIO_EXT_PA_TX_PORT, GPIO_EXT_PA_TX_PIN);
- HAL_GPIO_DeInit(GPIO_EXT_PA_EN_PORT, GPIO_EXT_PA_EN_PIN);
-}
+ /* Common configuration to Tx and Rx */
+ gpioinitstruct.Mode = GPIO_MODE_AF_PP;
+ gpioinitstruct.Pull = GPIO_NOPULL;
+ gpioinitstruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-#ifdef USE_SIMU
-/* Initialize GPIOs for master DORY of the SIMU */
-void gpio_lld_SimuMaster_init(void) {
- GPIO_InitTypeDef GPIO_InitStruct;
-
- /* Enable clock(s) for GPIOs */
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
-#endif
-
- // In DORY master only : initialize GPIO port A pin 0, 1 and, 2 to send CRC result to simulator
- GPIO_InitStruct.Pin = (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ /* Configure USART Tx */
+ gpioinitstruct.Pin = USART_TX_PIN;
+ gpioinitstruct.Alternate = USART_TX_AF;
+ HAL_GPIO_Init(USART_TX_GPIO_PORT, &gpioinitstruct);
- // In DORY master only : initialize GPIO port B pin 8 and pin 9 to be used for debug purposes
- GPIO_InitStruct.Pin = (GPIO_TX_PIN);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH ;
- HAL_GPIO_Init(GPIO_TX_PORT, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = (GPIO_1_PIN);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH ;
- HAL_GPIO_Init(GPIO_1_PORT, &GPIO_InitStruct);
-}
+ /* Configure USART Rx */
+ gpioinitstruct.Pin = USART_RX_PIN;
+ gpioinitstruct.Alternate = USART_RX_AF;
+ HAL_GPIO_Init(USART_RX_GPIO_PORT, &gpioinitstruct);
-/* Initialize GPIOs for slave DORY of the SIMU */
-void gpio_lld_SimuSlave_init(void) {
-// No GPIO to initialize in DORY slave
-}
-#endif
-
-/* Initialize GPIOs used by USART */
-void gpio_lld_usart_init(void) {
- GPIO_InitTypeDef GPIO_InitStruct;
-
- /* Enable clock(s) for GPIOs used by USART */
-#if USE_NEW_SET_OF_GPIO_FOR_USART
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOA_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
-#endif
-#else
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOB_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
-#endif
-#endif
-
- /* USART1 GPIO Configuration
- USART1_TX : PB6
- USART1_RX : PB7
- */
-#if USE_NEW_SET_OF_GPIO_FOR_USART
- GPIO_InitStruct.Pin = GPIO_PIN_9|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_AF7_USART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-#else
- GPIO_InitStruct.Pin = 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_AF7_USART1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-#endif
+ /*** Configure the USART peripheral ***/
+ /* Enable USART clock */
+ USART_CLK_ENABLE();
}
/* De-initialize GPIOs used by USART */
void gpio_lld_usart_deInit(void) {
- /* USART1 GPIO Configuration
- USART1_TX : PB6
- USART1_RX : PB7
- */
-#if USE_NEW_SET_OF_GPIO_FOR_USART
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9);
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_10);
-#else
- HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6);
- HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7);
-#endif
-
- /* Do not disable clocks as they could be used by others GPIOs and it seems to not need power in STOP mode */
+ HAL_GPIO_DeInit(USART_TX_GPIO_PORT, USART_TX_PIN);
+ HAL_GPIO_DeInit(USART_RX_GPIO_PORT, USART_RX_PIN);
+ /* Do not disable clocks as they could be used by others GPIOs and it seems
+ to not need power in STOP mode */
}
/* Initialize GPIOs used by LPUART */
-void gpio_lld_lpuart_init(void) {
- GPIO_InitTypeDef GPIO_InitStruct;
-
-#ifdef STM32WB35xx
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
-#endif
-#else
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOC_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOC_CLK_ENABLE();
-#endif
-#endif
-
- /* LPUART1 GPIO Configuration
- LPUART1_TX : PB5 on Little DORY or PC1 on DORY
- LPUART1_RX : PA3 on Little DORY or PC0 on DORY
- */
-#ifdef STM32WB35xx
- 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_AF8_LPUART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- GPIO_InitStruct.Pin = GPIO_PIN_5;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-#else
- GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
-#endif
-}
+void gpio_lld_lpuart_init(void)
+{
+ GPIO_InitTypeDef gpioinitstruct = {0};
-/* De-initialize GPIOs used by LPUART */
-void gpio_lld_lpuart_deInit(void) {
- /* LPUART1 GPIO Configuration
- LPUART1_TX : PB5 on Little DORY PC1 on DORY
- LPUART1_RX : PA3 on Little DORY PC0 on DORY
- */
-#ifdef STM32WB35xx
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3);
- HAL_GPIO_DeInit(GPIOB, GPIO_PIN_5);
-#else
- HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0 | GPIO_PIN_1);
-#endif
- /* Do not disable clocks as they could be used by others GPIOs and it seems to not need power in STOP mode */
-}
+ /*** Configure the GPIOs ***/
+ /* Enable GPIO clock */
+ LPUART_TX_GPIO_CLK_ENABLE();
+ LPUART_RX_GPIO_CLK_ENABLE();
-#if !defined (USE_SIMU) && !defined(USE_FPGA)
-/* Initialize GPIO PA2 (for debug use only) */
-void gpio_lld_pa2_init(uint8_t mode) {
- GPIO_InitTypeDef GPIO_InitStruct;
-
- /* Enable clock(s) for GPIOs */
-#ifdef CORE_CM4
- // Enable GPIO clocks for M4 use
- __HAL_RCC_GPIOA_CLK_ENABLE();
-#else
- // Enable GPIO clocks for M0 use
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
-#endif
-
- if (mode == 0) {
- GPIO_InitStruct.Pin = GPIO_PIN_2;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- if (mode == 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_AF8_LPUART1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- if (mode == 2) {
- 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_AF6_RF_DTB7;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- if (mode == 3) {
- GPIO_InitStruct.Pin = GPIO_PIN_2;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- if (mode == 4) {
- GPIO_InitStruct.Pin = GPIO_PIN_2;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- if (mode == 5) {
- GPIO_InitStruct.Pin = GPIO_PIN_2;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
-}
+ /* Common configuration to Tx and Rx */
+ gpioinitstruct.Mode = GPIO_MODE_AF_PP;
+ gpioinitstruct.Pull = GPIO_NOPULL;
+ gpioinitstruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-/* De-initialize GPIO PA2 (for debug use only) */
-void gpio_lld_pa2_deInit(void) {
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2);
-}
+ /* Configure LPUART Tx */
+ gpioinitstruct.Pin = LPUART_TX_PIN;
+ gpioinitstruct.Alternate = LPUART_TX_AF;
+ HAL_GPIO_Init(LPUART_TX_GPIO_PORT, &gpioinitstruct);
-/*
- * Initialize GPIOs needed by DTB mode chosen (for debug use only).
- * Only DTB0 and DTB7 configurations are coded until now.
- * Do not forget to program the RF SPI register addr 0x30 () with the DTB cfg and DTB enable.
- */
-void gpio_lld_dtb_init(uint8_t dtbMode) {
- GPIO_InitTypeDef GPIO_InitStruct;
- uint32_t usePA = 0, pinPA = 0;
- uint32_t usePB = 0, pinPB = 0;
- uint32_t usePC = 0, pinPC = 0;
-
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
-
- if (dtbMode == 0) {
- GPIO_InitStruct.Alternate = GPIO_AF6_RF_DTB0;
-
- usePA = 1;
- pinPA = (GPIO_PIN_0 | GPIO_PIN_1| GPIO_PIN_2| GPIO_PIN_3| GPIO_PIN_4 |
- GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9);
-
- usePC = 1;
- pinPC = (GPIO_PIN_14 | GPIO_PIN_15);
- }
-
- if (dtbMode == 7) {
- GPIO_InitStruct.Alternate = GPIO_AF6_RF_DTB7;
-
- usePA = 1;
-#ifdef STM32WB35xx
- pinPA = (GPIO_PIN_8 | GPIO_PIN_9| GPIO_PIN_10| GPIO_PIN_11| GPIO_PIN_13| GPIO_PIN_14);
-#else
- pinPA = (GPIO_PIN_8 | GPIO_PIN_9| GPIO_PIN_10| GPIO_PIN_11);
-#endif
-
- usePB = 1;
-#ifdef STM32WB35xx
- //pinPB = (GPIO_PIN_2 | GPIO_PIN_7 | GPIO_PIN_8| GPIO_PIN_10| GPIO_PIN_11);
- // PB 7 is in conflict with USART
- pinPB = (GPIO_PIN_2 | GPIO_PIN_8);
-#else
- //pinPB = (GPIO_PIN_2 | GPIO_PIN_7 | GPIO_PIN_8| GPIO_PIN_10| GPIO_PIN_11);
- // PB 7 is in conflict with USART
- pinPB = (GPIO_PIN_2 | GPIO_PIN_8| GPIO_PIN_10| GPIO_PIN_11);
-#endif
- }
-
- if (usePA == 1) {
-#ifdef CORE_CM4
- // Enable GPIO PA clock for M4 use
- __HAL_RCC_GPIOA_CLK_ENABLE();
-#else
- // Enable GPIO PA clock for M0 use
- __HAL_RCC_C2GPIOA_CLK_ENABLE();
-#endif
-
- GPIO_InitStruct.Pin = pinPA;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
-
- if (usePB == 1) {
-#ifdef CORE_CM4
- // Enable GPIO PB clock for M4 use
- __HAL_RCC_GPIOB_CLK_ENABLE();
-#else
- // Enable GPIO PB clock for M0 use
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
-#endif
-
- GPIO_InitStruct.Pin = pinPB;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- }
-
- if (usePC == 1) {
-#ifdef CORE_CM4
- // Enable GPIO PC clock for M4 use
- __HAL_RCC_GPIOC_CLK_ENABLE();
-#else
- // Enable GPIO PC clock for M0 use
- __HAL_RCC_C2GPIOC_CLK_ENABLE();
-#endif
-
- GPIO_InitStruct.Pin = pinPC;
- HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
- }
-}
+ /* Configure LPUART Rx */
+ gpioinitstruct.Pin = LPUART_RX_PIN;
+ gpioinitstruct.Alternate = LPUART_RX_AF;
+ HAL_GPIO_Init(LPUART_RX_GPIO_PORT, &gpioinitstruct);
-void gpio_lld_dtb_deInit(void) {
- GPIO_InitTypeDef GPIO_InitStruct;
-
-#ifdef CORE_CM4
- // Enable GPIO PB clock for M4 use
- __HAL_RCC_GPIOB_CLK_ENABLE();
-#else
- // Enable GPIO PB clock for M0 use
- __HAL_RCC_C2GPIOB_CLK_ENABLE();
-#endif
-
- // configure the GPIO to be set to '1' during frame TX
- GPIO_InitStruct.Pin = (GPIO_PIN_8);
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH ;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
+ /*** Configure the LPUART peripheral ***/
+ /* Enable LPUART clock */
+ LPUART_CLK_ENABLE();
}
-#endif /* ! USE_SIMU and ! USE_FPGA */
-// Do not initialize LED GPIOs as they are already initialized by BSP if possible (depending on board and possible GPIOs conflicts).
-// So just offer the toggle possibility for debug purposes
-/* Toggle LED1 */
-void gpio_lld_led1_toggle(void) {
- HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
+/* De-initialize GPIOs used by LPUART */
+void gpio_lld_lpuart_deInit(void) {
+ HAL_GPIO_DeInit(LPUART_TX_GPIO_PORT, LPUART_TX_PIN);
+ HAL_GPIO_DeInit(LPUART_RX_GPIO_PORT, LPUART_RX_PIN);
+ /* Do not disable clocks as they could be used by others GPIOs and it seems
+ to not need power in STOP mode */
}
-/* Toggle LED2 */
-void gpio_lld_led2_toggle(void) {
- HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
-}
-/* Toggle LED3 */
-void gpio_lld_led3_toggle(void) {
- HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
-}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/hw_uart.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/hw_uart.c
index 8ea61633f..3c842b29a 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/hw_uart.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/hw_uart.c
@@ -61,123 +61,81 @@ void (*HW_hlpuart1TxCb)(void);
#endif
/* Functions Definition ------------------------------------------------------*/
-#if (CFG_HW_LPUART1_ENABLED == 1)
-/**
- * @brief LPUART1 Initialization Function
- * @param None
- * @retval None
- */
-void MX_LPUART1_UART_Init(void)
-{
- hlpuart1.Instance = LPUART1;
- hlpuart1.Init.BaudRate = 115200;
- hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
- hlpuart1.Init.StopBits = UART_STOPBITS_1;
- hlpuart1.Init.Parity = UART_PARITY_NONE;
- hlpuart1.Init.Mode = UART_MODE_TX_RX;
- hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- hlpuart1.Init.OverSampling = UART_OVERSAMPLING_16;
- hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
- hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
- if (HAL_UART_Init(&hlpuart1) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
- {
- Error_Handler();
- }
- if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
- {
- Error_Handler();
- }
-}
-void MX_LPUART1_UART_DeInit(void)
+void MX_UART_Init(hw_uart_id_t uart)
{
- hlpuart1.Instance = LPUART1;
- hlpuart1.Init.BaudRate = 115200;
- hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
- hlpuart1.Init.StopBits = UART_STOPBITS_1;
- hlpuart1.Init.Parity = UART_PARITY_NONE;
- hlpuart1.Init.Mode = UART_MODE_TX_RX;
- hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- hlpuart1.Init.OverSampling = UART_OVERSAMPLING_16;
- hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
- hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
- if (HAL_UART_DeInit(&hlpuart1) != HAL_OK)
- {
- Error_Handler();
- }
-}
+ UART_HandleTypeDef *handle = NULL;
+ USART_TypeDef *instance = NULL;
+ switch(uart){
+ case hw_uart1:
+#if (CFG_HW_USART1_ENABLED != 1)
+ return;
#endif
-
-#if (CFG_HW_USART1_ENABLED == 1)
-/**
- * @brief USART1 Initialization Function
- * @param None
- * @retval None
- */
-void MX_USART1_UART_Init(void)
-{
- huart1.Instance = USART1;
- huart1.Init.BaudRate = 115200;
- huart1.Init.WordLength = UART_WORDLENGTH_8B;
- huart1.Init.StopBits = UART_STOPBITS_1;
- huart1.Init.Parity = UART_PARITY_NONE;
- huart1.Init.Mode = UART_MODE_TX_RX;
- huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;
- huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- huart1.FifoMode = UART_FIFOMODE_DISABLE;
- if (HAL_UART_Init(&huart1) != HAL_OK)
+ handle = &huart1;
+ instance = USART1;
+ break;
+ case hw_lpuart1:
+#if (CFG_HW_LPUART1_ENABLED != 1)
+ return;
+#endif
+ handle = &hlpuart1;
+ instance = LPUART1;
+ break;
+ default: Error_Handler();
+ }
+ handle->Instance = instance;
+ handle->Init.BaudRate = 115200;
+ handle->Init.WordLength = UART_WORDLENGTH_8B;
+ handle->Init.StopBits = UART_STOPBITS_1;
+ handle->Init.Parity = UART_PARITY_NONE;
+ handle->Init.Mode = UART_MODE_TX_RX;
+ handle->Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ handle->Init.OverSampling = UART_OVERSAMPLING_16;
+ handle->Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
+ handle->Init.ClockPrescaler = UART_PRESCALER_DIV1;
+ handle->AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
+ handle->FifoMode = UART_FIFOMODE_DISABLE;
+ if (HAL_UART_Init(handle) != HAL_OK)
{
Error_Handler();
}
- if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
+ if (HAL_UARTEx_SetTxFifoThreshold(handle, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
- if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
+ if (HAL_UARTEx_SetRxFifoThreshold(handle, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
- if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
+ if (HAL_UARTEx_DisableFifoMode(handle) != HAL_OK)
{
Error_Handler();
}
}
-void MX_USART1_UART_DeInit(void)
+void MX_UART_Deinit(hw_uart_id_t uart)
{
- huart1.Instance = USART1;
- huart1.Init.BaudRate = 115200;
- huart1.Init.WordLength = UART_WORDLENGTH_8B;
- huart1.Init.StopBits = UART_STOPBITS_1;
- huart1.Init.Parity = UART_PARITY_NONE;
- huart1.Init.Mode = UART_MODE_TX_RX;
- huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart1.Init.OverSampling = UART_OVERSAMPLING_16;
- huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- huart1.FifoMode = UART_FIFOMODE_DISABLE;
- if (HAL_UART_DeInit(&huart1) != HAL_OK)
+ UART_HandleTypeDef *handle = NULL;
+ switch(uart){
+ case hw_uart1:
+#if (CFG_HW_USART1_ENABLED != 1)
+ return;
+#endif
+ handle = &huart1;
+ break;
+ case hw_lpuart1:
+#if (CFG_HW_LPUART1_ENABLED != 1)
+ return;
+#endif
+ handle = &hlpuart1;
+ break;
+ default: Error_Handler();
+ }
+ if (HAL_UART_DeInit(handle) != HAL_OK)
{
Error_Handler();
}
}
-#endif
hw_status_t HW_UART_Receive_IT(hw_uart_id_t hw_uart_id, uint8_t *p_data, uint16_t size, void (*cb)(void))
{
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/main.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/main.c
index 05eb692a4..03067aa28 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/main.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/main.c
@@ -68,12 +68,11 @@
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
-TIM_HandleTypeDef htim2;
+
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
static void MX_DMA_Init(void);
-static void MX_TIM2_Init(void);
/* USER CODE BEGIN PFP */
static void SystemClock_Config(void);
@@ -116,29 +115,24 @@ int main(void)
Reset_Device();
Config_HSE();
/* USER CODE END Init */
-
+
/* Configure the system clock on HSE without using PLL and the periph clock needed by this application */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
PeriphClock_Config();
Init_Exti();
-
+
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_DMA_Init();
- MX_TIM2_Init();
- /* USER CODE BEGIN 2 */
- if (HAL_TIM_Base_Start(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
+
/* USER CODE END 2 */
-
+
/* Init code for STM32_WPAN */
APPE_Init();
-
+
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
@@ -163,7 +157,7 @@ void SystemClock_Config_HSE(uint32_t usePLL)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
-
+
/* First, just set MSI ON (with the 32Mhz range) in case it was OFF, without any update on PLL */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
@@ -183,7 +177,7 @@ void SystemClock_Config_HSE(uint32_t usePLL)
/* Initialization Error */
Error_Handler();
}
-
+
/* Configure HSE and PLL if needed*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
@@ -201,9 +195,9 @@ void SystemClock_Config_HSE(uint32_t usePLL)
{
Error_Handler();
}
-
+
/* Configure the system clock source and the dividers according to the fact that system clock source is 32Mhz */
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4 | RCC_CLOCKTYPE_HCLK2 | RCC_CLOCKTYPE_HCLK |
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4 | RCC_CLOCKTYPE_HCLK2 | RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
if (usePLL == 1)
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
@@ -218,10 +212,10 @@ void SystemClock_Config_HSE(uint32_t usePLL)
{
Error_Handler();
}
-
+
// Note that function UTILS_SetFlashLatency() could be used to set the correct Flash latency
// (with 32Mhz, 2WS are needed if the range is changed to 1V instead of 1.2V)
-
+
/* Disable MSI Oscillator as the MSI is no more needed by the application */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.MSIState = RCC_MSI_OFF;
@@ -243,7 +237,7 @@ void SystemClock_Config_MSI(uint32_t usePLL)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
-
+
/* First, just set HSE ON (with the 32Mhz range) in case it was OFF, without any update on PLL */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
@@ -261,7 +255,7 @@ void SystemClock_Config_MSI(uint32_t usePLL)
/* Initialization Error */
Error_Handler();
}
-
+
/* Configure MSI and PLL if needed*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
@@ -282,9 +276,9 @@ void SystemClock_Config_MSI(uint32_t usePLL)
/* Initialization Error */
Error_Handler();
}
-
+
/* Configure the system clock source and the dividers according to the fact that system clock source is 32Mhz */
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4 | RCC_CLOCKTYPE_HCLK2 | RCC_CLOCKTYPE_HCLK |
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4 | RCC_CLOCKTYPE_HCLK2 | RCC_CLOCKTYPE_HCLK |
RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
if (usePLL == 1)
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
@@ -299,7 +293,7 @@ void SystemClock_Config_MSI(uint32_t usePLL)
{
Error_Handler();
}
-
+
/* HSE cannot be stopped while using RF */
#if 0
/* Disable HSE Oscillator as the HSE is no more needed by the application */
@@ -320,19 +314,19 @@ void SystemClock_Config_MSI(uint32_t usePLL)
*
*************************************************************/
/**
- * @brief System Clock Configuration : must be called during application start-up
+ * @brief System Clock Configuration : must be called during application start-up
* @retval None
*/
static void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
-
+
/* Configure LSE Drive Capability */
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
/* Assuming that MSI is enabled by default after boot, lets go to HSE without using PLL */
SystemClock_Config_HSE(0);
-
+
/* Configure Others clock */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI |
RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI2;
@@ -348,40 +342,28 @@ static void SystemClock_Config(void)
}
}
-/**
+/**
* Enable DMA controller clock
*/
-static void MX_DMA_Init(void)
+static void MX_DMA_Init(void)
{
/* DMA controller clock enable */
__HAL_RCC_DMAMUX1_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
-#ifdef STM32WB35xx
- __HAL_RCC_DMA2_CLK_ENABLE();
-#endif
-
+
/* DMA interrupt init */
-#ifdef STM32WB35xx
/* DMA1_Channel4_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
- /* DMA2_Channel4_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(DMA2_Channel4_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(DMA2_Channel4_IRQn);
-#else
- /* 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);
-#endif
+ /* DMA1_Channel5_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn);
}
static void PeriphClock_Config(void)
{
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
-
+
#if USE_SMPS_ENABLED_BY_DEFAULT
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS | RCC_PERIPHCLK_RFWAKEUP | RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_LPUART1;
PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
@@ -393,7 +375,7 @@ static void PeriphClock_Config(void)
{
Error_Handler();
}
-
+
/* Initialize SMPS here like in BLE applis */
LL_PWR_SMPS_SetStartupCurrent(LL_PWR_SMPS_STARTUP_CURRENT_80MA);
LL_PWR_SMPS_SetOutputVoltageLevel(LL_PWR_SMPS_OUTPUT_VOLTAGE_1V40);
@@ -408,7 +390,7 @@ static void PeriphClock_Config(void)
Error_Handler();
}
#endif
-
+
return;
}
@@ -433,10 +415,10 @@ static void Reset_Device( void )
{
#if ( CFG_HW_RESET_BY_FW == 1 )
Reset_BackupDomain();
-
+
Reset_IPCC();
#endif
-
+
return;
}
@@ -482,17 +464,17 @@ static void Reset_BackupDomain( void )
if ((LL_RCC_IsActiveFlag_PINRST() != FALSE) && (LL_RCC_IsActiveFlag_SFTRST() == FALSE))
{
HAL_PWR_EnableBkUpAccess(); /**< Enable access to the RTC registers */
-
+
/**
* Write twice the value to flush the APB-AHB bridge
* This bit shall be written in the register before writing the next one
*/
HAL_PWR_EnableBkUpAccess();
-
+
__HAL_RCC_BACKUPRESET_FORCE();
__HAL_RCC_BACKUPRESET_RELEASE();
}
-
+
return;
}
@@ -501,53 +483,8 @@ static void Init_Exti( void )
/**< Disable all wakeup interrupt on CPU1 except LPUART(25), IPCC(36), HSEM(38) */
LL_EXTI_DisableIT_0_31( (~0) & (~(LL_EXTI_LINE_25)) );
LL_EXTI_DisableIT_32_63( (~0) & (~(LL_EXTI_LINE_36 | LL_EXTI_LINE_38)) );
-
- return;
-}
-
-/**
- * @brief TIM2 Initialization Function
- * @param None
- * @retval None
- */
-static void MX_TIM2_Init(void)
-{
-
- /* USER CODE BEGIN TIM2_Init 0 */
-
- /* USER CODE END TIM2_Init 0 */
-
- TIM_ClockConfigTypeDef sClockSourceConfig = {0};
- TIM_MasterConfigTypeDef sMasterConfig = {0};
-
- /* USER CODE BEGIN TIM2_Init 1 */
-
- /* USER CODE END TIM2_Init 1 */
- htim2.Instance = TIM2;
- htim2.Init.Prescaler = PRESCALER_VALUE;
- htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim2.Init.Period = PERIOD_VALUE;
- htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
- htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
- if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
- {
- Error_Handler();
- }
- sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
- if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
- {
- Error_Handler();
- }
- sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
- sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
- if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN TIM2_Init 2 */
-
- /* USER CODE END TIM2_Init 2 */
+ return;
}
/*************************************************************
@@ -606,7 +543,7 @@ void Error_Handler(void)
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
-{
+{
/* USER CODE BEGIN assert_failed */
/* User can add his own implementation to report the file name and line number,
tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/pressbutton_app.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/pressbutton_app.c
deleted file mode 100644
index 9aaa61866..000000000
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/pressbutton_app.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/* USER CODE BEGIN Header */
-/**
- ******************************************************************************
- * File Name : pressbutton_app.c
- * Description : BLE LLD validation Application.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-/* USER CODE END Header */
-
-/* Includes ------------------------------------------------------------------*/
-#include "app_common.h"
-#include "shci.h"
-#include "stm32_seq.h"
-#include "stm32_lpm.h"
-#include "stm_logging.h"
-#include "dbg_trace.h"
-#include "ble_lld.h"
-#include "app_ble_lld.h"
-#include "pressbutton_app.h"
-#include "ring_buffer.h"
-
-/* Private includes -----------------------------------------------------------*/
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-/* Private typedef -----------------------------------------------------------*/
-/* USER CODE BEGIN PTD */
-
-/* USER CODE END PTD */
-
-/* Private defines -----------------------------------------------------------*/
-/* USER CODE BEGIN PD */
-#define PRESS_CHANNEL_1 8
-#define PRESS_CHANNEL_2 9
-#define PRESS_ID 0x5A964129
-#define PRESS_WAKEUP 9876
-#define PRESS_RECEIVE 19876
-#define PRESS_RECEIVE_ACK 576
-#define BACK2BACK_TIME 50
-
-/* Routines options */
-#define PRESS_PACKET_NUMBER 500 // NB of Successif PACKET using LL Send or Receive
-#define PRESS_PACKET_NUMBER_TX 500 // NB of Successif PACKET using HAL Send
-#define PRESS_PACKET_NUMBER_RX 400 // NB of Successif PACKET using HAL Receive
-#define PRESS_PACKET_STOP_RX 0 // Stop after RX
-/* USER CODE END PD */
-
-/* Private macros ------------------------------------------------------------*/
-/* USER CODE BEGIN PM */
-
-/* USER CODE END PM */
-
-/* Private function prototypes -----------------------------------------------*/
-/* USER CODE BEGIN PFP */
-static void m0CmdProcess(void);
-
-static void BUTTON_SW1_BLE_Init(void);
-static void BUTTON_SW2_SendPacket(void);
-static void BUTTON_SW3_ReceivePacket(void);
-
-static void Appli_m0CmdProcess_RadioStop(void);
-static void Appli_m0CmdProcess_RadioEnd(void);
-static void Appli_m0CmdProcess_RxAck(void);
-static void Appli_m0CmdProcess_RxOk(void);
-static void Appli_m0CmdProcess_RxAckEnd(void);
-static void Appli_m0CmdProcess_RxOkEnd(void);
-
-static void bleInit(void);
-static void bleSend(void);
-static void bleReceive(void);
-/* USER CODE END PFP */
-
-/* Private variables -----------------------------------------------*/
-/* USER CODE BEGIN PV */
-static bool Toggle_in_progress = false; // used for LED toggle
-static uint32_t number_of_TXRX=0;
-static uint32_t number_of_RXACK=0;
-
-static bool init_done = false;
-
-/* data buffer Tab to send TX */
-
-static uint8_t presstxBuffer[TXRX_BUF_SIZE] ={0x95,0xFF,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x73,0x65,0x70,0x68,0x26,0x48,0x6F,0x73,
-0x8A,0xA8,0xBB,0xFF,0x8A,0xA8,0xA8,0xA8,
-};
-
-/* data buffer ACK Tab to send TX ACK after RX */
-static uint8_t pressAcktxBuffer[TXRX_BUF_SIZE] ={0x60,0x0D,
-0x4a,0x75,0x6c,0x69,0x65,0x6e,0x2b,0x4d,0x61,0x72,0x69,0x6e,0x65,
-};
-
-/* data buffer Tab to receive RX */
-PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static uint8_t pressrxBuffer[TXRX_BUF_SIZE];
-
-/* data buffer ACK Tab to receive RX ACK after TX */
-PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static uint8_t pressAckrxBuffer[TXRX_BUF_SIZE];
-
-PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static ActionPacket pressPacket[ACTION_PACKET_NB];
-
-/* LED blinking during TX/RX */
-static Led_TypeDef ledTxRx=LED_BLUE;
-
-/* Hot config */
-PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static uint32_t BLE_LLD_hot_ana_config_table[BLE_HOT_ANA_CONFIG_TABLE_LENGTH/4];
-
-/* Timer for LED blink */
-extern TIM_HandleTypeDef htim2;
-
-/* USER CODE END PV */
-
-/* Functions Definition ------------------------------------------------------*/
-/* USER CODE BEGIN FD */
-
-void PRESSBUTTON_APP_Init(void)
-{
- /* Check the compatibility with the Coprocessor Wireless Firmware loaded */
- CheckWirelessFirmwareInfo();
-
- /* Do not allow standby in the application */
- UTIL_LPM_SetOffMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_DISABLE);
- /* Disable low power mode for now, may be enable later depending on configuration */
- UTIL_LPM_SetStopMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_DISABLE );
-
- /* Register tasks for event processing */
- UTIL_SEQ_RegTask( 1<<CFG_TASK_CMD_FROM_M0_TO_M4, UTIL_SEQ_RFU, m0CmdProcess);
- UTIL_SEQ_RegTask( 1<<CFG_TASK_HAL_BLE_INIT, UTIL_SEQ_RFU, BUTTON_SW1_BLE_Init);
- UTIL_SEQ_RegTask( 1<<CFG_TASK_HAL_BLE_SENDPACKET, UTIL_SEQ_RFU, BUTTON_SW2_SendPacket);
- UTIL_SEQ_RegTask( 1<<CFG_TASK_HAL_BLE_RECEIVEPACKET, UTIL_SEQ_RFU, BUTTON_SW3_ReceivePacket);
-
- /* Register callbacks for radio events processing */
- BLE_LLD_PRX_ReplyTaskCbRegister(CMD_FROM_M0_RADIO_STOP, Appli_m0CmdProcess_RadioStop);
- BLE_LLD_PRX_ReplyTaskCbRegister(CMD_FROM_M0_RADIO_END, Appli_m0CmdProcess_RadioEnd);
- BLE_LLD_PRX_ReplyTaskCbRegister(CMD_FROM_M0_RADIO_RXACK, Appli_m0CmdProcess_RxAck);
- BLE_LLD_PRX_ReplyTaskCbRegister(CMD_FROM_M0_RADIO_RXOK, Appli_m0CmdProcess_RxOk);
- BLE_LLD_PRX_ReplyTaskCbRegister(CMD_FROM_M0_RADIO_RXACKEND, Appli_m0CmdProcess_RxAckEnd);
- BLE_LLD_PRX_ReplyTaskCbRegister(CMD_FROM_M0_RADIO_RXOKEND, Appli_m0CmdProcess_RxOkEnd);
-
- BLE_LLD_PRX_Init(APP_BLE_LLD_SendCmdM0);
-
- APP_BLE_LLD_Init();
-
- HAL_TIM_Base_Init(&htim2);
-}
-
-/* Route button event to processing task */
-void Appli_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
-{
- switch (GPIO_Pin)
- {
- case BUTTON_SW1_PIN:
- UTIL_SEQ_SetTask(1U << CFG_TASK_HAL_BLE_INIT, CFG_SCH_PRIO_0);
- break;
-
- case BUTTON_SW2_PIN:
- UTIL_SEQ_SetTask(1U << CFG_TASK_HAL_BLE_SENDPACKET, CFG_SCH_PRIO_0);
- break;
-
- case BUTTON_SW3_PIN:
- UTIL_SEQ_SetTask(1U << CFG_TASK_HAL_BLE_RECEIVEPACKET, CFG_SCH_PRIO_0);
- break;
-
- default:
- break;
-
- }
- return;
-}
-
-void Appli_TIM_IC_CaptureCallback(void)
-{
-}
-
-static void m0CmdProcess(void)
-{
- BLE_LLD_PRX_ReplyTaskCbDispatch();
-}
-
-static void Appli_m0CmdProcess_RadioStop(void)
-{
- logUart("Radio STOP : RXACK:%d RX:%d",number_of_RXACK ,number_of_TXRX);
- number_of_RXACK=0;
- number_of_TXRX=0;
-}
-
-static void Appli_m0CmdProcess_RadioEnd(void)
-{
- HAL_TIM_Base_Stop_IT(&htim2);
- Toggle_in_progress = false;
- BSP_LED_On(LED_RED);
- BSP_LED_On(LED_GREEN);
- logUart("Radio END: RXACK:%d RX:%d",number_of_RXACK ,number_of_TXRX);
- number_of_RXACK=0;
- number_of_TXRX=0;
-}
-
-static void Appli_m0CmdProcess_RxAck(void)
-{
- number_of_RXACK++;
- if(!Toggle_in_progress){
- Toggle_in_progress = true;
- HAL_TIM_Base_Start_IT(&htim2);
- }
- logUart("Radio RXACK %d",number_of_RXACK);
-}
-
-static void Appli_m0CmdProcess_RxOk(void)
-{
- number_of_TXRX++;
- if(!Toggle_in_progress){
- Toggle_in_progress = true;
- HAL_TIM_Base_Start_IT(&htim2);
- }
- logUart("Radio RX %d",number_of_TXRX);
-}
-
-static void Appli_m0CmdProcess_RxAckEnd(void)
-{
- number_of_RXACK++;
- HAL_TIM_Base_Stop_IT(&htim2);
- Toggle_in_progress = false;
- BSP_LED_On(LED_RED);
- BSP_LED_On(LED_GREEN);
- logUart("Radio END: RXACK:%d",number_of_RXACK);
- number_of_RXACK=0;
-}
-
-static void Appli_m0CmdProcess_RxOkEnd(void)
-{
- number_of_TXRX++;
- HAL_TIM_Base_Stop_IT(&htim2);
- Toggle_in_progress = false;
- BSP_LED_On(LED_RED);
- BSP_LED_On(LED_GREEN);
- logUart("Radio END: RX:%d",number_of_TXRX);
- number_of_TXRX=0;
-}
-
-/* Appli custom functions */
-static void BUTTON_SW1_BLE_Init(void)
-{
- init_done = false;
- BSP_LED_Toggle(LED_BLUE);
-}
-
-static bool bleInitIfNeeded(void)
-{
- bool needed = !init_done;
- if (!init_done) {
- init_done = true;
- bleInit();
- }
- BSP_LED_On(LED_GREEN);
- BSP_LED_On(LED_RED);
- return needed;
-}
-
-static void BUTTON_SW2_SendPacket(void)
-{
- /* GREEN LED will be blinking during Tx */
- ledTxRx = LED_GREEN;
- if (!bleInitIfNeeded()) {
- bleSend();
- }
- BSP_LED_Off(ledTxRx);
-}
-
-static void BUTTON_SW3_ReceivePacket(void)
-{
- /* RED LED will be blinking during Rx */
- ledTxRx = LED_RED;
- if (!bleInitIfNeeded()) {
- bleReceive();
- }
- BSP_LED_Off(ledTxRx);
-}
-
-
-/* ---------------------------- LLD specific code ----------------------------*/
-static void bleInit(void)
-{
- BLE_LLD_Init(HS_STARTUP_TIME, 1, BLE_LLD_hot_ana_config_table, ENABLE);
- uint8_t map[5]= {0xFF,0xFF,0xFF,0xFF,0xFF};
-
- BLE_LLD_SetChannelMap(STATE_MACHINE_0, &map);
- BLE_LLD_SetChannel(STATE_MACHINE_0,PRESS_CHANNEL_2,0);
- BLE_LLD_SetTxAttributes(STATE_MACHINE_0, PRESS_ID, 0x555555,0);
- BLE_LLD_SetTx_Rx_Phy(STATE_MACHINE_0, TX_PHY_2MBPS, RX_PHY_2MBPS);
- BLE_LLD_SetBackToBackTime(BACK2BACK_TIME);
-
- BLE_LLD_SetChannelMap(STATE_MACHINE_3, &map);
- BLE_LLD_SetChannel(STATE_MACHINE_3, PRESS_CHANNEL_2, 0);
- BLE_LLD_SetTxAttributes(STATE_MACHINE_3, ~PRESS_ID, 0x555555,0);
- BLE_LLD_SetTx_Rx_Phy(STATE_MACHINE_3, TX_PHY_2MBPS, RX_PHY_2MBPS);
- BLE_LLD_SetBackToBackTime(BACK2BACK_TIME);
-}
-
-static void bleSend(void)
-{
- pressPacket[APACKET_0].StateMachineNo = STATE_MACHINE_0;
- pressPacket[APACKET_0].ActionTag = AT_TXRX | AT_PLL_TRIG | AT_TIMER_WAKEUP | AT_RELATIVE;
- pressPacket[APACKET_0].WakeupTime = PRESS_WAKEUP;
- pressPacket[APACKET_0].data = presstxBuffer;
- pressPacket[APACKET_0].next_true = APACKET_1;
- pressPacket[APACKET_0].next_false = APACKET_NULL;
- pressPacket[APACKET_0].condRoutine = condCase_Done;
- pressPacket[APACKET_0].dataRoutine = DATA_ROUT_LL_TXMULTIACK;
- pressPacket[APACKET_0].actionPacketNb = APACKET_0;
- BLE_LLD_SetReservedArea(&pressPacket[APACKET_0]);
-
- pressPacket[APACKET_1].StateMachineNo = STATE_MACHINE_3;
- pressPacket[APACKET_1].ActionTag = 0;
- pressPacket[APACKET_1].WakeupTime = PRESS_WAKEUP;
- pressPacket[APACKET_1].ReceiveWindowLength = PRESS_RECEIVE;
- pressPacket[APACKET_1].data = pressAckrxBuffer;
- pressPacket[APACKET_1].next_true = APACKET_NULL;
- pressPacket[APACKET_1].next_false = APACKET_0;
- pressPacket[APACKET_1].condRoutine = condCase_Done;
- pressPacket[APACKET_1].dataRoutine = DATA_ROUT_LL_TXMULTIACK;
- pressPacket[APACKET_1].actionPacketNb = APACKET_1;
- BLE_LLD_SetReservedArea(&pressPacket[APACKET_1]);
-
- BLE_LLD_PRX_SetdataRoutineMultiOptions(PRESS_PACKET_NUMBER,PRESS_PACKET_STOP_RX);
- BLE_LLD_MakeActionPacketPending(&pressPacket[APACKET_0]);
-}
-
-static void bleReceive(void)
-{
- pressPacket[APACKET_5].StateMachineNo = STATE_MACHINE_0;
- pressPacket[APACKET_5].ActionTag = AT_PLL_TRIG | AT_TIMER_WAKEUP | AT_RELATIVE;
- pressPacket[APACKET_5].WakeupTime = PRESS_WAKEUP;
- pressPacket[APACKET_5].ReceiveWindowLength = PRESS_RECEIVE;
- pressPacket[APACKET_5].data = pressrxBuffer;
- pressPacket[APACKET_5].next_true = APACKET_1;
- pressPacket[APACKET_5].next_false = APACKET_NULL;
- pressPacket[APACKET_5].condRoutine = condCase_Rx;
- pressPacket[APACKET_5].dataRoutine = DATA_ROUT_LL_RXMULTIACK;
- pressPacket[APACKET_5].actionPacketNb = APACKET_5;
- BLE_LLD_SetReservedArea(&pressPacket[APACKET_5]);
-
- pressPacket[APACKET_1].StateMachineNo = STATE_MACHINE_3;
- pressPacket[APACKET_1].ActionTag = AT_TXRX;
- pressPacket[APACKET_1].WakeupTime = PRESS_WAKEUP;
- pressPacket[APACKET_1].data = pressAcktxBuffer;
- pressPacket[APACKET_1].next_true = APACKET_NULL;
- pressPacket[APACKET_1].next_false = APACKET_5;
- pressPacket[APACKET_1].condRoutine = condCase_Done;
- pressPacket[APACKET_1].dataRoutine = DATA_ROUT_LL_RXMULTIACK;
- pressPacket[APACKET_1].actionPacketNb = APACKET_1;
- BLE_LLD_SetReservedArea(&pressPacket[APACKET_1]);
-
- BLE_LLD_PRX_SetdataRoutineMultiOptions(PRESS_PACKET_NUMBER,PRESS_PACKET_STOP_RX);
- BLE_LLD_MakeActionPacketPending(&pressPacket[APACKET_5]);
-}
-
-void Appli_TIM_PeriodElapsedCallback(void)
-{
- BSP_LED_Toggle(ledTxRx);
-}
-/* USER CODE END FD */
-
-/* USER CODE BEGIN FD_WRAP_FUNCTIONS */
-/* USER CODE END FD_WRAP_FUNCTIONS */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32_lpm_if.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32_lpm_if.c
index 7200d866b..e4e8fd597 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32_lpm_if.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32_lpm_if.c
@@ -168,11 +168,7 @@ void PWR_EnterStopMode( void )
/************************************************************************************
* ENTER STOP MODE
***********************************************************************************/
-#if(STM32WB15xx != 0)
- LL_PWR_SetPowerMode( LL_PWR_MODE_STOP1 );
-#else
- LL_PWR_SetPowerMode( LL_PWR_MODE_STOP2 );
-#endif
+ LL_PWR_SetPowerMode(CFG_PWR_MODE_STOP);
LL_LPM_EnableDeepSleep( ); /**< Set SLEEPDEEP bit of Cortex System Control Register */
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_hal_msp.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_hal_msp.c
index 9b680a158..b783825ba 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_hal_msp.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_hal_msp.c
@@ -7,11 +7,11 @@
******************************************************************************
* @attention
*
- * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
+ * the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
@@ -81,22 +81,16 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
/* USER CODE BEGIN LPUART1_MspInit 0 */
/* USER CODE END LPUART1_MspInit 0 */
- /* Peripheral clock enable */
- __HAL_RCC_LPUART1_CLK_ENABLE();
-
+
/* GPIOs configuration */
#if(CFG_DEBUG_TRACE != 0)
gpio_lld_lpuart_init();
#endif
-
+
/* LPUART1 DMA Init */
/* LPUART1_TX Init */
-#ifdef STM32WB35xx
hdma_lpuart1_tx.Instance = DMA1_Channel4;
-#else
- hdma_lpuart1_tx.Instance = DMA1_Channel1;
-#endif
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;
@@ -109,7 +103,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
Error_Handler();
}
-
+
pSyncConfig.SyncSignalID = HAL_DMAMUX1_SYNC_DMAMUX1_CH1_EVT;
pSyncConfig.SyncPolarity = HAL_DMAMUX_SYNC_NO_EVENT;
pSyncConfig.SyncEnable = DISABLE;
@@ -119,9 +113,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
Error_Handler();
}
-
+
__HAL_LINKDMA(huart,hdmatx,hdma_lpuart1_tx);
-
+
/* LPUART1 interrupt Init */
HAL_NVIC_SetPriority(LPUART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(LPUART1_IRQn);
@@ -138,19 +132,16 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
/* USER CODE END USART1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
-
+
/* GPIOs configuration */
#if(CFG_DEBUG_TRACE != 0)
gpio_lld_usart_init();
#endif
-
+
+
/* USART1 DMA Init */
/* USART1_TX Init */
-#ifdef STM32WB35xx
- hdma_usart1_tx.Instance = DMA2_Channel4;
-#else
- hdma_usart1_tx.Instance = DMA1_Channel2;
-#endif
+ hdma_usart1_tx.Instance = DMA1_Channel5;
hdma_usart1_tx.Init.Request = DMA_REQUEST_USART1_TX;
hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
@@ -163,9 +154,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{
Error_Handler();
}
-
+
__HAL_LINKDMA(huart,hdmatx,hdma_usart1_tx);
-
+
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
@@ -192,13 +183,13 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
/* USER CODE END LPUART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_LPUART1_CLK_DISABLE();
-
+
/* De-init GPIOs */
gpio_lld_lpuart_deInit();
-
+
/* LPUART1 DMA DeInit */
HAL_DMA_DeInit(huart->hdmatx);
-
+
/* LPUART1 interrupt DeInit */
HAL_NVIC_DisableIRQ(LPUART1_IRQn);
/* USER CODE BEGIN LPUART1_MspDeInit 1 */
@@ -214,13 +205,14 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
/* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();
-
+
/* De-init GPIOs */
gpio_lld_usart_deInit();
-
+
+
/* USART1 DMA DeInit */
HAL_DMA_DeInit(huart->hdmatx);
-
+
/* USART1 interrupt DeInit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_it.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_it.c
index 388150e9f..3b91552d1 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_it.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32wbxx_it.c
@@ -35,7 +35,7 @@
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
-
+
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
@@ -60,12 +60,11 @@
/* External variables --------------------------------------------------------*/
/* USER CODE BEGIN EV */
-extern TIM_HandleTypeDef htim2;
/* USER CODE END EV */
/******************************************************************************/
-/* Cortex Processor Interruption and Exception Handlers */
+/* Cortex Processor Interruption and Exception Handlers */
/******************************************************************************/
/**
* @brief This function handles Non maskable interrupt.
@@ -188,9 +187,7 @@ void SysTick_Handler(void)
/* USER CODE BEGIN SysTick_IRQn 0 */
/* USER CODE END SysTick_IRQn 0 */
-#if 0 /* no systick used */
HAL_IncTick();
-#endif
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */
@@ -202,8 +199,6 @@ void SysTick_Handler(void)
/* For the available peripheral interrupt handler names, */
/* please refer to the startup file (startup_stm32wbxx.s). */
/******************************************************************************/
-
-#ifdef STM32WB35xx
/**
* @brief This function handles DMA1 channel4 global interrupt.
*/
@@ -225,59 +220,21 @@ void DMA1_Channel4_IRQHandler(void)
/**
* @brief This function handles DMA2 channel4 global interrupt.
*/
-void DMA2_Channel4_IRQHandler(void)
+void DMA1_Channel5_IRQHandler(void)
{
- /* USER CODE BEGIN DMA2_Channel4_IRQn 0 */
+ /* USER CODE BEGIN DMA1_Channel5_IRQn 0 */
- /* USER CODE END DMA2_Channel4_IRQn 0 */
+ /* USER CODE END DMA1_Channel5_IRQn 0 */
#if (CFG_HW_USART1_ENABLED == 1)
#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
HAL_DMA_IRQHandler(&hdma_usart1_tx);
#endif
#endif
- /* USER CODE BEGIN DMA2_Channel4_IRQn 1 */
+ /* USER CODE BEGIN DMA1_Channel5_IRQn 1 */
- /* USER CODE END DMA2_Channel4_IRQn 1 */
+ /* USER CODE END DMA1_Channel5_IRQn 1 */
}
-#else
-/**
- * @brief This function handles DMA1 channel1 global interrupt.
- */
-void DMA1_Channel1_IRQHandler(void)
-{
- /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
-
- /* USER CODE END DMA1_Channel1_IRQn 0 */
-#if (CFG_HW_LPUART1_ENABLED == 1)
-#if (CFG_HW_LPUART1_DMA_TX_SUPPORTED == 1)
- HAL_DMA_IRQHandler(&hdma_lpuart1_tx);
-#endif
-#endif
- /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
-
- /* USER CODE END DMA1_Channel1_IRQn 1 */
-}
-
-/**
- * @brief This function handles DMA1 channel2 global interrupt.
- */
-void DMA1_Channel2_IRQHandler(void)
-{
- /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
-
- /* USER CODE END DMA1_Channel2_IRQn 0 */
-#if (CFG_HW_USART1_ENABLED == 1)
-#if (CFG_HW_USART1_DMA_TX_SUPPORTED == 1)
- HAL_DMA_IRQHandler(&hdma_usart1_tx);
-#endif
-#endif
- /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
-
- /* USER CODE END DMA1_Channel2_IRQn 1 */
-}
-#endif
-
/**
* @brief This function handles USART1 global interrupt.
*/
@@ -317,7 +274,7 @@ void LPUART1_IRQHandler(void)
* @param None
* @retval None
*/
-void PUSH_BUTTON_SW1_EXTI_IRQHandler(void)
+void BUTTON_SW1_EXTI_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(BUTTON_SW1_PIN);
}
@@ -328,7 +285,7 @@ void PUSH_BUTTON_SW1_EXTI_IRQHandler(void)
* @param None
* @retval None
*/
-void PUSH_BUTTON_SW2_EXTI_IRQHandler(void)
+void BUTTON_SW2_EXTI_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(BUTTON_SW2_PIN);
}
@@ -339,24 +296,18 @@ void PUSH_BUTTON_SW2_EXTI_IRQHandler(void)
* @param None
* @retval None
*/
-void PUSH_BUTTON_SW3_EXTI_IRQHandler(void)
+void BUTTON_SW3_EXTI_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(BUTTON_SW3_PIN);
}
-void TIM2_IRQHandler(void)
-{
- HAL_TIM_IRQHandler(&htim2);
-}
-
-
-#if 0 /* Not needed for LLD tests : removed to use less power */
+#if (CFG_LPM_SUPPORTED == 1U)
void RTC_WKUP_IRQHandler(void)
{
HW_TS_RTC_Wakeup_Handler();
}
-#endif /* Not needed for LLD tests : removed to use less power */
+#endif
void IPCC_C1_TX_IRQHandler(void)
{
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/system_stm32wbxx.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/system_stm32wbxx.c
index 2e42904ec..791008e1d 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/system_stm32wbxx.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Src/system_stm32wbxx.c
@@ -60,13 +60,13 @@
******************************************************************************
* @attention
*
- * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
* All rights reserved.</center></h2>
*
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
+ * This software component is licensed by ST under Apache License, Version 2.0,
+ * the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
+ * opensource.org/licenses/Apache-2.0
*
******************************************************************************
*/
@@ -97,9 +97,9 @@
#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/
#endif /* HSI_VALUE */
-#if !defined (LSI_VALUE)
+#if !defined (LSI_VALUE)
#define LSI_VALUE (32000UL) /*!< Value of LSI in Hz*/
-#endif /* LSI_VALUE */
+#endif /* LSI_VALUE */
#if !defined (LSE_VALUE)
#define LSE_VALUE (32768UL) /*!< Value of LSE in Hz*/
@@ -161,12 +161,10 @@
const uint32_t MSIRangeTable[16UL] = {100000UL, 200000UL, 400000UL, 800000UL, 1000000UL, 2000000UL, \
4000000UL, 8000000UL, 16000000UL, 24000000UL, 32000000UL, 48000000UL, 0UL, 0UL, 0UL, 0UL}; /* 0UL values are incorrect cases */
-#if defined(STM32WB55xx) || defined(STM32WB35xx)
const uint32_t SmpsPrescalerTable[4UL][6UL]={{1UL,3UL,2UL,2UL,1UL,2UL}, \
{2UL,6UL,4UL,3UL,2UL,4UL}, \
{4UL,12UL,8UL,6UL,4UL,8UL}, \
{4UL,12UL,8UL,6UL,4UL,8UL}};
-#endif
/**
* @}
@@ -192,7 +190,7 @@
void SystemInit(void)
{
/* Configure the Vector Table location add offset address ------------------*/
-#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
+#if defined(VECT_TAB_SRAM) && defined(VECT_TAB_BASE_ADDRESS)
/* program in SRAMx */
SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAMx for CPU1 */
#else /* program in FLASH */
@@ -203,7 +201,7 @@ void SystemInit(void)
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << (10UL*2UL))|(3UL << (11UL*2UL))); /* set CP10 and CP11 Full Access */
#endif
-
+
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set MSION bit */
RCC->CR |= RCC_CR_MSION;
@@ -216,10 +214,10 @@ void SystemInit(void)
/*!< Reset LSI1 and LSI2 bits */
RCC->CSR &= (uint32_t)0xFFFFFFFAU;
-
+
/*!< Reset HSI48ON bit */
RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
-
+
/* Reset PLLCFGR register */
RCC->PLLCFGR = 0x22041000U;
@@ -227,7 +225,7 @@ void SystemInit(void)
/* Reset PLLSAI1CFGR register */
RCC->PLLSAI1CFGR = 0x22041000U;
#endif
-
+
/* Reset HSEBYP bit */
RCC->CR &= 0xFFFBFFFFU;
@@ -321,10 +319,10 @@ void SystemCoreClockUpdate(void)
{
pllvco = (msirange / pllm);
}
-
+
pllvco = pllvco * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
pllr = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLR) >> RCC_PLLCFGR_PLLR_Pos) + 1UL);
-
+
SystemCoreClock = pllvco/pllr;
break;
@@ -332,7 +330,7 @@ void SystemCoreClockUpdate(void)
SystemCoreClock = msirange;
break;
}
-
+
/* Compute HCLK clock frequency --------------------------------------------*/
/* Get HCLK1 prescaler */
tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)];
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewd b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewd
index d69f71208..290b215c5 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewd
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewd
@@ -40,11 +40,11 @@
</option>
<option>
<name>MemOverride</name>
- <state>1</state>
+ <state>0</state>
</option>
<option>
<name>MemFile</name>
- <state>$TOOLKIT_DIR$\config\debugger\ST\STM32WB_M4.ddf</state>
+ <state>$TOOLKIT_DIR$\CONFIG\debugger\ST\STM32WB15.ddf</state>
</option>
<option>
<name>RunToEnable</name>
@@ -112,7 +112,7 @@
</option>
<option>
<name>FlashLoadersV3</name>
- <state>$TOOLKIT_DIR$\config\flashloader\ST\FlashSTM32WB_M4.board</state>
+ <state>$TOOLKIT_DIR$\config\flashloader\ST\FlashSTM32WB15xx.board</state>
</option>
<option>
<name>OCImagesSuppressCheck1</name>
@@ -140,7 +140,7 @@
</option>
<option>
<name>OverrideDefFlashBoard</name>
- <state>1</state>
+ <state>0</state>
</option>
<option>
<name>OCImagesOffset1</name>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewp b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewp
index c66971111..24d4fbe25 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewp
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/BLE_LLD_Pressbutton.ewp
@@ -78,7 +78,7 @@
</option>
<option>
<name>OGChipSelectEditMenu</name>
- <state>STM32WB15CC_M4 ST STM32WB15CC_M4</state>
+ <state>STM32WB15CC ST STM32WB15CC</state>
</option>
<option>
<name>GenLowLevelInterface</name>
@@ -138,7 +138,7 @@
</option>
<option>
<name>GFPUDeviceSlave</name>
- <state>STM32WB15CC_M4 ST STM32WB15CC_M4</state>
+ <state>STM32WB15CC ST STM32WB15CC</state>
</option>
<option>
<name>FPU2</name>
@@ -351,21 +351,23 @@
<state>$PROJ_DIR$/../Core/Inc</state>
<state>$PROJ_DIR$/../STM32_WPAN/App</state>
<state>$PROJ_DIR$/../STM32_WPAN/Target</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Include</state>
+ <state>$PROJ_DIR$/../../../../../../Drivers/BSP/NUCLEO-WB15CC</state>
<state>$PROJ_DIR$/../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc</state>
<state>$PROJ_DIR$/../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy</state>
+ <state>$PROJ_DIR$/../../../../../../Utilities/lpm/tiny_lpm</state>
+ <state>$PROJ_DIR$/../../../../../../Utilities/sequencer</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal</state>
+ <state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/utilities</state>
- <state>$PROJ_DIR$/../../../../../../Utilities/lpm/tiny_lpm</state>
- <state>$PROJ_DIR$/../../../../../../Utilities/sequencer</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/ble</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template</state>
<state>$PROJ_DIR$/../../../../../../Middlewares/ST/STM32_WPAN/ble/core</state>
- <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include</state>
- <state>$PROJ_DIR$/../../../../../../Drivers/CMSIS/Include</state>
- <state>$PROJ_DIR$/../../../../../../Drivers/BSP/NUCLEO-WB15CC</state>
</option>
<option>
<name>CCStdIncCheck</name>
@@ -1065,9 +1067,6 @@
<name>$PROJ_DIR$\..\Core\Src\main.c</name>
</file>
<file>
- <name>$PROJ_DIR$\..\Core\Src\pressbutton_app.c</name>
- </file>
- <file>
<name>$PROJ_DIR$\..\Core\Src\stm32_lpm_if.c</name>
</file>
<file>
@@ -1088,10 +1087,7 @@
<name>$PROJ_DIR$\..\STM32_WPAN\App\app_ble_lld.c</name>
</file>
<file>
- <name>$PROJ_DIR$\..\STM32_WPAN\App\ble_lld.c</name>
- </file>
- <file>
- <name>$PROJ_DIR$\..\STM32_WPAN\App\ring_buffer.c</name>
+ <name>$PROJ_DIR$\..\STM32_WPAN\App\pressbutton_app.c</name>
</file>
</group>
<group>
@@ -1186,6 +1182,12 @@
<group>
<name>STM32_WPAN</name>
<file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\ble_lld\hal\ble_hal.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\ble_lld\lld\ble_lld.c</name>
+ </file>
+ <file>
<name>$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_WPAN\utilities\dbg_trace.c</name>
</file>
<file>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/stm32wb15xx_flash_cm4.icf b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/stm32wb15xx_flash_cm4.icf
index 24d925ab9..9888197af 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/stm32wb15xx_flash_cm4.icf
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/EWARM/stm32wb15xx_flash_cm4.icf
@@ -7,7 +7,7 @@ define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/***** FLASH Part dedicated to M4 *****/
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
define symbol __ICFEDIT_region_ROM_end__ = 0x0801B800;
-define symbol __ICFEDIT_region_RAM_start__ = 0x20000004;
+define symbol __ICFEDIT_region_RAM_start__ = 0x20000008;
define symbol __ICFEDIT_region_RAM_end__ = 0x20002FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x1000;
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvoptx b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvoptx
new file mode 100644
index 000000000..f038cdcd1
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvoptx
@@ -0,0 +1,793 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+ <SchemaVersion>1.0</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Extensions>
+ <cExt>*.c</cExt>
+ <aExt>*.s*; *.src; *.a*</aExt>
+ <oExt>*.obj; *.o</oExt>
+ <lExt>*.lib</lExt>
+ <tExt>*.txt; *.h; *.inc</tExt>
+ <pExt>*.plm</pExt>
+ <CppX>*.cpp</CppX>
+ <nMigrate>0</nMigrate>
+ </Extensions>
+
+ <DaveTm>
+ <dwLowDateTime>0</dwLowDateTime>
+ <dwHighDateTime>0</dwHighDateTime>
+ </DaveTm>
+
+ <Target>
+ <TargetName>BLE_LLD</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <CLKADS>12000000</CLKADS>
+ <OPTTT>
+ <gFlags>1</gFlags>
+ <BeepAtEnd>1</BeepAtEnd>
+ <RunSim>0</RunSim>
+ <RunTarget>1</RunTarget>
+ <RunAbUc>0</RunAbUc>
+ </OPTTT>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <FlashByte>65535</FlashByte>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ </OPTHX>
+ <OPTLEX>
+ <PageWidth>79</PageWidth>
+ <PageLength>66</PageLength>
+ <TabStop>8</TabStop>
+ <ListingPath></ListingPath>
+ </OPTLEX>
+ <ListingPage>
+ <CreateCListing>1</CreateCListing>
+ <CreateAListing>1</CreateAListing>
+ <CreateLListing>1</CreateLListing>
+ <CreateIListing>0</CreateIListing>
+ <AsmCond>1</AsmCond>
+ <AsmSymb>1</AsmSymb>
+ <AsmXref>0</AsmXref>
+ <CCond>1</CCond>
+ <CCode>0</CCode>
+ <CListInc>0</CListInc>
+ <CSymb>0</CSymb>
+ <LinkerCodeListing>0</LinkerCodeListing>
+ </ListingPage>
+ <OPTXL>
+ <LMap>1</LMap>
+ <LComments>1</LComments>
+ <LGenerateSymbols>1</LGenerateSymbols>
+ <LLibSym>1</LLibSym>
+ <LLines>1</LLines>
+ <LLocSym>1</LLocSym>
+ <LPubSym>1</LPubSym>
+ <LXref>0</LXref>
+ <LExpSel>0</LExpSel>
+ </OPTXL>
+ <OPTFL>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <IsCurrentTarget>1</IsCurrentTarget>
+ </OPTFL>
+ <CpuCode>18</CpuCode>
+ <DebugOpt>
+ <uSim>0</uSim>
+ <uTrg>1</uTrg>
+ <sLdApp>1</sLdApp>
+ <sGomain>1</sGomain>
+ <sRbreak>1</sRbreak>
+ <sRwatch>1</sRwatch>
+ <sRmem>1</sRmem>
+ <sRfunc>1</sRfunc>
+ <sRbox>1</sRbox>
+ <tLdApp>1</tLdApp>
+ <tGomain>1</tGomain>
+ <tRbreak>1</tRbreak>
+ <tRwatch>1</tRwatch>
+ <tRmem>1</tRmem>
+ <tRfunc>1</tRfunc>
+ <tRbox>1</tRbox>
+ <tRtrace>1</tRtrace>
+ <sRSysVw>1</sRSysVw>
+ <tRSysVw>1</tRSysVw>
+ <sRunDeb>0</sRunDeb>
+ <sLrtime>0</sLrtime>
+ <bEvRecOn>1</bEvRecOn>
+ <bSchkAxf>0</bSchkAxf>
+ <bTchkAxf>0</bTchkAxf>
+ <nTsel>6</nTsel>
+ <sDll></sDll>
+ <sDllPa></sDllPa>
+ <sDlgDll></sDlgDll>
+ <sDlgPa></sDlgPa>
+ <sIfile></sIfile>
+ <tDll></tDll>
+ <tDllPa></tDllPa>
+ <tDlgDll></tDlgDll>
+ <tDlgPa></tDlgPa>
+ <tIfile></tIfile>
+ <pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
+ </DebugOpt>
+ <TargetDriverDllRegistry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>UL2CM3</Key>
+ <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4 -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM))</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ST-LINKIII-KEIL_SWO</Key>
+ <Name>-U066FFF333536414257131032 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4.FLM -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM)</Name>
+ </SetRegEntry>
+ </TargetDriverDllRegistry>
+ <Breakpoint/>
+ <Tracepoint>
+ <THDelay>0</THDelay>
+ </Tracepoint>
+ <DebugFlag>
+ <trace>0</trace>
+ <periodic>1</periodic>
+ <aLwin>1</aLwin>
+ <aCover>0</aCover>
+ <aSer1>0</aSer1>
+ <aSer2>0</aSer2>
+ <aPa>0</aPa>
+ <viewmode>1</viewmode>
+ <vrSel>0</vrSel>
+ <aSym>0</aSym>
+ <aTbox>0</aTbox>
+ <AscS1>0</AscS1>
+ <AscS2>0</AscS2>
+ <AscS3>0</AscS3>
+ <aSer3>0</aSer3>
+ <eProf>0</eProf>
+ <aLa>0</aLa>
+ <aPa1>0</aPa1>
+ <AscS4>0</AscS4>
+ <aSer4>0</aSer4>
+ <StkLoc>1</StkLoc>
+ <TrcWin>0</TrcWin>
+ <newCpu>0</newCpu>
+ <uProt>0</uProt>
+ </DebugFlag>
+ <LintExecutable></LintExecutable>
+ <LintConfigFile></LintConfigFile>
+ <bLintAuto>0</bLintAuto>
+ <bAutoGenD>0</bAutoGenD>
+ <LntExFlags>0</LntExFlags>
+ <pMisraName></pMisraName>
+ <pszMrule></pszMrule>
+ <pSingCmds></pSingCmds>
+ <pMultCmds></pMultCmds>
+ <pMisraNamep></pMisraNamep>
+ <pszMrulep></pszMrulep>
+ <pSingCmdsp></pSingCmdsp>
+ <pMultCmdsp></pMultCmdsp>
+ </TargetOption>
+ </Target>
+
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>1</FileNumber>
+ <FileType>2</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>startup_stm32wb15xx_cm4.s</PathWithFileName>
+ <FilenameWithoutPath>startup_stm32wb15xx_cm4.s</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>2</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/app_entry.c</PathWithFileName>
+ <FilenameWithoutPath>app_entry.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>3</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/gpio_lld.c</PathWithFileName>
+ <FilenameWithoutPath>gpio_lld.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>4</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/hw_uart.c</PathWithFileName>
+ <FilenameWithoutPath>hw_uart.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>5</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/main.c</PathWithFileName>
+ <FilenameWithoutPath>main.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>6</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32_lpm_if.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>7</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_hal_msp.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_msp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>8</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm32wbxx_it.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_it.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>9</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/stm_logging.c</PathWithFileName>
+ <FilenameWithoutPath>stm_logging.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/App</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>10</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/app_ble_lld.c</PathWithFileName>
+ <FilenameWithoutPath>app_ble_lld.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>3</GroupNumber>
+ <FileNumber>11</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/App/pressbutton_app.c</PathWithFileName>
+ <FilenameWithoutPath>pressbutton_app.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/Target</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>4</GroupNumber>
+ <FileNumber>12</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../STM32_WPAN/Target/hw_ipcc.c</PathWithFileName>
+ <FilenameWithoutPath>hw_ipcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Doc</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>5</GroupNumber>
+ <FileNumber>13</FileNumber>
+ <FileType>5</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../readme.txt</PathWithFileName>
+ <FilenameWithoutPath>readme.txt</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/BSP/NUCLEO-WB15CC</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>6</GroupNumber>
+ <FileNumber>14</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</PathWithFileName>
+ <FilenameWithoutPath>nucleo_wb15cc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>7</GroupNumber>
+ <FileNumber>15</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../Core/Src/system_stm32wbxx.c</PathWithFileName>
+ <FilenameWithoutPath>system_stm32wbxx.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>16</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>17</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_cortex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>18</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>19</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_dma_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>20</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_exti.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>21</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>22</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_flash_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>23</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_gpio.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>24</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_hsem.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>25</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>26</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_pwr_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>27</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>28</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_rcc_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>29</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>30</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_tim_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>31</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>8</GroupNumber>
+ <FileNumber>32</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</PathWithFileName>
+ <FilenameWithoutPath>stm32wbxx_hal_uart_ex.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>33</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal/ble_hal.c</PathWithFileName>
+ <FilenameWithoutPath>ble_hal.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>34</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld/ble_lld.c</PathWithFileName>
+ <FilenameWithoutPath>ble_lld.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>35</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</PathWithFileName>
+ <FilenameWithoutPath>dbg_trace.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>36</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/otp.c</PathWithFileName>
+ <FilenameWithoutPath>otp.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>37</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</PathWithFileName>
+ <FilenameWithoutPath>shci.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>38</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>39</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</PathWithFileName>
+ <FilenameWithoutPath>shci_tl_if.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>40</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_list.c</PathWithFileName>
+ <FilenameWithoutPath>stm_list.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>41</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</PathWithFileName>
+ <FilenameWithoutPath>stm_queue.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>9</GroupNumber>
+ <FileNumber>42</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</PathWithFileName>
+ <FilenameWithoutPath>tl_mbox.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Utilities</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>43</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/lpm/tiny_lpm/stm32_lpm.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_lpm.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ <File>
+ <GroupNumber>10</GroupNumber>
+ <FileNumber>44</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>../../../../../../Utilities/sequencer/stm32_seq.c</PathWithFileName>
+ <FilenameWithoutPath>stm32_seq.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+</ProjectOpt>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvprojx b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvprojx
new file mode 100644
index 000000000..6a7cd3742
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/BLE_LLD_Pressbutton.uvprojx
@@ -0,0 +1,689 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
+ <SchemaVersion>2.1</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Targets>
+ <Target>
+ <TargetName>BLE_LLD</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed>
+ <uAC6>0</uAC6>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>STM32WB15CCUx</Device>
+ <Vendor>STMicroelectronics</Vendor>
+ <PackID>Keil.STM32WB1x_DFP.0.0.1</PackID>
+ <PackURL>http://www.keil.com/pack</PackURL>
+ <Cpu>IRAM(0x20000000,0x00003000) IROM(0x08000000,0x00050000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ESEL ELITTLE</Cpu>
+ <FlashUtilSpec></FlashUtilSpec>
+ <StartupFile></StartupFile>
+ <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32WB1x_320_M4 -FS08000000 -FL050000 -FP0($$Device:STM32WB15CCUx$Drivers\CMSIS\Flash\STM32WB1x_320_M4.FLM))</FlashDriverDll>
+ <DeviceId>0</DeviceId>
+ <RegisterFile>$$Device:STM32WB15CCUx$Drivers\CMSIS\Device\ST\STM32WBxx\Include\stm32wb15xx.h</RegisterFile>
+ <MemoryEnv></MemoryEnv>
+ <Cmp></Cmp>
+ <Asm></Asm>
+ <Linker></Linker>
+ <OHString></OHString>
+ <InfinionOptionDll></InfinionOptionDll>
+ <SLE66CMisc></SLE66CMisc>
+ <SLE66AMisc></SLE66AMisc>
+ <SLE66LinkerMisc></SLE66LinkerMisc>
+ <SFDFile>$$Device:STM32WB15CCUx$Drivers\CMSIS\SVD\STM32WB15_CM4.svd</SFDFile>
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath></BinPath>
+ <IncludePath></IncludePath>
+ <LibPath></LibPath>
+ <RegisterFilePath></RegisterFilePath>
+ <DBRegisterFilePath></DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>BLE_LLD\Exe\</OutputDirectory>
+ <OutputName>BLE_LLD_Pressbutton</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>1</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath></ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>1</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name>fromelf #L --bin --output=$L@L.bin</UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopA1X>0</nStopA1X>
+ <nStopA2X>0</nStopA2X>
+ </AfterMake>
+ <SelectedForBatchBuild>1</SelectedForBatchBuild>
+ <SVCSIdString></SVCSIdString>
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument></CustomArgument>
+ <IncludeLibraryModules></IncludeLibraryModules>
+ <ComprImg>0</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments> -REMAP -MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments> -MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4101</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>BIN\UL2CM3.DLL</Flash2>
+ <Flash3></Flash3>
+ <Flash4></Flash4>
+ <pFcarmOut></pFcarmOut>
+ <pFcarmGrp></pFcarmGrp>
+ <pFcArmRoot></pFcArmRoot>
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M4"</AdsCpuType>
+ <RvctDeviceName></RvctDeviceName>
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>2</RvdsVP>
+ <RvdsMve>0</RvdsMve>
+ <RvdsCdeCp>0</RvdsCdeCp>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>1</useUlib>
+ <EndSel>1</EndSel>
+ <uLtcg>0</uLtcg>
+ <nSecure>0</nSecure>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x3000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x50000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x8000000</StartAddress>
+ <Size>0x50000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x3000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector></RvctStartVector>
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>4</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>1</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>2</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>1</uC99>
+ <uGnu>0</uGnu>
+ <useXO>0</useXO>
+ <v6Lang>5</v6Lang>
+ <v6LangP>3</v6LangP>
+ <vShortEn>1</vShortEn>
+ <vShortWch>1</vShortWch>
+ <v6Lto>0</v6Lto>
+ <v6WtE>0</v6WtE>
+ <v6Rtti>0</v6Rtti>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define>CORE_CM4,USE_HAL_DRIVER,STM32WB15xx,USE_STM32WBXX_NUCLEO,BLE_LLD_WB</Define>
+ <Undefine></Undefine>
+ <IncludePath>../Core/Inc;../STM32_WPAN/App;../STM32_WPAN/Target;../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include;../../../../../../Drivers/CMSIS/Include;../../../../../../Drivers/BSP/NUCLEO-WB15CC;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc;../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy;../../../../../../Utilities/lpm/tiny_lpm;../../../../../../Utilities/sequencer;../../../../../../Middlewares/ST/STM32_WPAN;../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal;../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl;../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci;../../../../../../Middlewares/ST/STM32_WPAN/utilities;../../../../../../Middlewares/ST/STM32_WPAN/ble;../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template;../../../../../../Middlewares/ST/STM32_WPAN/ble/core</IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <ClangAsOpt>4</ClangAsOpt>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>0</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange></TextAddressRange>
+ <DataAddressRange></DataAddressRange>
+ <pXoBase></pXoBase>
+ <ScatterFile>stm32wb15xx_flash_cm4.sct</ScatterFile>
+ <IncludeLibs></IncludeLibs>
+ <IncludeLibsPath></IncludeLibsPath>
+ <Misc>--diag_suppress L6314W
+--diag_suppress 1296</Misc>
+ <LinkerInputFile></LinkerInputFile>
+ <DisabledWarnings></DisabledWarnings>
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Application/MDK-ARM</GroupName>
+ <Files>
+ <File>
+ <FileName>startup_stm32wb15xx_cm4.s</FileName>
+ <FileType>2</FileType>
+ <FilePath>startup_stm32wb15xx_cm4.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/Core</GroupName>
+ <Files>
+ <File>
+ <FileName>app_entry.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/app_entry.c</FilePath>
+ </File>
+ <File>
+ <FileName>gpio_lld.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/gpio_lld.c</FilePath>
+ </File>
+ <File>
+ <FileName>hw_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/hw_uart.c</FilePath>
+ </File>
+ <File>
+ <FileName>main.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/main.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32_lpm_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32_lpm_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_msp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_hal_msp.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_it.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm32wbxx_it.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm_logging.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/stm_logging.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/App</GroupName>
+ <Files>
+ <File>
+ <FileName>app_ble_lld.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/App/app_ble_lld.c</FilePath>
+ </File>
+ <File>
+ <FileName>pressbutton_app.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/App/pressbutton_app.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Application/User/STM32_WPAN/Target</GroupName>
+ <Files>
+ <File>
+ <FileName>hw_ipcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../STM32_WPAN/Target/hw_ipcc.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Doc</GroupName>
+ <Files>
+ <File>
+ <FileName>readme.txt</FileName>
+ <FileType>5</FileType>
+ <FilePath>../readme.txt</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/BSP/NUCLEO-WB15CC</GroupName>
+ <Files>
+ <File>
+ <FileName>nucleo_wb15cc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/CMSIS</GroupName>
+ <Files>
+ <File>
+ <FileName>system_stm32wbxx.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../Core/Src/system_stm32wbxx.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers/STM32WBxx_HAL_Driver</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32wbxx_hal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_cortex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_dma_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_exti.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_flash_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_hsem.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_pwr_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_rcc_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_tim_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_uart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32wbxx_hal_uart_ex.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Middlewares/STM32_WPAN</GroupName>
+ <Files>
+ <File>
+ <FileName>ble_hal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal/ble_hal.c</FilePath>
+ </File>
+ <File>
+ <FileName>ble_lld.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld/ble_lld.c</FilePath>
+ </File>
+ <File>
+ <FileName>dbg_trace.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</FilePath>
+ </File>
+ <File>
+ <FileName>otp.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/otp.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci_tl.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</FilePath>
+ </File>
+ <File>
+ <FileName>shci_tl_if.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm_list.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_list.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm_queue.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</FilePath>
+ </File>
+ <File>
+ <FileName>tl_mbox.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Utilities</GroupName>
+ <Files>
+ <File>
+ <FileName>stm32_lpm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Utilities/lpm/tiny_lpm/stm32_lpm.c</FilePath>
+ </File>
+ <File>
+ <FileName>stm32_seq.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../../../../../Utilities/sequencer/stm32_seq.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+
+ <RTE>
+ <apis/>
+ <components>
+ <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.4.0" condition="ARMv6_7_8-M Device">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.7.0"/>
+ <targetInfos>
+ <targetInfo name="BLE_LLD"/>
+ </targetInfos>
+ </component>
+ </components>
+ <files/>
+ </RTE>
+
+ <LayerInfo>
+ <Layers>
+ <Layer>
+ <LayName>&lt;Project Info&gt;</LayName>
+ <LayDesc></LayDesc>
+ <LayUrl></LayUrl>
+ <LayKeys></LayKeys>
+ <LayCat></LayCat>
+ <LayLic></LayLic>
+ <LayTarg>0</LayTarg>
+ <LayPrjMark>1</LayPrjMark>
+ </Layer>
+ </Layers>
+ </LayerInfo>
+
+</Project>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/startup_stm32wb15xx_cm4.s b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/startup_stm32wb15xx_cm4.s
new file mode 100644
index 000000000..7794948c3
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/startup_stm32wb15xx_cm4.s
@@ -0,0 +1,336 @@
+;******************************************************************************
+;* File Name : startup_stm32wb15xx_cm4.s
+;* Author : MCD Application Team
+;* Description : STM32WB15xx devices vector table for MDK-ARM toolchain.
+;* This module performs:
+;* - Set the initial SP
+;* - Set the initial PC == Reset_Handler
+;* - Set the vector table entries with the exceptions ISR address
+;* - Branches to __main in the C library (which eventually
+;* calls main()).
+;* After Reset the CortexM4 processor is in Thread mode,
+;* priority is Privileged, and the Stack is set to Main.
+;* <<< Use Configuration Wizard in Context Menu >>>
+;******************************************************************************
+;* @attention
+;*
+;* Copyright (c) 2019 STMicroelectronics. All rights reserved.
+;*
+;* This software component is licensed by ST under Apache License, Version 2.0,
+;* the "License"; You may not use this file except in compliance with the
+;* License. You may obtain a copy of the License at:
+;* opensource.org/licenses/Apache-2.0
+;*
+;******************************************************************************
+
+; Amount of memory (in bytes) allocated for Stack
+; Tailor this value to your application needs
+; <h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Stack_Size EQU 0x400
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+; <h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Heap_Size EQU 0x200
+
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NMI_Handler ; NMI Handler
+ DCD HardFault_Handler ; Hard Fault Handler
+ DCD MemManage_Handler ; MPU Fault Handler
+ DCD BusFault_Handler ; Bus Fault Handler
+ DCD UsageFault_Handler ; Usage Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; SVCall Handler
+ DCD DebugMon_Handler ; Debug Monitor Handler
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; PendSV Handler
+ DCD SysTick_Handler ; SysTick Handler
+
+ ; External Interrupts
+ DCD WWDG_IRQHandler ; Window WatchDog
+ DCD PVD_PVM_IRQHandler ; PVD and PVM detector
+ DCD TAMP_STAMP_LSECSS_IRQHandler ; RTC Tamper and TimeStamp Interrupts and LSECSS Interrupts
+ DCD RTC_WKUP_IRQHandler ; RTC Wakeup Interrupt
+ DCD FLASH_IRQHandler ; FLASH global Interrupt
+ DCD RCC_IRQHandler ; RCC Interrupt
+ DCD EXTI0_IRQHandler ; EXTI Line 0 Interrupt
+ DCD EXTI1_IRQHandler ; EXTI Line 1 Interrupt
+ DCD EXTI2_IRQHandler ; EXTI Line 2 Interrupt
+ DCD EXTI3_IRQHandler ; EXTI Line 3 Interrup
+ DCD EXTI4_IRQHandler ; EXTI Line 4 Interrupt
+ DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 Interrupt
+ DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 Interrupt
+ DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 Interrupt
+ DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 Interrupt
+ DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 Interrupt
+ DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 Interrupt
+ DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 Interrupt
+ DCD ADC1_IRQHandler ; ADC1 Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD C2SEV_PWR_C2H_IRQHandler ; CPU M0+ SEV Interrupt
+ DCD COMP_IRQHandler ; COMP1 Interrupts
+ DCD EXTI9_5_IRQHandler ; EXTI Lines [9:5] Interrupt
+ DCD TIM1_BRK_IRQHandler ; TIM1 Break Interrupt
+ DCD TIM1_UP_IRQHandler ; TIM1 Update Interrupt
+ DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Communication Interrupts
+ DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare Interrupt
+ DCD TIM2_IRQHandler ; TIM2 Global Interrupt
+ DCD PKA_IRQHandler ; PKA Interrupt
+ DCD I2C1_EV_IRQHandler ; I2C1 Event Interrupt
+ DCD I2C1_ER_IRQHandler ; I2C1 Error Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SPI1_IRQHandler ; SPI1 Interrupt
+ DCD 0 ; Reserved
+ DCD USART1_IRQHandler ; USART1 Interrupt
+ DCD LPUART1_IRQHandler ; LPUART1 Interrupt
+ DCD 0 ; Reserved
+ DCD TSC_IRQHandler ; TSC Interrupt
+ DCD EXTI15_10_IRQHandler ; EXTI Lines1[15:10 ]Interrupts
+ DCD RTC_Alarm_IRQHandler ; RTC Alarms (A and B) Interrupt
+ DCD 0 ; Reserved
+ DCD PWR_SOTF_BLEACT_RFPHASE_IRQHandler ; WKUP Interrupt from PWR
+ DCD IPCC_C1_RX_IRQHandler ; IPCC CPU1 RX occupied interrupt
+ DCD IPCC_C1_TX_IRQHandler ; IPCC CPU1 RX free interrupt
+ DCD HSEM_IRQHandler ; HSEM0 Interrupt
+ DCD LPTIM1_IRQHandler ; LPTIM1 Interrupt
+ DCD LPTIM2_IRQHandler ; LPTIM2 Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD AES2_IRQHandler ; AES2 Interrupt
+ DCD RNG_IRQHandler ; RNG1 Interrupt
+ DCD FPU_IRQHandler ; FPU Interrupt
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD DMAMUX1_OVR_IRQHandler ; DMAMUX overrun Interrupt
+
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ AREA |.text|, CODE, READONLY
+
+; Reset handler
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ B .
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ B .
+ ENDP
+MemManage_Handler\
+ PROC
+ EXPORT MemManage_Handler [WEAK]
+ B .
+ ENDP
+BusFault_Handler\
+ PROC
+ EXPORT BusFault_Handler [WEAK]
+ B .
+ ENDP
+UsageFault_Handler\
+ PROC
+ EXPORT UsageFault_Handler [WEAK]
+ B .
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+DebugMon_Handler\
+ PROC
+ EXPORT DebugMon_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+Default_Handler PROC
+
+ EXPORT WWDG_IRQHandler [WEAK]
+ EXPORT PVD_PVM_IRQHandler [WEAK]
+ EXPORT TAMP_STAMP_LSECSS_IRQHandler [WEAK]
+ EXPORT RTC_WKUP_IRQHandler [WEAK]
+ EXPORT FLASH_IRQHandler [WEAK]
+ EXPORT RCC_IRQHandler [WEAK]
+ EXPORT EXTI0_IRQHandler [WEAK]
+ EXPORT EXTI1_IRQHandler [WEAK]
+ EXPORT EXTI2_IRQHandler [WEAK]
+ EXPORT EXTI3_IRQHandler [WEAK]
+ EXPORT EXTI4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel1_IRQHandler [WEAK]
+ EXPORT DMA1_Channel2_IRQHandler [WEAK]
+ EXPORT DMA1_Channel3_IRQHandler [WEAK]
+ EXPORT DMA1_Channel4_IRQHandler [WEAK]
+ EXPORT DMA1_Channel5_IRQHandler [WEAK]
+ EXPORT DMA1_Channel6_IRQHandler [WEAK]
+ EXPORT DMA1_Channel7_IRQHandler [WEAK]
+ EXPORT ADC1_IRQHandler [WEAK]
+ EXPORT C2SEV_PWR_C2H_IRQHandler [WEAK]
+ EXPORT COMP_IRQHandler [WEAK]
+ EXPORT EXTI9_5_IRQHandler [WEAK]
+ EXPORT TIM1_BRK_IRQHandler [WEAK]
+ EXPORT TIM1_UP_IRQHandler [WEAK]
+ EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
+ EXPORT TIM1_CC_IRQHandler [WEAK]
+ EXPORT TIM2_IRQHandler [WEAK]
+ EXPORT PKA_IRQHandler [WEAK]
+ EXPORT I2C1_EV_IRQHandler [WEAK]
+ EXPORT I2C1_ER_IRQHandler [WEAK]
+ EXPORT SPI1_IRQHandler [WEAK]
+ EXPORT USART1_IRQHandler [WEAK]
+ EXPORT LPUART1_IRQHandler [WEAK]
+ EXPORT TSC_IRQHandler [WEAK]
+ EXPORT EXTI15_10_IRQHandler [WEAK]
+ EXPORT RTC_Alarm_IRQHandler [WEAK]
+ EXPORT PWR_SOTF_BLEACT_RFPHASE_IRQHandler [WEAK]
+ EXPORT IPCC_C1_RX_IRQHandler [WEAK]
+ EXPORT IPCC_C1_TX_IRQHandler [WEAK]
+ EXPORT HSEM_IRQHandler [WEAK]
+ EXPORT LPTIM1_IRQHandler [WEAK]
+ EXPORT LPTIM2_IRQHandler [WEAK]
+ EXPORT AES1_IRQHandler [WEAK]
+ EXPORT AES2_IRQHandler [WEAK]
+ EXPORT RNG_IRQHandler [WEAK]
+ EXPORT FPU_IRQHandler [WEAK]
+ EXPORT DMAMUX1_OVR_IRQHandler [WEAK]
+
+WWDG_IRQHandler
+PVD_PVM_IRQHandler
+TAMP_STAMP_LSECSS_IRQHandler
+RTC_WKUP_IRQHandler
+FLASH_IRQHandler
+RCC_IRQHandler
+EXTI0_IRQHandler
+EXTI1_IRQHandler
+EXTI2_IRQHandler
+EXTI3_IRQHandler
+EXTI4_IRQHandler
+DMA1_Channel1_IRQHandler
+DMA1_Channel2_IRQHandler
+DMA1_Channel3_IRQHandler
+DMA1_Channel4_IRQHandler
+DMA1_Channel5_IRQHandler
+DMA1_Channel6_IRQHandler
+DMA1_Channel7_IRQHandler
+ADC1_IRQHandler
+C2SEV_PWR_C2H_IRQHandler
+COMP_IRQHandler
+EXTI9_5_IRQHandler
+TIM1_BRK_IRQHandler
+TIM1_UP_IRQHandler
+TIM1_TRG_COM_IRQHandler
+TIM1_CC_IRQHandler
+TIM2_IRQHandler
+PKA_IRQHandler
+I2C1_EV_IRQHandler
+I2C1_ER_IRQHandler
+SPI1_IRQHandler
+USART1_IRQHandler
+LPUART1_IRQHandler
+TSC_IRQHandler
+EXTI15_10_IRQHandler
+RTC_Alarm_IRQHandler
+PWR_SOTF_BLEACT_RFPHASE_IRQHandler
+IPCC_C1_RX_IRQHandler
+IPCC_C1_TX_IRQHandler
+HSEM_IRQHandler
+LPTIM1_IRQHandler
+LPTIM2_IRQHandler
+AES1_IRQHandler
+AES2_IRQHandler
+RNG_IRQHandler
+FPU_IRQHandler
+DMAMUX1_OVR_IRQHandler
+
+ B .
+
+ ENDP
+
+ ALIGN
+
+;*******************************************************************************
+; User Stack and Heap initialization
+;*******************************************************************************
+ IF :DEF:__MICROLIB
+
+ EXPORT __initial_sp
+ EXPORT __heap_base
+ EXPORT __heap_limit
+
+ ELSE
+
+ IMPORT __use_two_region_memory
+ EXPORT __user_initial_stackheap
+
+__user_initial_stackheap
+
+ LDR R0, = Heap_Mem
+ LDR R1, =(Stack_Mem + Stack_Size)
+ LDR R2, = (Heap_Mem + Heap_Size)
+ LDR R3, = Stack_Mem
+ BX LR
+
+ ALIGN
+
+ ENDIF
+
+ END
+
+;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/stm32wb15xx_flash_cm4.sct b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/stm32wb15xx_flash_cm4.sct
new file mode 100644
index 000000000..28aca4068
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/MDK-ARM/stm32wb15xx_flash_cm4.sct
@@ -0,0 +1,21 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+; *************************************************************
+
+LR_IROM1 0x08000000 0x0001B800 { ; load region size_region
+ ER_IROM1 0x08000000 0x0001B800 { ; load address = execution address
+ *.o (RESET, +First)
+ *(InRoot$$Sections)
+ .ANY (+RO)
+ }
+ RW_IRAM1 0x20000008 0x2FF8 { ; RW data
+ .ANY (+RW +ZI)
+ }
+ RW_RAM_SHARED 0x20030000 0x2800 { ; RW data
+ *(MAPPING_TABLE)
+ *(MB_MEM1)
+ *(MB_MEM2)
+ }
+ }
+
+
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.cproject b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.cproject
new file mode 100644
index 000000000..4da18dc26
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.cproject
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1315355370">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1315355370" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1315355370" name="Debug" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug">
+ <folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1315355370." name="/" resourcePath="">
+ <toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.670260761" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1279999279" name="Mcu" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" value="STM32WB15CCUx" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1701700440" name="CpuId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1774287055" name="CpuCoreId" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.1757817037" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1098284970" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.573351909" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="NUCLEO-WB15CC" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1445002461" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.4 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-WB15CC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../Core/Inc | ../../STM32_WPAN/App | ../../STM32_WPAN/Target | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/CMSIS/Include | ../../../../../../../Drivers/BSP/NUCLEO-WB15CC | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy | ../../../../../../../Utilities/lpm/tiny_lpm | ../../../../../../../Utilities/sequencer | ../../../../../../../Middlewares/ST/STM32_WPAN | ../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal | ../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci | ../../../../../../../Middlewares/ST/STM32_WPAN/utilities | ../../../../../../../Middlewares/ST/STM32_WPAN/ble | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core || || || CORE_CM4 | BLE_LLD_WB | USE_HAL_DRIVER | STM32WB15xx | USE_STM32WBXX_NUCLEO || || || || || ${workspace_loc:/${ProjName}/STM32WB15CCUX_FLASH.ld} || true || NonSecure || || || || None" valueType="string"/>
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1327541449" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
+ <builder buildPath="${workspace_loc:/BLE_LLD_Pressbutton}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.367821347" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.537755242" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.739610717" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g3" valueType="enumerated"/>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.34775048" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1423434112" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1008098624" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.448250553" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level"/>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1414581635" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="DEBUG"/>
+ <listOptionValue builtIn="false" value="CORE_CM4"/>
+ <listOptionValue builtIn="false" value="BLE_LLD_WB"/>
+ <listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
+ <listOptionValue builtIn="false" value="STM32WB15xx"/>
+ <listOptionValue builtIn="false" value="USE_STM32WBXX_NUCLEO"/>
+ </option>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.276709277" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" valueType="includePath">
+ <listOptionValue builtIn="false" value="../../Core/Inc"/>
+ <listOptionValue builtIn="false" value="../../STM32_WPAN/App"/>
+ <listOptionValue builtIn="false" value="../../STM32_WPAN/Target"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Include"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/BSP/NUCLEO-WB15CC"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Utilities/lpm/tiny_lpm"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Utilities/sequencer"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/utilities"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble/core"/>
+ </option>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.170724256" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.80585763" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.914361309" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1568627291" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.2015519191" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.278173699" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32WB15CCUX_FLASH.ld}" valueType="string"/>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.2117524458" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.760942056" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.1118710167" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.1916691540" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1760290908" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.2105137626" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1953240667" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1245613591" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.812122190" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.334958789" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ <cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1601382521">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1601382521" moduleId="org.eclipse.cdt.core.settings" name="Release">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1601382521" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release">
+ <folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1601382521." name="/" resourcePath="">
+ <toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.745108876" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1420007398" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" value="STM32WB15CCUx" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.102579004" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.133540709" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" value="0" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.1791992657" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv4-sp-d16" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1112716530" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1496373686" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="NUCLEO-WB15CC" valueType="string"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.440394166" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.4 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || NUCLEO-WB15CC || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../../Core/Inc | ../../STM32_WPAN/App | ../../STM32_WPAN/Target | ../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include | ../../../../../../../Drivers/CMSIS/Include | ../../../../../../../Drivers/BSP/NUCLEO-WB15CC | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc | ../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy | ../../../../../../../Utilities/lpm/tiny_lpm | ../../../../../../../Utilities/sequencer | ../../../../../../../Middlewares/ST/STM32_WPAN | ../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal | ../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl | ../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci | ../../../../../../../Middlewares/ST/STM32_WPAN/utilities | ../../../../../../../Middlewares/ST/STM32_WPAN/ble | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template | ../../../../../../../Middlewares/ST/STM32_WPAN/ble/core || || || CORE_CM4 | BLE_LLD_WB | USE_HAL_DRIVER | STM32WB15xx | USE_STM32WBXX_NUCLEO || || || || || ${workspace_loc:/${ProjName}/STM32WB15CCUX_FLASH.ld} || true || NonSecure || Size || || || None" valueType="string"/>
+ <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.828938201" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
+ <builder buildPath="${workspace_loc:/BLE_LLD_Pressbutton}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1378262456" managedBuildOn="true" name="Gnu Make Builder.Release" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.398221453" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1945245308" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1236206860" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.2012032589" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1570140080" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1897854757" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1845644441" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" valueType="definedSymbols">
+ <listOptionValue builtIn="false" value="CORE_CM4"/>
+ <listOptionValue builtIn="false" value="BLE_LLD_WB"/>
+ <listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
+ <listOptionValue builtIn="false" value="STM32WB15xx"/>
+ <listOptionValue builtIn="false" value="USE_STM32WBXX_NUCLEO"/>
+ </option>
+ <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.575648169" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" valueType="includePath">
+ <listOptionValue builtIn="false" value="../../Core/Inc"/>
+ <listOptionValue builtIn="false" value="../../STM32_WPAN/App"/>
+ <listOptionValue builtIn="false" value="../../STM32_WPAN/Target"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Device/ST/STM32WBxx/Include"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/CMSIS/Include"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/BSP/NUCLEO-WB15CC"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Drivers/STM32WBxx_HAL_Driver/Inc/Legacy"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Utilities/lpm/tiny_lpm"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Utilities/sequencer"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/hal"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble_lld/lld"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/utilities"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble/core/template"/>
+ <listOptionValue builtIn="false" value="../../../../../../../Middlewares/ST/STM32_WPAN/ble/core"/>
+ </option>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1254647233" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.313413461" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.320277720" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.277055464" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.1346060453" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
+ <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.2029948935" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32WB15CCUX_FLASH.ld}" valueType="string"/>
+ <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.1765473604" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
+ <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+ <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+ </inputType>
+ </tool>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.410214512" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.1044154336" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.1709293259" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1287762974" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.689492690" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1198875199" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1511162863" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.1847608067" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
+ <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.947939950" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
+ </toolChain>
+ </folderInfo>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.pathentry"/>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="BLE_LLD_Pressbutton.null.1789655620" name="BLE_LLD_Pressbutton"/>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1601382521;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1601382521.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.2012032589;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1254647233">
+ <autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ <scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1315355370;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1315355370.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1423434112;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.170724256">
+ <autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
+</cproject>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.project b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.project
new file mode 100644
index 000000000..dc803f229
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/.project
@@ -0,0 +1,249 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>BLE_LLD_Pressbutton</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.st.stm32cube.ide.mcu.MCUProjectNature</nature>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUNonUnderRootProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUCubeExampleProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature</nature>
+ <nature>com.st.stm32cube.ide.mcu.MCURootProjectNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ </natures>
+ <linkedResources>
+ <link>
+ <name>Doc/readme.txt</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/readme.txt</locationURI>
+ </link>
+ <link>
+ <name>Utilities/stm32_lpm.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Utilities/lpm/tiny_lpm/stm32_lpm.c</locationURI>
+ </link>
+ <link>
+ <name>Utilities/stm32_seq.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Utilities/sequencer/stm32_seq.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/CMSIS/system_stm32wbxx.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/system_stm32wbxx.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_cortex.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_cortex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_dma.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_dma_ex.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_dma_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_exti.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_exti.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_flash.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_flash_ex.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_flash_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_gpio.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_gpio.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_hsem.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_hsem.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_pwr.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_pwr_ex.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pwr_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_rcc.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_rcc_ex.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_rcc_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_tim.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_tim_ex.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_tim_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_uart.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/STM32WBxx_HAL_Driver/stm32wbxx_hal_uart_ex.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_uart_ex.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/ble_hal.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/ble_lld/hal/ble_hal.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/ble_lld.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/ble_lld/lld/ble_lld.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/dbg_trace.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/utilities/dbg_trace.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/otp.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/utilities/otp.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/shci.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/shci/shci.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/shci_tl.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/shci_tl_if.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/shci_tl_if.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/stm_list.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/utilities/stm_list.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/stm_queue.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/utilities/stm_queue.c</locationURI>
+ </link>
+ <link>
+ <name>Middlewares/STM32_WPAN/tl_mbox.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Middlewares/ST/STM32_WPAN/interface/patterns/ble_thread/tl/tl_mbox.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/app_entry.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/app_entry.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/gpio_lld.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/gpio_lld.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/hw_uart.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/hw_uart.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/main.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/main.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/stm32_lpm_if.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/stm32_lpm_if.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/stm32wbxx_hal_msp.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/stm32wbxx_hal_msp.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/stm32wbxx_it.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/stm32wbxx_it.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/Core/stm_logging.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/Core/Src/stm_logging.c</locationURI>
+ </link>
+ <link>
+ <name>Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</name>
+ <type>1</type>
+ <locationURI>PARENT-6-PROJECT_LOC/Drivers/BSP/NUCLEO-WB15CC/nucleo_wb15cc.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/STM32_WPAN/App/app_ble_lld.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/STM32_WPAN/App/app_ble_lld.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/STM32_WPAN/App/pressbutton_app.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/STM32_WPAN/App/pressbutton_app.c</locationURI>
+ </link>
+ <link>
+ <name>Application/User/STM32_WPAN/Target/hw_ipcc.c</name>
+ <type>1</type>
+ <locationURI>PARENT-1-PROJECT_LOC/STM32_WPAN/Target/hw_ipcc.c</locationURI>
+ </link>
+ </linkedResources>
+</projectDescription>
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/Startup/startup_stm32wb15ccux.s b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/Startup/startup_stm32wb15ccux.s
new file mode 100644
index 000000000..58cc21a82
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/Startup/startup_stm32wb15ccux.s
@@ -0,0 +1,394 @@
+/**
+ ******************************************************************************
+ * @file startup_stm32wb15xx_cm4.s
+ * @author MCD Application Team
+ * @brief STM32WB15xx devices vector table GCC toolchain.
+ * This module performs:
+ * - Set the initial SP
+ * - Set the initial PC == Reset_Handler,
+ * - Set the vector table entries with the exceptions ISR address
+ * - Branches to main in the C library (which eventually
+ * calls main()).
+ * After Reset the Cortex-M4 processor is in Thread mode,
+ * priority is Privileged, and the Stack is set to Main.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+* This software component is licensed by ST under Apache License, Version 2.0,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/Apache-2.0
+ *
+ ******************************************************************************
+ */
+
+ .syntax unified
+ .cpu cortex-m4
+ .fpu softvfp
+ .thumb
+
+.global g_pfnVectors
+.global Default_Handler
+
+/* start address for the initialization values of the .data section.
+defined in linker script */
+.word _sidata
+/* start address for the .data section. defined in linker script */
+.word _sdata
+/* end address for the .data section. defined in linker script */
+.word _edata
+/* start address for the .bss section. defined in linker script */
+.word _sbss
+/* end address for the .bss section. defined in linker script */
+.word _ebss
+/* start address for the .MB_MEM2 section. defined in linker script */
+.word _sMB_MEM2
+/* end address for the .MB_MEM2 section. defined in linker script */
+.word _eMB_MEM2
+
+/* INIT_BSS macro is used to fill the specified region [start : end] with zeros */
+.macro INIT_BSS start, end
+ ldr r0, =\start
+ ldr r1, =\end
+ movs r3, #0
+ bl LoopFillZerobss
+.endm
+
+/* INIT_DATA macro is used to copy data in the region [start : end] starting from 'src' */
+.macro INIT_DATA start, end, src
+ ldr r0, =\start
+ ldr r1, =\end
+ ldr r2, =\src
+ movs r3, #0
+ bl LoopCopyDataInit
+.endm
+
+.section .text.data_initializers
+CopyDataInit:
+ ldr r4, [r2, r3]
+ str r4, [r0, r3]
+ adds r3, r3, #4
+
+LoopCopyDataInit:
+ adds r4, r0, r3
+ cmp r4, r1
+ bcc CopyDataInit
+ bx lr
+
+FillZerobss:
+ str r3, [r0]
+ adds r0, r0, #4
+
+LoopFillZerobss:
+ cmp r0, r1
+ bcc FillZerobss
+ bx lr
+
+ .section .text.Reset_Handler
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+ ldr r0, =_estack
+ mov sp, r0 /* set stack pointer */
+/* Call the clock system intitialization function.*/
+ bl SystemInit
+
+/* Copy the data segment initializers from flash to SRAM */
+ INIT_DATA _sdata, _edata, _sidata
+
+/* Zero fill the bss segments. */
+ INIT_BSS _sbss, _ebss
+ INIT_BSS _sMB_MEM2, _eMB_MEM2
+
+/* Call static constructors */
+ bl __libc_init_array
+/* Call the application s entry point.*/
+ bl main
+
+LoopForever:
+ b LoopForever
+
+.size Reset_Handler, .-Reset_Handler
+
+/**
+ * @brief This is the code that gets called when the processor receives an
+ * unexpected interrupt. This simply enters an infinite loop, preserving
+ * the system state for examination by a debugger.
+ *
+ * @param None
+ * @retval None
+*/
+ .section .text.Default_Handler,"ax",%progbits
+Default_Handler:
+Infinite_Loop:
+ b Infinite_Loop
+ .size Default_Handler, .-Default_Handler
+/******************************************************************************
+*
+* The minimal vector table for a Cortex-M4. Note that the proper constructs
+* must be placed on this to ensure that it ends up at physical address
+* 0x0000.0000.
+*
+******************************************************************************/
+ .section .isr_vector,"a",%progbits
+ .type g_pfnVectors, %object
+ .size g_pfnVectors, .-g_pfnVectors
+
+
+g_pfnVectors:
+ .word _estack
+ .word Reset_Handler
+ .word NMI_Handler
+ .word HardFault_Handler
+ .word MemManage_Handler
+ .word BusFault_Handler
+ .word UsageFault_Handler
+ .word 0
+ .word 0
+ .word 0
+ .word 0
+ .word SVC_Handler
+ .word DebugMon_Handler
+ .word 0
+ .word PendSV_Handler
+ .word SysTick_Handler
+ .word WWDG_IRQHandler
+ .word PVD_PVM_IRQHandler
+ .word TAMP_STAMP_LSECSS_IRQHandler
+ .word RTC_WKUP_IRQHandler
+ .word FLASH_IRQHandler
+ .word RCC_IRQHandler
+ .word EXTI0_IRQHandler
+ .word EXTI1_IRQHandler
+ .word EXTI2_IRQHandler
+ .word EXTI3_IRQHandler
+ .word EXTI4_IRQHandler
+ .word DMA1_Channel1_IRQHandler
+ .word DMA1_Channel2_IRQHandler
+ .word DMA1_Channel3_IRQHandler
+ .word DMA1_Channel4_IRQHandler
+ .word DMA1_Channel5_IRQHandler
+ .word DMA1_Channel6_IRQHandler
+ .word DMA1_Channel7_IRQHandler
+ .word ADC1_IRQHandler
+ .word 0
+ .word 0
+ .word C2SEV_PWR_C2H_IRQHandler
+ .word COMP_IRQHandler
+ .word EXTI9_5_IRQHandler
+ .word TIM1_BRK_IRQHandler
+ .word TIM1_UP_IRQHandler
+ .word TIM1_TRG_COM_IRQHandler
+ .word TIM1_CC_IRQHandler
+ .word TIM2_IRQHandler
+ .word PKA_IRQHandler
+ .word I2C1_EV_IRQHandler
+ .word I2C1_ER_IRQHandler
+ .word 0
+ .word 0
+ .word SPI1_IRQHandler
+ .word 0
+ .word USART1_IRQHandler
+ .word LPUART1_IRQHandler
+ .word 0
+ .word TSC_IRQHandler
+ .word EXTI15_10_IRQHandler
+ .word RTC_Alarm_IRQHandler
+ .word 0
+ .word PWR_SOTF_BLEACT_RFPHASE_IRQHandler
+ .word IPCC_C1_RX_IRQHandler
+ .word IPCC_C1_TX_IRQHandler
+ .word HSEM_IRQHandler
+ .word LPTIM1_IRQHandler
+ .word LPTIM2_IRQHandler
+ .word 0
+ .word 0
+ .word 0
+ .word AES2_IRQHandler
+ .word RNG_IRQHandler
+ .word FPU_IRQHandler
+ .word 0
+ .word 0
+ .word 0
+ .word 0
+ .word 0
+ .word 0
+ .word 0
+ .word DMAMUX1_OVR_IRQHandler
+
+/*******************************************************************************
+*
+* Provide weak aliases for each Exception handler to the Default_Handler.
+* As they are weak aliases, any function with the same name will override
+* this definition.
+*
+*******************************************************************************/
+ .weak NMI_Handler
+ .thumb_set NMI_Handler,Default_Handler
+
+ .weak HardFault_Handler
+ .thumb_set HardFault_Handler,Default_Handler
+
+ .weak MemManage_Handler
+ .thumb_set MemManage_Handler,Default_Handler
+
+ .weak BusFault_Handler
+ .thumb_set BusFault_Handler,Default_Handler
+
+ .weak UsageFault_Handler
+ .thumb_set UsageFault_Handler,Default_Handler
+
+ .weak SVC_Handler
+ .thumb_set SVC_Handler,Default_Handler
+
+ .weak DebugMon_Handler
+ .thumb_set DebugMon_Handler,Default_Handler
+
+ .weak PendSV_Handler
+ .thumb_set PendSV_Handler,Default_Handler
+
+ .weak SysTick_Handler
+ .thumb_set SysTick_Handler,Default_Handler
+
+ .weak WWDG_IRQHandler
+ .thumb_set WWDG_IRQHandler,Default_Handler
+
+ .weak PVD_PVM_IRQHandler
+ .thumb_set PVD_PVM_IRQHandler,Default_Handler
+
+ .weak TAMP_STAMP_LSECSS_IRQHandler
+ .thumb_set TAMP_STAMP_LSECSS_IRQHandler,Default_Handler
+
+ .weak RTC_WKUP_IRQHandler
+ .thumb_set RTC_WKUP_IRQHandler,Default_Handler
+
+ .weak FLASH_IRQHandler
+ .thumb_set FLASH_IRQHandler,Default_Handler
+
+ .weak RCC_IRQHandler
+ .thumb_set RCC_IRQHandler,Default_Handler
+
+ .weak EXTI0_IRQHandler
+ .thumb_set EXTI0_IRQHandler,Default_Handler
+
+ .weak EXTI1_IRQHandler
+ .thumb_set EXTI1_IRQHandler,Default_Handler
+
+ .weak EXTI2_IRQHandler
+ .thumb_set EXTI2_IRQHandler,Default_Handler
+
+ .weak EXTI3_IRQHandler
+ .thumb_set EXTI3_IRQHandler,Default_Handler
+
+ .weak EXTI4_IRQHandler
+ .thumb_set EXTI4_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel1_IRQHandler
+ .thumb_set DMA1_Channel1_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel2_IRQHandler
+ .thumb_set DMA1_Channel2_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel3_IRQHandler
+ .thumb_set DMA1_Channel3_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel4_IRQHandler
+ .thumb_set DMA1_Channel4_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel5_IRQHandler
+ .thumb_set DMA1_Channel5_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel6_IRQHandler
+ .thumb_set DMA1_Channel6_IRQHandler,Default_Handler
+
+ .weak DMA1_Channel7_IRQHandler
+ .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
+
+ .weak ADC1_IRQHandler
+ .thumb_set ADC1_IRQHandler,Default_Handler
+
+ .weak C2SEV_PWR_C2H_IRQHandler
+ .thumb_set C2SEV_PWR_C2H_IRQHandler,Default_Handler
+
+ .weak COMP_IRQHandler
+ .thumb_set COMP_IRQHandler,Default_Handler
+
+ .weak EXTI9_5_IRQHandler
+ .thumb_set EXTI9_5_IRQHandler,Default_Handler
+
+ .weak TIM1_BRK_IRQHandler
+ .thumb_set TIM1_BRK_IRQHandler,Default_Handler
+
+ .weak TIM1_UP_IRQHandler
+ .thumb_set TIM1_UP_IRQHandler,Default_Handler
+
+ .weak TIM1_TRG_COM_IRQHandler
+ .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler
+
+ .weak TIM1_CC_IRQHandler
+ .thumb_set TIM1_CC_IRQHandler,Default_Handler
+
+ .weak TIM2_IRQHandler
+ .thumb_set TIM2_IRQHandler,Default_Handler
+
+ .weak PKA_IRQHandler
+ .thumb_set PKA_IRQHandler,Default_Handler
+
+ .weak I2C1_EV_IRQHandler
+ .thumb_set I2C1_EV_IRQHandler,Default_Handler
+
+ .weak I2C1_ER_IRQHandler
+ .thumb_set I2C1_ER_IRQHandler,Default_Handler
+
+ .weak SPI1_IRQHandler
+ .thumb_set SPI1_IRQHandler,Default_Handler
+
+ .weak USART1_IRQHandler
+ .thumb_set USART1_IRQHandler,Default_Handler
+
+ .weak LPUART1_IRQHandler
+ .thumb_set LPUART1_IRQHandler,Default_Handler
+
+ .weak TSC_IRQHandler
+ .thumb_set TSC_IRQHandler,Default_Handler
+
+ .weak EXTI15_10_IRQHandler
+ .thumb_set EXTI15_10_IRQHandler,Default_Handler
+
+ .weak RTC_Alarm_IRQHandler
+ .thumb_set RTC_Alarm_IRQHandler,Default_Handler
+
+ .weak PWR_SOTF_BLEACT_RFPHASE_IRQHandler
+ .thumb_set PWR_SOTF_BLEACT_RFPHASE_IRQHandler,Default_Handler
+
+ .weak IPCC_C1_RX_IRQHandler
+ .thumb_set IPCC_C1_RX_IRQHandler,Default_Handler
+
+ .weak IPCC_C1_TX_IRQHandler
+ .thumb_set IPCC_C1_TX_IRQHandler,Default_Handler
+
+ .weak HSEM_IRQHandler
+ .thumb_set HSEM_IRQHandler,Default_Handler
+
+ .weak LPTIM1_IRQHandler
+ .thumb_set LPTIM1_IRQHandler,Default_Handler
+
+ .weak LPTIM2_IRQHandler
+ .thumb_set LPTIM2_IRQHandler,Default_Handler
+
+ .weak AES2_IRQHandler
+ .thumb_set AES2_IRQHandler,Default_Handler
+
+ .weak RNG_IRQHandler
+ .thumb_set RNG_IRQHandler,Default_Handler
+
+ .weak FPU_IRQHandler
+ .thumb_set FPU_IRQHandler,Default_Handler
+
+ .weak DMAMUX1_OVR_IRQHandler
+ .thumb_set DMAMUX1_OVR_IRQHandler,Default_Handler
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/syscalls.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/syscalls.c
new file mode 100644
index 000000000..4ec95844d
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/syscalls.c
@@ -0,0 +1,159 @@
+/**
+ ******************************************************************************
+ * @file syscalls.c
+ * @author Auto-generated by STM32CubeIDE
+ * @brief STM32CubeIDE Minimal System calls file
+ *
+ * For more information about which c-functions
+ * need which of these lowlevel functions
+ * please consult the Newlib libc-manual
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Includes */
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/times.h>
+
+
+/* Variables */
+//#undef errno
+extern int errno;
+extern int __io_putchar(int ch) __attribute__((weak));
+extern int __io_getchar(void) __attribute__((weak));
+
+register char * stack_ptr asm("sp");
+
+char *__env[1] = { 0 };
+char **environ = __env;
+
+
+/* Functions */
+void initialise_monitor_handles()
+{
+}
+
+int _getpid(void)
+{
+ return 1;
+}
+
+int _kill(int pid, int sig)
+{
+ errno = EINVAL;
+ return -1;
+}
+
+void _exit (int status)
+{
+ _kill(status, -1);
+ while (1) {} /* Make sure we hang here */
+}
+
+__attribute__((weak)) int _read(int file, char *ptr, int len)
+{
+ int DataIdx;
+
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ *ptr++ = __io_getchar();
+ }
+
+return len;
+}
+
+__attribute__((weak)) int _write(int file, char *ptr, int len)
+{
+ int DataIdx;
+
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ __io_putchar(*ptr++);
+ }
+ return len;
+}
+
+int _close(int file)
+{
+ return -1;
+}
+
+
+int _fstat(int file, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return 0;
+}
+
+int _isatty(int file)
+{
+ return 1;
+}
+
+int _lseek(int file, int ptr, int dir)
+{
+ return 0;
+}
+
+int _open(char *path, int flags, ...)
+{
+ /* Pretend like we always fail */
+ return -1;
+}
+
+int _wait(int *status)
+{
+ errno = ECHILD;
+ return -1;
+}
+
+int _unlink(char *name)
+{
+ errno = ENOENT;
+ return -1;
+}
+
+int _times(struct tms *buf)
+{
+ return -1;
+}
+
+int _stat(char *file, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return 0;
+}
+
+int _link(char *old, char *new)
+{
+ errno = EMLINK;
+ return -1;
+}
+
+int _fork(void)
+{
+ errno = EAGAIN;
+ return -1;
+}
+
+int _execve(char *name, char **argv, char **env)
+{
+ errno = ENOMEM;
+ return -1;
+}
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/sysmem.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/sysmem.c
new file mode 100644
index 000000000..d7cc52cd4
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/Application/User/Core/sysmem.c
@@ -0,0 +1,80 @@
+/**
+ ******************************************************************************
+ * @file sysmem.c
+ * @author Generated by STM32CubeIDE
+ * @brief STM32CubeIDE System Memory calls file
+ *
+ * For more information about which C functions
+ * need which of these lowlevel functions
+ * please consult the newlib libc manual
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/* Includes */
+#include <errno.h>
+#include <stdint.h>
+
+/**
+ * Pointer to the current high watermark of the heap usage
+ */
+static uint8_t *__sbrk_heap_end = NULL;
+
+/**
+ * @brief _sbrk() allocates memory to the newlib heap and is used by malloc
+ * and others from the C library
+ *
+ * @verbatim
+ * ############################################################################
+ * # .data # .bss # newlib heap # MSP stack #
+ * # # # # Reserved by _Min_Stack_Size #
+ * ############################################################################
+ * ^-- RAM start ^-- _end _estack, RAM end --^
+ * @endverbatim
+ *
+ * This implementation starts allocating at the '_end' linker symbol
+ * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack
+ * The implementation considers '_estack' linker symbol to be RAM end
+ * NOTE: If the MSP stack, at any point during execution, grows larger than the
+ * reserved size, please increase the '_Min_Stack_Size'.
+ *
+ * @param incr Memory size
+ * @return Pointer to allocated memory
+ */
+void *_sbrk(ptrdiff_t incr)
+{
+ extern uint8_t _end; /* Symbol defined in the linker script */
+ extern uint8_t _estack; /* Symbol defined in the linker script */
+ extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
+ const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
+ const uint8_t *max_heap = (uint8_t *)stack_limit;
+ uint8_t *prev_heap_end;
+
+ /* Initialize heap end at first call */
+ if (NULL == __sbrk_heap_end)
+ {
+ __sbrk_heap_end = &_end;
+ }
+
+ /* Protect heap from growing into the reserved MSP stack */
+ if (__sbrk_heap_end + incr > max_heap)
+ {
+ errno = ENOMEM;
+ return (void *)-1;
+ }
+
+ prev_heap_end = __sbrk_heap_end;
+ __sbrk_heap_end += incr;
+
+ return (void *)prev_heap_end;
+}
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/STM32WB15CCUX_FLASH.ld b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/STM32WB15CCUX_FLASH.ld
new file mode 100644
index 000000000..8f86b87c9
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32CubeIDE/STM32WB15CCUX_FLASH.ld
@@ -0,0 +1,179 @@
+/*
+******************************************************************************
+**
+** File : LinkerScript.ld
+**
+** Author : STM32CubeIDE
+**
+** Abstract : Linker script for STM32WB15xC Device
+** 320Kbytes FLASH
+** 48Kbytes RAM
+**
+** Set heap size, stack size and stack location according
+** to application requirements.
+**
+** Set memory bank area and size if external memory is used.
+**
+** Target : STMicroelectronics STM32
+**
+** Distribution: The file is distributed as is without any warranty
+** of any kind.
+**
+*****************************************************************************
+** @attention
+**
+** <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
+** All rights reserved.</center></h2>
+**
+** This software component is licensed by ST under BSD 3-Clause license,
+** the "License"; You may not use this file except in compliance with the
+** License. You may obtain a copy of the License at:
+** opensource.org/licenses/BSD-3-Clause
+**
+*****************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = 0x20003000; /* end of RAM */
+/* Generate a link error if heap and stack don't fit into RAM */
+_Min_Heap_Size = 0x200 ; /* required amount of heap */
+_Min_Stack_Size = 0x400 ; /* required amount of stack */
+
+/* Specify the memory areas */
+MEMORY
+{
+FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 110K
+RAM1 (xrw) : ORIGIN = 0x20000008, LENGTH = 0x2FF8
+RAM_SHARED (xrw) : ORIGIN = 0x20030000, LENGTH = 10K
+}
+
+/* Define output sections */
+SECTIONS
+{
+ /* The startup code goes first into FLASH */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >FLASH
+
+ /* The program code and other data goes into FLASH */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >FLASH
+
+ /* Constant data goes into FLASH */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
+ .ARM : {
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ } >FLASH
+
+ .preinit_array :
+ {
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ } >FLASH
+ .init_array :
+ {
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ } >FLASH
+ .fini_array :
+ {
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ } >FLASH
+
+ /* used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections goes into RAM, load LMA copy after code */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+ *(.RamFunc) /* .RamFunc sections */
+ *(.RamFunc*) /* .RamFunc* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+ } >RAM1 AT> FLASH
+
+
+ /* Uninitialized data section */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss secion */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM1
+
+ /* User_heap_stack section, used to check that there is enough RAM left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM1
+
+
+
+ /* Remove information from the standard libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+ MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED
+ MB_MEM1 (NOLOAD) : { *(MB_MEM1) } >RAM_SHARED
+ MB_MEM2 (NOLOAD) : { _sMB_MEM2 = . ; *(MB_MEM2) ; _eMB_MEM2 = . ; } >RAM_SHARED
+}
+
+
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.c
index 2f6812ebb..ea1573ea1 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.c
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.c
@@ -1,7 +1,7 @@
/**
******************************************************************************
* File Name : app_ble_lld.c
- * Description : PRESSBUTTON BLE LLD Application.
+ * Description : application utilities.
******************************************************************************
* @attention
*
@@ -16,8 +16,15 @@
******************************************************************************
*/
+/**
+ * This file provides low level utilities for application:
+ * - IPCC for communication with radio MCU
+ * - UART management
+ * - error handling
+ */
+
/* Includes ------------------------------------------------------------------*/
-#include <stdio.h>
+#include <stdbool.h>
#include "app_common.h"
#include "utilities_common.h"
#include "app_entry.h"
@@ -28,9 +35,9 @@
#include "stm32_lpm.h"
#include "stm32_seq.h"
#include "gpio_lld.h"
+#include "stm_queue.h"
#include "ble_lld.h"
#include "app_ble_lld.h"
-#include "ring_buffer.h"
/* Private includes ----------------------------------------------------------*/
@@ -57,16 +64,33 @@ typedef enum
/* Private function prototypes -----------------------------------------------*/
static void uartTxSendChunk(void);
+static void uartRxCpltCallback(void);
+static void m0CmdProcess(void);
/* Private variables ---------------------------------------------------------*/
-BUF_ALLOC(uartTxBufMem, TX_BUFFER_SIZE);
-static Buffer *uartTxBuf = (Buffer *)&uartTxBufMem;
+static queue_t uartTxBuf;
+static uint8_t uartTxBufData[TX_BUFFER_SIZE];
+
static bool txBusy = false;
+static char uartRxBuf;
+static void(*uartRxUserCb)(char);
+
+// IPCC configuration
PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static TL_BLE_LLD_Config_t BleLldConfigBuffer;
+
+// Shared memory used by IPCC to send/receive messages to/from M0
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t BleLldM0CmdPacket;
PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static TL_CmdPacket_t BleLldCmdRspPacket;
+/* Shared memory used to send/receive data and parameters to/from M0 because
+ IPCC messages have a limited size */
+PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static msg_BLE_LLD_t bleparam_BLE_LLD_Packet;
+
+// Shared buffers for packet transmission and reception, separate buffers are needed because radio
+PLACE_IN_SECTION("MB_MEM2") static ipBLE_lld_txrxdata_Type txBuffer;
+PLACE_IN_SECTION("MB_MEM2") static ipBLE_lld_txrxdata_Type rxBuffer;
+
/* Functions Definition ------------------------------------------------------*/
@@ -82,35 +106,38 @@ void APP_BLE_LLD_Init(void)
BleLldConfigBuffer.p_BleLldM0CmdBuffer = (uint8_t*)&BleLldM0CmdPacket;
TL_BLE_LLD_Init(&BleLldConfigBuffer);
- /* Configure UART for receiving CLI command from PC and sending CLI response or notifications to PC */
- APP_BLE_LLD_Init_UART_CLI();
+ APP_BLE_LLD_Init_UART();
- /* Send LLD tests CLI start information to CLI UART */
- logUart("================================");
-#ifdef STM32WB35xx
- logUart("Little DORY RF BLE LLD");
-#else
- logUart("DORY RF BLE LLD");
-#endif
- logUart("================================");
+ /* Send LLD tests start information to UART */
+ uartWrite("");
+ uartWrite("================================");
+ uartWrite("RF BLE LLD");
+ uartWrite("================================");
#if (CFG_DEBUGGER_SUPPORTED == 0U)
- logUart("Debugger de-activated");
+ uartWrite("Debugger de-activated");
#endif
#if (( CFG_DEBUG_TRACE_FULL == 0 ) && ( CFG_DEBUG_TRACE_LIGHT == 0 ))
- logUart("Trace is de-activated");
+ uartWrite("Trace is de-activated");
#endif
- PRINT_MESG_DBG("Test appli initialized on M4, waiting for M0 initialization");
+ APP_DBG("Test appli initialized on M4, waiting for M0 initialization");
- /* Send CLI start cmd to M0 (with device and revision ID as parameters */
- memcpy(&param[0], &devId, 4 );
- memcpy(&param[4], &revId, 4 );
- LldTestsInitStatus = SHCI_C2_BLE_LLD_Init(8, param);
+ /* Send start cmd to M0 (with device and revision ID as parameters */
+ memcpy(&param[0], &devId, sizeof(devId));
+ memcpy(&param[4], &revId, sizeof(revId));
+ LldTestsInitStatus = SHCI_C2_BLE_LLD_Init(sizeof(param), param);
if(LldTestsInitStatus != SHCI_Success){
- PRINT_MESG_DBG("!! ERROR during M0 init !!");
+ APP_DBG("!! ERROR during M0 init !!");
}else{
- PRINT_MESG_DBG("M0 initialized");
+ APP_DBG("M0 initialized");
}
+
+ UTIL_SEQ_RegTask( 1<<CFG_TASK_CMD_FROM_M0_TO_M4, UTIL_SEQ_RFU, m0CmdProcess);
+
+ BLE_LLD_PRX_Init(&bleparam_BLE_LLD_Packet.params,
+ &txBuffer,
+ &rxBuffer,
+ APP_BLE_LLD_SendCmdM0);
}
/**
@@ -130,7 +157,7 @@ void APP_BLE_LLD_Error(uint32_t ErrId, uint32_t ErrCode)
case ERR_BLE_LLD_CHECK_WIRELESS: msg = "ERROR: ERR_BLE_LLD_CHECK_WIRELESS "; break;
default: msg = "ERROR Unknown "; break;
}
- PRINT_MESG_DBG("**** Fatal error = %s (Err = %d)", msg, ErrCode);
+ APP_DBG("**** Fatal error = %s (Err = %d)", msg, ErrCode);
while(true)
{
BSP_LED_Toggle(LED1);
@@ -152,35 +179,27 @@ void CheckWirelessFirmwareInfo(void)
{
WirelessFwInfo_t wireless_info_instance;
WirelessFwInfo_t* p_wireless_info = &wireless_info_instance;
- if (SHCI_GetWirelessFwInfo(p_wireless_info) != SHCI_Success)
+ if (SHCI_GetWirelessFwInfo(p_wireless_info) != SHCI_Success)
{
APP_BLE_LLD_Error(ERR_BLE_LLD_CHECK_WIRELESS, 0);
}
else
{
- PRINT_MESG_DBG("**********************************************************");
- PRINT_MESG_DBG("Loaded M0 TEST FW info:");
+ APP_DBG("**********************************************************");
+ APP_DBG("Loaded M0 TEST FW info:");
switch(p_wireless_info->StackType)
{
- case INFO_STACK_TYPE_802154_LLD_TESTS :
- PRINT_MESG_DBG(" M0 FW Type: 802.15.4 and radio LLDs tests");
- break;
-
- case INFO_STACK_TYPE_802154_PHY_VALID :
- PRINT_MESG_DBG(" M0 FW Type: 802.15.4 and radio PHY validation");
- break;
-
case INFO_STACK_TYPE_BLE_PHY_VALID :
- PRINT_MESG_DBG(" M0 FW Type: BLE and radio PHY validation");
+ APP_DBG(" M0 FW Type: BLE and radio PHY validation");
break;
-
+
default :
+ APP_DBG(" ERROR: incompatible firmware");
APP_BLE_LLD_Error(ERR_BLE_LLD_CHECK_WIRELESS, 0);
- PRINT_MESG_DBG(" M0 FW Type: Unknown !!");
break;
}
- PRINT_MESG_DBG(" M0 FW VERSION: v%d.%d.%d", p_wireless_info->VersionMajor, p_wireless_info->VersionMinor, p_wireless_info->VersionSub);
- PRINT_MESG_DBG("**********************************************************");
+ APP_DBG(" M0 FW VERSION: v%d.%d.%d", p_wireless_info->VersionMajor, p_wireless_info->VersionMinor, p_wireless_info->VersionSub);
+ APP_DBG("**********************************************************");
}
}
@@ -196,32 +215,58 @@ void CheckWirelessFirmwareInfo(void)
*
*************************************************************/
/**
- * @brief Perform initialization of CLI UART interface.
+ * @brief Perform initialization of UART.
* @param None
* @retval None
*/
-void APP_BLE_LLD_Init_UART_CLI(void)
+void APP_BLE_LLD_Init_UART(void)
{
-#if (CFG_HW_USART1_ENABLED == 1)
- MX_USART1_UART_Init();
+#ifdef CFG_UART
+ MX_UART_Init(CFG_UART);
#endif
- bufInit(uartTxBuf, TX_BUFFER_SIZE);
+
+ CircularQueue_Init(&uartTxBuf,
+ uartTxBufData,
+ sizeof(uartTxBufData),
+ sizeof(char),
+ CIRCULAR_QUEUE_NO_FLAG);
txBusy = false;
}
/**
- * @brief Perform de-initialization of CLI UART interface.
+ * @brief Perform de-initialization of UART.
* @param None
* @retval None
*/
-void APP_BLE_LLD_DeInit_UART_CLI(void)
+void APP_BLE_LLD_DeInit_UART(void)
{
-#if (CFG_HW_USART1_ENABLED == 1)
- MX_USART1_UART_DeInit();
+#ifdef CFG_UART
+ MX_UART_Deinit(CFG_UART);
#endif
}
-void logUart(const char *format, ...)
+static void uartRxStart(void)
+{
+ if (HW_UART_Receive_IT(CFG_UART, (uint8_t *)&uartRxBuf, 1, uartRxCpltCallback) != hw_uart_ok){
+ APP_DBG("ERROR returned by HW_UART_Receive_IT()");
+ }
+}
+
+void APP_BLE_LLD_uartRxStart(void(*callback)(char))
+{
+ uartRxUserCb = callback;
+ uartRxStart();
+}
+
+static void uartRxCpltCallback(void)
+{
+ // No need to buffer uartRxBuf since the callback is called by value
+ uartRxUserCb(uartRxBuf);
+ // Since UART is in full duplex, receive can be always active without blocking send
+ uartRxStart();
+}
+
+void uartWrite(const char *format, ...)
{
char out[UART_BUFFER_SIZE];
int nbChar;
@@ -237,13 +282,16 @@ void logUart(const char *format, ...)
}else{
strcat(out, UART_LINE_END);
}
- logUartRaw(out);
+ uartWriteRaw(out);
}
-void logUartRaw(const char *str)
+void uartWriteRaw(const char *str)
{
CRITICAL_BEGIN();
- bufPutString(uartTxBuf, str);
+ while (*str != '\0'){
+ CircularQueue_Add(&uartTxBuf, (uint8_t *)str, 0, 1);
+ str++;
+ }
if (! txBusy){
uartTxSendChunk();
}
@@ -255,89 +303,86 @@ void logUartRaw(const char *str)
// loop on itself via the UART callback
static void uartTxSendChunk(void){
static char hwBuf[UART_TX_CHUNK_SIZE];
- uint32_t count;
- count = bufGetMultiChar(uartTxBuf, hwBuf, UART_TX_CHUNK_SIZE);
+ char *charPtr;
+ uint32_t count = 0;
+
+ while ((charPtr = (char *)CircularQueue_Remove(&uartTxBuf, NULL)) != NULL){
+ hwBuf[count] = *charPtr;
+ count++;
+ if (count >= UART_TX_CHUNK_SIZE){
+ break;
+ }
+ }
if (count != 0){
txBusy = true;
- if (HW_UART_Transmit_IT(CFG_CLI_UART, (uint8_t *)hwBuf, count, uartTxSendChunk) != hw_uart_ok){
- PRINT_MESG_DBG("!! HAL_UART_Transmit_IT error on M4");
+ if (HW_UART_Transmit_IT(CFG_UART, (uint8_t *)hwBuf, count, uartTxSendChunk) != hw_uart_ok){
+ APP_DBG("ERROR returned by HW_UART_Transmit_IT()");
}
}else{
txBusy = false;
}
}
-/**
- * @brief This function is called when notification on TL Channel from M0+ is received.
- *
- * @param Notbuffer : a pointer to TL_CmdPacket_t
- * @return None
- */
-void TL_BLE_LLD_ReceiveRsp( TL_CmdPacket_t * Notbuffer )
+static void m0CmdProcess(void)
{
- uint8_t l_size = Notbuffer->cmdserial.cmd.plen;
- char *sourceBuf = (char *)Notbuffer->cmdserial.cmd.payload;
-
- if (l_size > 0)
- {
- if (strcmp(sourceBuf, "Resp_End") == 0)
- {
- /* This is an answer to indicate that command has been completed */
- UTIL_SEQ_SetEvt(1U << CFG_EVT_RECEIVE_RSPACKEVT);
- }
- else
- {
- /* This is just a trace from M0, write to UART */
- logUartRaw(sourceBuf);
- }
- }
- else
- {
- PRINT_MESG_DBG("!! Empty M0 CLI response received by M4 !!");
- }
- TL_BLE_LLD_SendRspAck();
+ BLE_LLD_PRX_EventProcessTask();
}
/**
- * @brief This function is called when notification on TL Channel from M0+ is received.
+ * @brief Processes an event from radio CPU
*
* @param cmdBuffer : a pointer to TL_CmdPacket_t
* @return None
*/
void TL_BLE_LLD_ReceiveM0Cmd( TL_CmdPacket_t * cmdBuffer )
{
- uint8_t bufferSize = cmdBuffer->cmdserial.cmd.plen;
- char * bufferAddr = (char *)cmdBuffer->cmdserial.cmd.payload;
-
- if (bufferSize > 0) {
- if (BLE_LLD_PRX_ReplyInterDispatch(bufferAddr)) {
- UTIL_SEQ_SetTask(1U << CFG_TASK_CMD_FROM_M0_TO_M4, CFG_SCH_PRIO_0);
- }else{
- PRINT_MESG_DBG((char *)"!! Unknown M0 command received by M4 !!");
- }
- }else{
- PRINT_MESG_DBG((char *)"!! Empty M0 command received by M4 !!");
- }
+ BLE_LLD_PRX_EventProcessInter((radioEventType)cmdBuffer->cmdserial.cmd.cmdcode);
+ UTIL_SEQ_SetTask(1U << CFG_TASK_CMD_FROM_M0_TO_M4, CFG_SCH_PRIO_0);
TL_BLE_LLD_SendM0CmdAck();
}
/**
- * @brief This function is called to Send Command to M0
+ * @brief Sends a command to radio CPU
+ *
+ * Waits for reply from radio CPU before returning (synchronous calls).
*
* @param[in] command BLE command already packed (by LLD)
*/
-void APP_BLE_LLD_SendCmdM0(void *command)
+uint8_t APP_BLE_LLD_SendCmdM0(BLE_LLD_Code_t bleCmd)
{
- bleCmdIndirect_t *cmdIndirect = (bleCmdIndirect_t *)BleLldCmdRspPacket.cmdserial.cmd.payload;
- cmdIndirect->command = command;
- cmdIndirect->length = 5;
-
- BleLldCmdRspPacket.cmdserial.cmd.plen = sizeof(bleCmdIndirect_t);
- BleLldCmdRspPacket.cmdserial.cmd.cmdcode = 0x0;
-
+ BleLldCmdRspPacket.cmdserial.cmd.cmdcode = bleCmd;
+ payload_BLE_LLD_t *payload = (payload_BLE_LLD_t *)&BleLldCmdRspPacket.cmdserial.cmd.payload;
+ payload->msg = &bleparam_BLE_LLD_Packet;
UTIL_SEQ_ClrEvt(1U << CFG_EVT_RECEIVE_RSPACKEVT);
TL_BLE_LLD_SendCmd();
UTIL_SEQ_WaitEvt(1U << CFG_EVT_RECEIVE_RSPACKEVT);
+
+ return bleparam_BLE_LLD_Packet.returnValue;
+}
+
+/**
+ * @brief Processes a reply (to a command) from radio CPU
+ *
+ * Unlocks task waiting in APP_BLE_LLD_SendCmdM0(), this is used to make LLD
+ * API calls synchronous.
+ *
+ * @param Notbuffer : a pointer to TL_CmdPacket_t
+ * @return None
+ */
+void TL_BLE_LLD_ReceiveRsp( TL_CmdPacket_t * Notbuffer )
+{
+ switch (Notbuffer->cmdserial.cmd.cmdcode){
+ case BLE_LLD_RSP_END:
+ UTIL_SEQ_SetEvt(1U << CFG_EVT_RECEIVE_RSPACKEVT);
+ break;
+ default:
+ APP_DBG("WARNING: unknown response received %d", Notbuffer->cmdserial.cmd.cmdcode);
+ }
+
+ /* This is just a trace from M0, write to UART */
+ //uartWriteRaw(sourceBuf);
+
+ TL_BLE_LLD_SendRspAck();
}
/* USER CODE END FD_WRAP_FUNCTIONS */
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.h
index 3a9aa1a8a..3bd87e32c 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.h
@@ -24,19 +24,12 @@ extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
-#include "ble_lld.h"
+#include "ble_lld_transport.h"
/* Private includes ----------------------------------------------------------*/
/* Exported types ------------------------------------------------------------*/
-/* Layer of indirection for command to M0 */
-typedef PACKED_STRUCT
-{
- void *command;
- uint32_t length;
-} bleCmdIndirect_t;
-
/* Exported constants --------------------------------------------------------*/
/* External variables --------------------------------------------------------*/
@@ -44,15 +37,17 @@ typedef PACKED_STRUCT
/* Exported macros ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
-void APP_BLE_LLD_Init( void );
+void APP_BLE_LLD_Init(void);
void APP_BLE_LLD_Error(uint32_t ErrId, uint32_t ErrCode);
-void APP_BLE_LLD_Init_UART_CLI(void);
-void APP_BLE_LLD_DeInit_UART_CLI(void);
+void APP_BLE_LLD_Init_UART(void);
+void APP_BLE_LLD_DeInit_UART(void);
+
+void APP_BLE_LLD_uartRxStart(void(*cb)(char));
void CheckWirelessFirmwareInfo(void);
-void logUart(const char *format, ...);
-void logUartRaw(const char *str);
-void APP_BLE_LLD_SendCmdM0(void *command);
+void uartWrite(const char *format, ...);
+void uartWriteRaw(const char *str);
+uint8_t APP_BLE_LLD_SendCmdM0(BLE_LLD_Code_t bleCmd);
/**
* @brief Active polling for a given delay
@@ -71,12 +66,6 @@ void us_delay_32m(uint32_t microsec);
#endif
-
-/* USER CODE BEGIN FD_WRAP_FUNCTIONS */
-void Appli_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
-void Appli_TIM_IC_CaptureCallback(void);
-/* USER CODE END FD_WRAP_FUNCTIONS */
-
#endif /* APP_BLE_LLD_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.c
deleted file mode 100644
index 271328153..000000000
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.c
+++ /dev/null
@@ -1,558 +0,0 @@
-/**
- ******************************************************************************
- * File Name : ble_lld.c
- * Description : BLE LLD Application.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "app_common.h"
-#include "ble_lld.h"
-#include "ble_lld_private.h"
-
-/* Private includes ----------------------------------------------------------*/
-
-/* Private typedef -----------------------------------------------------------*/
-
-/* Private defines -----------------------------------------------------------*/
-
-/* Private macros ------------------------------------------------------------*/
-
-/* Private function prototypes -----------------------------------------------*/
-static void unpackRx(param_BLE_LLD_m0Reply_t *reply);
-static uint8_t sendCommand(BLE_LLD_Code_t bleCmd , param_BLE_LLD_t *bleParams);
-
-/* Private variables ---------------------------------------------------------*/
-
-/** When sending command to M0, store pointer to action packet for later use
-when receiving reply from M0 */
-static ActionPacket *actionPackets[ACTION_PACKET_NB];
-
-/** This variable is not a full fledged action packet, its purpose is to allow HAL
-functions to use the same code as LLD functions for data comming back from M0.
-Hence, only fields used for reply data are ever used. */
-
-/** Memory used to send/receive data and parameters to/from M0 */
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static param_BLE_LLD_t bleparam_BLE_LLD_Packet;
-PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static bleCmd_t command;
-
-/** Configuration for data routines multi */
-static struct {
- uint32_t packetNumber; // NB of Successif PACKET Send or Receive
- uint8_t packetStopRx; // Stop after RX
-} dataRoutineParams = {1, 1};
-
-/** Stores command received in interruption for later processing in a task */
-static cmdFromM0_t m0Cmd;
-
-/** Callback to send commands to M0 */
-static void (*CB_sendCmdM0)(void *) = NULL;
-
-/* Functions Definition ------------------------------------------------------*/
-
-/**
- * @brief Initializes BLE LLD proxy.
- *
- * This function must be called before any BLE LLD function.
- *
- * @param[in] callbackSendCmdM0 Function to send commands to M0
- */
-void BLE_LLD_PRX_Init(void (*callbackSendCmdM0)(void *))
-{
- CB_sendCmdM0 = callbackSendCmdM0;
-}
-
-/**
- * @brief Sets configuration for data routines multi
- *
- * @param[in] PacketNumber Number of Successif PACKET using LL Send or Receive
- * @param[in] PacketStop Stop after RX
- */
-void BLE_LLD_PRX_SetdataRoutineMultiOptions(uint32_t PacketNumber, uint8_t PacketStop)
-{
- dataRoutineParams.packetNumber = PacketNumber;
- dataRoutineParams.packetStopRx = PacketStop;
-}
-
-
-/* ------------------------------- LL LEVEL -----------------------------------*/
-/**
- * @brief Initializes the BLE Radio in LL mode.
- *
- * Whitening improves receiver lock, disabling it is only intended for test mode.
- * When whitening is disabled, data payload is limited to 45 bytes (including header).
- *
- * @param[in] hs_startup_time Startup time (system time unit)
- * @param[in] low_speed_osc Source for the 32 kHz slow speed clock:
- * 1: internal RO
- * 0: external crystal
- * @param[in] hot_table Config table of the Radio and SPI
- * @param[in] whitening ENABLE or DISABLE whitening for transmission and reception
- */
-void BLE_LLD_Init(uint16_t hs_startup_time, uint8_t low_speed_osc, uint32_t* hot_table, FunctionalState whitening)
-{
- param_BLE_LLD_init_t *params = (param_BLE_LLD_init_t *)&bleparam_BLE_LLD_Packet;
- params->startupTime = (uint32_t)(hs_startup_time);
- params->lowSpeedOsc = low_speed_osc;
- params->whitening = (uint8_t)whitening;
- sendCommand(BLE_LLD_INIT_CMDCODE, &bleparam_BLE_LLD_Packet);
- memcpy((uint8_t*)hot_table, params->txrxBuffer.txBuffer, BLE_HOT_ANA_CONFIG_TABLE_LENGTH);
-}
-
-/**
- * @brief Checks if the radio is busy.
- *
- * If radio is busy, the time argument will be filled with WakeupTimer value.
- * User can use this value (in comparison with current time) to check that how
- * long it is far to force the device to sleep or not.
- *
- * @param[out] time WakeupTimer value
- *
- * @retval BLUE_IDLE_0 Radio is not busy
- * @retval BLUE_BUSY_NOWAKEUP_T2 Radio is busy, but there is no wakeup timer on the schedule but timer2 is
- * @retval BLUE_BUSY_WAKEUP Radio is busy and wakeup timer is on the schedule
- * @retval BLUE_BUSY_TONE. Radio is in Tone
- * @retval BLUE_TONE_DESTROY. Radio Tone has destroyed BLE: need an Init
- */
-uint8_t BLE_LLD_GetStatus(uint32_t *time)
-{
- uint8_t return_value;
- param_BLE_LLD_status_t *params = (param_BLE_LLD_status_t *)&bleparam_BLE_LLD_Packet;
- params->time = NULL;
- return_value=sendCommand(BLE_LLD_GETSTATUS_CMDCODE, &bleparam_BLE_LLD_Packet);
- *time = params->time;
- return(return_value);
-}
-
-/**
- * @brief Sets the 40 bits receive and transmit packet count, used in encryption.
- *
- * Both set the 39-bit count + 1 bit MSB as defined in the Bluetooth Low Energy specifications
- * for encryption nonce calculation.
- *
- * @param [in] StateMachineNo State machine number in multistate (between 0 and 7)
- * @param [in] count_tx 40-bit transmit packet count
- * @param [in] count_rcv 40-bit receive packet count
- */
-void BLE_LLD_SetEncryptionCount(uint8_t StateMachineNo, uint8_t (*count_tx)[5], uint8_t (*count_rcv)[5])
-{
- param_BLE_LLD_cryptCount_t *params = (param_BLE_LLD_cryptCount_t *)&bleparam_BLE_LLD_Packet;
- params->stateMachineNo = StateMachineNo;
- memcpy(params->countTx, count_tx, sizeof(params->countTx));
- memcpy(params->countRcv, count_rcv, sizeof(params->countRcv));
- sendCommand(BLE_LLD_SETENCRYPTIONCOUNT_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Set the 8-byte encryption initialization vector and the 16-byte encryption key.
- *
- * @param[in] StateMachineNo State machine number in multistate (between 0 and 7)
- * @param[in] enc_iv 8-byte encryption initialization vector
- * @param[in] enc_key 16-byte encryption key
- */
-void BLE_LLD_SetEncryptionAttributes(uint8_t StateMachineNo, uint8_t (*enc_iv)[8], uint8_t (*enc_key)[16])
-{
- param_BLE_LLD_cryptAttr_t *params = (param_BLE_LLD_cryptAttr_t *)&bleparam_BLE_LLD_Packet;
- params->stateMachineNo = StateMachineNo;
- memcpy(params->encIv, enc_iv, sizeof(params->encIv));
- memcpy(params->encKey, enc_key, sizeof(params->encKey));
- sendCommand(BLE_LLD_SETENCRYPTIONATTRIBUTES_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Enables or disables encryption.
- *
- * There is only one bit in hardware for both Tx and Rx, so encryption is
- * enabled for both if either of the bits is set.
- *
- * Another point is that, when encryption is enabled the hardware will add
- * 4 bytes at the end of the packet as MAC (Message Authentication Code).
- * So, the user needs to add 4 to the length of packet when encryption is ON.
- *
- * @param[in] StateMachineNo State Number in multistate (between 0 and 7)
- * @param[in] EncryptFlagTx Encryption Flag for TX:
- * 0: Encryption is turned off
- * 1: encryption is turned on
- * @param[in] EncryptFlagRcv Encryption Flag for RX:
- * 0: Encryption is turned off
- * 1: encryption is turned on
- */
-void BLE_LLD_SetEncryptFlags(uint8_t StateMachineNo, FunctionalState EncryptFlagTx, FunctionalState EncryptFlagRcv)
-{
- param_BLE_LLD_cryptFlags_t *params = (param_BLE_LLD_cryptFlags_t *)&bleparam_BLE_LLD_Packet;
- params->StateMachineNo=StateMachineNo;
- params->encFlagTx=(uint8_t)EncryptFlagTx;
- params->encFlagRx=(uint8_t)EncryptFlagRcv;
- sendCommand(BLE_LLD_SETENCRYPTFLAGS_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Encrypts data using AES
- *
- * @param[in] Key Encryption key (128 bits)
- * @param[in] plainData Data to encrypt (128 bits)
- * @param[out] cypherData Encrypted data (128 bits)
- */
-void BLE_LLD_EncryptPlainData(uint8_t (*Key)[16], uint8_t (*plainData)[16], uint8_t (*cypherData)[16])
-{
- param_BLE_LLD_crypt_t *params = (param_BLE_LLD_crypt_t *)&bleparam_BLE_LLD_Packet;
- memcpy(params->key, Key, sizeof(params->key));
- memcpy(params->plainData, plainData, sizeof(params->plainData));
- sendCommand(BLE_LLD_ENCRYPTPLAINDATA_CMDCODE, &bleparam_BLE_LLD_Packet);
- memcpy(cypherData, params->cypherData, sizeof(params->cypherData));
-}
-
-/**
- * @brief Sets channel map
- *
- * If the channel map is not in use, do not define it.
- * The LSB corresponds to bit 0. When the corresponding bit is set, the channel
- * is in use. When the corresponding bit it is cleared, there will be an
- * automatic remap to another channel, conforming to the Bluetooth Low Energy
- * specification.
- * Setting all bits of the chan_remap vector to ‘1’ disables the channel
- * remapping. This is the expected mode when the Bluetooth channel remap is not
- * in use.
- *
- * @param[in] StateMachineNo State machine number in multistate (between 0 and 7)
- * @param[in] chan_remap Bitmap of channels to use if 1 (between 0 and 36)
- */
-void BLE_LLD_SetChannelMap(uint8_t StateMachineNo, uint8_t (*chan_remap)[5])
-{
- param_BLE_LLD_chanMap_t *params = (param_BLE_LLD_chanMap_t *)&bleparam_BLE_LLD_Packet;
- params->stateMachineNo = StateMachineNo;
- memcpy(params->map, chan_remap, sizeof(params->map));
- sendCommand(BLE_LLD_SETCHANNELMAP_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Sets the channel and the channel increment.
- *
- * @param[in] StateMachineNo State machine number in multistate (between 0 and 7)
- * @param[in] channel Frequency channel (between 0 and 39)
- * @param[in] channel_increment Channel increment value determines the hoping value
- */
-void BLE_LLD_SetChannel(uint8_t StateMachineNo, uint8_t channel, uint8_t channel_increment)
-{
- param_BLE_LLD_chan_t *params = (param_BLE_LLD_chan_t *)&bleparam_BLE_LLD_Packet;
- params->stateMachineNo = StateMachineNo;
- params->channel = channel;
- params->channelInc = channel_increment;
- sendCommand(BLE_LLD_SETCHANNEL_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Sets the access address (AccessAddress), the CRC initialization value and the Slow Clock Accuracy (SCA).
- *
- * @param[in] StateMachineNo State machine number in multistate (between 0 and 7)
- * @param[in] NetworkID BLE NetworkID
- * @param[in] crc_init CRC initialization value, must be 0x555555
- * @param[in] sca Parameter not used
- */
-void BLE_LLD_SetTxAttributes(uint8_t StateMachineNo, uint32_t NetworkID, uint32_t crc_init, uint32_t sca)
-{
- param_BLE_LLD_txAttr_t *params = (param_BLE_LLD_txAttr_t *)&bleparam_BLE_LLD_Packet;
- params->stateMachineNo = StateMachineNo;
- params->networkId = NetworkID ;
- params->crcInit = crc_init;
- params->sca = sca; // not used
- sendCommand(BLE_LLD_SETTXATTRIBUTES_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Sets the time between back-to-back radio transmissions.
- *
- * A minimum value of 50us must be set.
- *
- * @param[in] back_to_back_time Time between two frames in back to back mode (us)
- */
-void BLE_LLD_SetBackToBackTime(uint32_t back_to_back_time)
-{
- param_BLE_LLD_b2b_t *params = (param_BLE_LLD_b2b_t *)&bleparam_BLE_LLD_Packet;
- params->backToBackTime = back_to_back_time;
- sendCommand(BLE_LLD_SETBACKTOBACKTIME_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Sets the transmit power level.
- *
- * @param[in] powerLevel Transmit power level (between 0 and 31)
- */
-void BLE_LLD_SetTxPower(uint8_t powerLevel)
-{
- param_BLE_LLD_power_t *params = (param_BLE_LLD_power_t *)&bleparam_BLE_LLD_Packet;
- params->power = powerLevel;
- sendCommand(BLE_LLD_SETTXPOWER_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Sets the data speed for transmission and reception.
- *
- * @param[in] StateMachineNo State machine number in multistate (between 0 and 7)
- * @param[in] tx_phy Speed for transmission: TX_PHY_1MBPS / TX_PHY_2MBPS
- * @param[in] rx_phy Speed for reception RX_PHY_1MBPS / RX_PHY_2MBPS
- */
-void BLE_LLD_SetTx_Rx_Phy(uint8_t StateMachineNo, uint8_t tx_phy, uint8_t rx_phy)
-{
- param_BLE_LLD_phy_t *params = (param_BLE_LLD_phy_t *)&bleparam_BLE_LLD_Packet;
- params->stateMachineNo = StateMachineNo;
- params->txPhy = tx_phy;
- params->rxPhy = rx_phy;
- sendCommand(BLE_LLD_SETTX_RX_PHY_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Prepares an action packet for execution.
- *
- * This function must be called after the action packet fields are set.
- *
- * @param[in] p Action packet to prepare, memory lifetime must extend until response processing
- */
-void BLE_LLD_SetReservedArea(ActionPacket *p)
-{
- param_BLE_LLD_reserved_t *params = (param_BLE_LLD_reserved_t *)&bleparam_BLE_LLD_Packet;
-
- actionPackets[p->actionPacketNb] = p;
-
- params->stateMachineNo = p->StateMachineNo;
- params->nextTrue = p->next_true;
- params->nextFalse = p->next_false;
- params->wakeupTime = p->WakeupTime;
- params->receiveWindowLength = p->ReceiveWindowLength;
- params->actionPacketNb = p->actionPacketNb;
- params->actionTag = p->ActionTag;
- params->setCase.condCase = (condCase_t)p->condRoutine;
- params->setCase.dataCase = (dataCase_t)p->dataRoutine;
- if(params->actionTag & AT_TXRX) {
- memcpy((params->txrxBuffer.txBuffer), p->data, TXRX_BUF_SIZE);
- }
- sendCommand(BLE_LLD_SETRESERVEDAREA_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Schedules an action packet for execution on the radio.
- *
- * BLE_LLD_SetReservedArea() must have been called first to prepare the action packet.
- *
- * @param[in] p Action packet to schedule, memory lifetime must extend until response processing
- *
- * @retval SUCCESS_0 if success
- * @retval RADIO_BUSY_C4 if radio is busy
- */
-uint8_t BLE_LLD_MakeActionPacketPending(ActionPacket *p)
-{
- param_BLE_LLD_mkPending_t *params = (param_BLE_LLD_mkPending_t *)&bleparam_BLE_LLD_Packet;
- params->actionPacketNb = p->actionPacketNb;
- params->packetNumber = dataRoutineParams.packetNumber;
- params->packetStopRx = dataRoutineParams.packetStopRx;
- return(sendCommand(BLE_LLD_MAKEACTIONPACKETPENDING_CMDCODE, &bleparam_BLE_LLD_Packet));
-}
-
-/**
- * @brief Stops the radio
- *
- * After a call to this function ISR will not be triggered, unless
- * MakeActionPacketPending() is called again.
- *
- * @retval true
- */
-uint8_t BLE_LLD_StopActivity(void)
-{
- return(sendCommand(BLE_LLD_STOPACTIVITY_CMDCODE, &bleparam_BLE_LLD_Packet));
-}
-
-/**
- * @brief Starts tone transmission on selected channel.
- *
- * This function is dedicated to tests and destroys context and multistate.
- * So, after calling this function the radio must be re-initialized.
- *
- * @param[in] RF_channel Radio frequency channel (between 0 and 39)
- * @param[in] PowerLevel Output power level (between 0 and 31)
- */
-void BLE_LLD_StartTone(uint8_t RF_channel, uint8_t powerLevel)
-{
- param_BLE_LLD_toneStart_t *params = (param_BLE_LLD_toneStart_t *)&bleparam_BLE_LLD_Packet;
- params->channel = RF_channel;
- params->power = powerLevel;
- sendCommand(BLE_LLD_STARTTONE_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * @brief Stops tone transmission.
- *
- * This function is dedicated to tests and destroys context and multistate.
- * So, after calling this function the radio must be re-initialized.
- */
-void BLE_LLD_StopTone(void)
-{
- sendCommand(BLE_LLD_STOPTONE_CMDCODE, &bleparam_BLE_LLD_Packet);
-}
-
-/**
- * Events processing.
- *
- * On radio events, M0 sends notifications.
- * Application can register callbacks to do some custom processing on
- * these events.
- * For the same event, custom processing can be executed in two different
- * context: in interruption context or after interruption (typicallyd in a task).
- */
-
-/* --------------------- M0 REPLY PROCESSING IN INTERRUPT --------------------*/
-
-static uint8_t APIndex(param_BLE_LLD_m0Reply_t *reply)
-{
- return reply->txrxBuffer.rxBuffer[257];
-}
-
-static void itCbNop(void){}
-
-/** Callbacks for the different events for processing during interruption */
-static struct {
- void(*Stop)(void);
- void(*End)(void);
- void(*RxAck)(void);
- void(*RxOk)(void);
- void(*RxAckEnd)(void);
- void(*RxOkEnd)(void);
-} interReplyCb = {itCbNop, itCbNop, itCbNop, itCbNop, itCbNop, itCbNop};
-
-/**
- * @brief Registers a callback on an event for processing during interruption.
- *
- * @param[in] event Event on which to execute
- * @param[in] cb Callback
- */
-void BLE_LLD_PRX_ReplyInterCbRegister(cmdFromM0_t event, void(*cb)(void)){
- switch (event) {
- case CMD_FROM_M0_RADIO_STOP: interReplyCb.Stop = cb; break;
- case CMD_FROM_M0_RADIO_END: interReplyCb.End = cb; break;
- case CMD_FROM_M0_RADIO_RXACK: interReplyCb.RxAck = cb; break;
- case CMD_FROM_M0_RADIO_RXOK: interReplyCb.RxOk = cb; break;
- case CMD_FROM_M0_RADIO_RXACKEND: interReplyCb.RxAckEnd = cb; break;
- case CMD_FROM_M0_RADIO_RXOKEND: interReplyCb.RxOkEnd = cb; break;
- default: break;
- }
-}
-
-/**
- * @brief Executes the registered callback for an event during interruption.
- *
- * This function also performs unpacking of received packets.
- *
- * @param[in] cmd Command string identifying the event
- *
- * @retval true if cmd has been recognized
- */
-bool BLE_LLD_PRX_ReplyInterDispatch(const char *cmd)
-{
- param_BLE_LLD_m0Reply_t *reply = (param_BLE_LLD_m0Reply_t *)&bleparam_BLE_LLD_Packet;
- actionPackets[APIndex(reply)]->status = reply->status;
-
- m0Cmd = CMD_FROM_M0_UNKNOWN;
- if (0 == strcmp(cmd, "Radio_Stop")) {
- m0Cmd = CMD_FROM_M0_RADIO_STOP;
- interReplyCb.Stop();
- } else if (0 == strcmp(cmd, "Radio_End")) {
- m0Cmd = CMD_FROM_M0_RADIO_END;
- interReplyCb.End();
- } else if (0 == strcmp(cmd, "Radio_RxAck")) {
- m0Cmd = CMD_FROM_M0_RADIO_RXACK;
- unpackRx(reply);
- interReplyCb.RxAck();
- } else if (0 == strcmp(cmd, "Radio_RxOk")) {
- m0Cmd = CMD_FROM_M0_RADIO_RXOK;
- unpackRx(reply);
- interReplyCb.RxOk();
- } else if (0 == strcmp(cmd, "Radio_RxAckEnd")) {
- m0Cmd = CMD_FROM_M0_RADIO_RXACKEND;
- unpackRx(reply);
- interReplyCb.RxAckEnd();
- } else if (0 == strcmp(cmd, "Radio_RxOkEnd")) {
- m0Cmd = CMD_FROM_M0_RADIO_RXOKEND;
- unpackRx(reply);
- interReplyCb.RxOkEnd();
- }
- return (CMD_FROM_M0_UNKNOWN != m0Cmd);
-}
-
-static void unpackRx(param_BLE_LLD_m0Reply_t *reply){
- actionPackets[APIndex(reply)]->timestamp_receive = reply->timestampReceive;
- actionPackets[APIndex(reply)]->rssi = reply->rssi;
- memcpy(actionPackets[APIndex(reply)]->data, reply->txrxBuffer.rxBuffer, TXRX_BUF_SIZE);
-}
-
-static uint8_t sendCommand(BLE_LLD_Code_t bleCmd, param_BLE_LLD_t *bleParams){
- // build command
- command.id = bleCmd;
- command.params = bleParams;
-
- // send it via callback
- CB_sendCmdM0(&command);
-
- return bleParams->returnValue;
-}
-
-/* ----------------------- M0 REPLY PROCESSING IN TASK -----------------------*/
-static void tskCbNop(void){}
-
-/** Callbacks for the different events for processing after interruption */
-static struct {
- void(*Stop)(void);
- void(*End)(void);
- void(*RxAck)(void);
- void(*RxOk)(void);
- void(*RxAckEnd)(void);
- void(*RxOkEnd)(void);
-} taskReplyCb = {tskCbNop, tskCbNop, tskCbNop, tskCbNop, tskCbNop, tskCbNop};
-
-
-/**
- * @brief Registers a callback on an event for processing after interruption.
- *
- * @param[in] event Event on which to execute
- * @param[in] cb Callback
- */
-void BLE_LLD_PRX_ReplyTaskCbRegister(cmdFromM0_t event, void(*cb)(void)){
- switch (event) {
- case CMD_FROM_M0_RADIO_STOP: taskReplyCb.Stop = cb; break;
- case CMD_FROM_M0_RADIO_END: taskReplyCb.End = cb; break;
- case CMD_FROM_M0_RADIO_RXACK: taskReplyCb.RxAck = cb; break;
- case CMD_FROM_M0_RADIO_RXOK: taskReplyCb.RxOk = cb; break;
- case CMD_FROM_M0_RADIO_RXACKEND: taskReplyCb.RxAckEnd = cb; break;
- case CMD_FROM_M0_RADIO_RXOKEND: taskReplyCb.RxOkEnd = cb; break;
- default: break;
- }
-}
-
-/**
- * @brief Executes the registered callback for an event after interruption.
- */
-void BLE_LLD_PRX_ReplyTaskCbDispatch(void){
- param_BLE_LLD_m0Reply_t *reply = (param_BLE_LLD_m0Reply_t *)&bleparam_BLE_LLD_Packet;
- actionPackets[APIndex(reply)]->status = reply->status;
-
- switch (m0Cmd) {
- case CMD_FROM_M0_RADIO_STOP: taskReplyCb.Stop(); break;
- case CMD_FROM_M0_RADIO_END: taskReplyCb.End(); break;
- case CMD_FROM_M0_RADIO_RXACK: taskReplyCb.RxAck(); break;
- case CMD_FROM_M0_RADIO_RXOK: taskReplyCb.RxOk(); break;
- case CMD_FROM_M0_RADIO_RXACKEND: taskReplyCb.RxAckEnd(); break;
- case CMD_FROM_M0_RADIO_RXOKEND: taskReplyCb.RxOkEnd(); break;
- default: break;
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.h
deleted file mode 100644
index e75f898f5..000000000
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/**
- ******************************************************************************
- * File Name : app_ble_lld.h
- * Description : Header for BLE LLD application.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef BLE_LLD_H
-#define BLE_LLD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32_wpan_common.h"
-#include <stdbool.h>
-
-/* Private includes ----------------------------------------------------------*/
-
-/* Exported types ------------------------------------------------------------*/
-
-/* Exported constants --------------------------------------------------------*/
-
-/* External variables --------------------------------------------------------*/
-
-/* Exported macros ------------------------------------------------------------*/
-
-/* Exported functions ------------------------------------------------------- */
-
-/* ---------------------------------------------------------------------------*/
-/* ------------------------------- BLE LLD -----------------------------------*/
-/* ---------------------------------------------------------------------------*/
-#define IRQ_RCV_OK (1UL<<31) /* The packet is received, and the CRC is valid. */
-#define BIT_TX_MODE (1UL<<18) /* The packet has been sent successfully. */
-
-#define HS_STARTUP_TIME (uint16_t)(0x0099) /* High Speed start up for LP */
-
-#define BLE_HOT_ANA_CONFIG_TABLE_LENGTH 60
-
-#define ACTION_PACKET_NB 8
-#define TXRX_BUF_SIZE 258
-#define AES_KEY_SIZE 16
-#define AES_BLOCK_SIZE 16
-#define AES_IV_SIZE 8
-#define CHAN_MAP_SIZE 5 // 37 bits
-
-/* Radio Status */
-#define SUCCESS_0 0
-#define INVALID_PARAMETER_C0 0xC0
-#define RADIO_BUSY_C4 0xC4
-
-/* BLE Status */
-#define BLUE_IDLE_0 0
-#define BLUE_BUSY_NOWAKEUP_T2 2
-#define BLUE_BUSY_WAKEUP 3
-#define BLUE_BUSY_TONE 4
-#define BLUE_TONE_DESTROY 5
-
-#define RX_PHY_1MBPS 0x00
-#define RX_PHY_2MBPS 0x10
-#define TX_PHY_1MBPS 0x00
-#define TX_PHY_2MBPS 0x01
-#define BACK2BACK_TIME 50
-
-/* Action tag bitfield */
-#define AT_PLL_TRIG 0x01
-#define AT_TXRX 0x02
-#define AT_TIMER_WAKEUP 0x04
-#define AT_NS_EN 0x08
-#define AT_INC_CHAN 0x10
-#define AT_RELATIVE 0x20
-#define AT_TIMESTAMP_POSITION 0x80
-
-/* Events from M0 */
-typedef enum
-{
- CMD_FROM_M0_RADIO_STOP = 12,
- CMD_FROM_M0_RADIO_END = 13,
- CMD_FROM_M0_RADIO_RXACK = 14,
- CMD_FROM_M0_RADIO_RXOK = 15,
- CMD_FROM_M0_RADIO_RXACKEND = 16,
- CMD_FROM_M0_RADIO_RXOKEND = 17,
- CMD_FROM_M0_UNKNOWN = 255,
-} cmdFromM0_t;
-
-/* Finite state machines available on M0 */
-typedef enum
-{
- STATE_MACHINE_0 = 0,
- STATE_MACHINE_1,
- STATE_MACHINE_2,
- STATE_MACHINE_3,
- STATE_MACHINE_4,
- STATE_MACHINE_5,
- STATE_MACHINE_6,
- STATE_MACHINE_7,
-} StateMachine_t;
-
-/* Action packets available on M0 */
-typedef enum
-{
- APACKET_0 = 0,
- APACKET_1,
- APACKET_2,
- APACKET_3,
- APACKET_4,
- APACKET_5,
- APACKET_6,
- APACKET_7,
- APACKET_NULL=0xFF, // to be placed at the end
-} ActionPacket_Nb;
-
-/* condRoutine enum for condRoutine() */
-typedef enum
-{
- condCase_Done = 0,
- condCase_Tx,
- condCase_Rx,
- condCase_Stop,
-} condCase_t;
-
-/* dataRoutine enum for dataRoutine() */
-typedef enum
-{
- dataCase_Custom0 = 0,
- dataCase_Custom1,
- dataCase_Custom2,
- dataCase_Custom3,
- dataCase_Custom4,
- dataCase_Custom5,
- dataCase_Custom6,
- dataCase_Custom7,
-} dataCase_t;
-
-/* Data routines definitions to use after a call to HAL_BLE_Init() */
-#define DATA_ROUT_HAL_DONE dataCase_Custom0
-#define DATA_ROUT_HAL_TX dataCase_Custom1
-#define DATA_ROUT_HAL_RX dataCase_Custom2
-#define DATA_ROUT_HAL_STOP dataCase_Custom3
-#define DATA_ROUT_HAL_TXMULTI dataCase_Custom4
-#define DATA_ROUT_HAL_TXMULTIACK dataCase_Custom5
-#define DATA_ROUT_HAL_RXMULTI dataCase_Custom6
-#define DATA_ROUT_HAL_RXMULTIACK dataCase_Custom7
-
-/* Data routines definitions to use after a call to BLE_LLD_Init() */
-#define DATA_ROUT_LL_DONE dataCase_Custom0
-#define DATA_ROUT_LL_TX dataCase_Custom1
-#define DATA_ROUT_LL_RX dataCase_Custom2
-#define DATA_ROUT_LL_STOP dataCase_Custom3
-#define DATA_ROUT_LL_TXMULTIACK dataCase_Custom4
-#define DATA_ROUT_LL_RXMULTIACK dataCase_Custom5
-#define DATA_ROUT_LL_ACTION dataCase_Custom6
-
-typedef struct {
- uint8_t StateMachineNo ; /* This parameter indicates the state machine number for this action. From 0 to 7. */
- uint8_t ActionTag; /* The configuration of the current action.
- * Action Tag: AT_PLL_TRIG, AT_TXRX, AT_TIMER_WAKEUP, AT_INC_CHAN, AT_TIMESTAMP_POSITION, AT_RELATIVE */
- uint32_t WakeupTime; /* Contains the wakeup time in microsecond if it is relative.
- * It should not be more than 24 bits if it is absolute.
- * It only applies if AT_TIMER_WAKEUP flag is set in ActionTag. */
- uint32_t ReceiveWindowLength; /* Sets RX window size in microsecond. Applicable only for RX actions. */
- uint8_t *data; /* Pointer to the array with the data to send (header, length and data field), for TX.
- * Pointer to the array where the data received are copied, for RX.
- * In case of RX, the array must have the max size MAX_PACKET_LENGTH. */
- uint32_t status; /* The Status Register with the information on the action. */
- uint32_t timestamp_receive; /* This field contains the timestamp when a packet is received.
- * Intended to be used in the dataRoutine() callback routine. RX only. */
- int32_t rssi; /* The rssi of the packet was received with. RX only. */
- uint8_t next_true; /* Pointer to next ActionPacket if condRoutine() returns TRUE */
- uint8_t next_false; /* Pointer to next ActionPacket if condRoutine() returns FALSE */
- uint8_t condRoutine; /* User callback that decide the next ActionPacket to use.
- * It is time critical. Routine must end within 45 us. */
- uint8_t dataRoutine; /* User callback for managing data. */
- uint8_t actionPacketNb; /* User callback for managing data. */
-} ActionPacket;
-
-/* Exported functions ------------------------------------------------------- */
-void BLE_LLD_PRX_Init(void (*callbackSendCmdM0)(void *));
-void BLE_LLD_PRX_ReplyInterCbRegister(cmdFromM0_t event, void(*cb)(void));
-bool BLE_LLD_PRX_ReplyInterDispatch(const char *cmd);
-void BLE_LLD_PRX_ReplyTaskCbDispatch(void);
-void BLE_LLD_PRX_ReplyTaskCbRegister(cmdFromM0_t event, void(*cb)(void));
-void BLE_LLD_PRX_SetdataRoutineMultiOptions(uint32_t PacketNumber, uint8_t PacketStop );
-
-uint8_t BLE_LLD_GetStatus(uint32_t *time);
-void BLE_LLD_SetChannelMap(uint8_t StateMachineNo, uint8_t (*chan_remap)[5]);
-void BLE_LLD_SetChannel(uint8_t StateMachineNo, uint8_t channel,uint8_t channel_increment);
-void BLE_LLD_SetTxAttributes(uint8_t StateMachineNo, uint32_t NetworkID, uint32_t crc_init, uint32_t sca);
-void BLE_LLD_SetBackToBackTime(uint32_t back_to_back_time);
-void BLE_LLD_SetTxPower(uint8_t powerLevel);
-void BLE_LLD_SetTx_Rx_Phy(uint8_t StateMachineNo, uint8_t tx_phy, uint8_t rx_phy);
-uint8_t BLE_LLD_StopActivity(void);
-void BLE_LLD_SetEncryptionCount(uint8_t StateMachineNo, uint8_t (*count_tx)[5], uint8_t (*count_rcv)[5]);
-void BLE_LLD_SetEncryptionAttributes(uint8_t StateMachineNo, uint8_t (*enc_iv)[8], uint8_t (*enc_key)[16]);
-void BLE_LLD_SetEncryptFlags(uint8_t StateMachineNo, FunctionalState EncryptFlagTx, FunctionalState EncryptFlagRcv);
-void BLE_LLD_EncryptPlainData(uint8_t (*Key)[16], uint8_t (*plainData)[16], uint8_t (*cypherData)[16]);
-void BLE_LLD_StartTone(uint8_t RF_channel, uint8_t powerLevel);
-void BLE_LLD_StopTone(void);
-void BLE_LLD_SetReservedArea(ActionPacket *p);
-uint8_t BLE_LLD_MakeActionPacketPending(ActionPacket *p);
-void BLE_LLD_Init(uint16_t hs_startup_time, uint8_t low_speed_osc, uint32_t* hot_table, FunctionalState whitening);
-
-#endif /* BLE_LLD_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld_private.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld_private.h
deleted file mode 100644
index e2173dd70..000000000
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld_private.h
+++ /dev/null
@@ -1,310 +0,0 @@
-/**
- ******************************************************************************
- * File Name : app_ble_lld_private.h
- * Description : Header for BLE LLD communication with M0.
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef BLE_LLD_PRIVATE_H
-#define BLE_LLD_PRIVATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-
-/* Private includes ----------------------------------------------------------*/
-
-/* Exported types ------------------------------------------------------------*/
-
-/* Exported constants --------------------------------------------------------*/
-
-/* External variables --------------------------------------------------------*/
-
-/* Exported macros ------------------------------------------------------------*/
-
-/* Exported functions ------------------------------------------------------- */
-
-/* ---------------------------------------------------------------------------*/
-/* ------------------------------- BLE LLD -----------------------------------*/
-/* ---------------------------------------------------------------------------*/
-
-/* max payload length(255) + header (2) (257 bytes) aligned on 32-bit (65 word = 260 bytes) */
-#define RADIO_PKT_RX_BUF_SIZE 260
-#define RADIO_PKT_TX_BUF_SIZE 260
-
-/* Commands to M0 */
-typedef enum
-{
- HAL_BLE_LLD_UNUSED_CMDCODE = 0,
- HAL_BLE_LLD_INIT_CMDCODE ,
- HAL_BLE_LLD_SETNETWORKID_CMDCODE,
- HAL_BLE_LLD_SENDPACKET_CMDCODE,
- HAL_BLE_LLD_SENDPACKETWITHACK_CMDCODE,
- HAL_BLE_LLD_RECEIVEPACKET_CMDCODE,
- HAL_BLE_LLD_RECEIVEPACKETWITHACK_CMDCODE,
- BLE_LLD_GETSTATUS_CMDCODE,
- BLE_LLD_SETCHANNELMAP_CMDCODE,
- BLE_LLD_SETCHANNEL_CMDCODE,
- BLE_LLD_SETTXATTRIBUTES_CMDCODE,
- BLE_LLD_SETBACKTOBACKTIME_CMDCODE,
- BLE_LLD_SETTXPOWER_CMDCODE,
- BLE_LLD_SETTX_RX_PHY_CMDCODE,
- BLE_LLD_STOPACTIVITY_CMDCODE,
- BLE_LLD_SETENCRYPTIONCOUNT_CMDCODE,
- BLE_LLD_SETENCRYPTIONATTRIBUTES_CMDCODE,
- BLE_LLD_SETENCRYPTFLAGS_CMDCODE,
- BLE_LLD_ENCRYPTPLAINDATA_CMDCODE,
- BLE_LLD_STARTTONE_CMDCODE,
- BLE_LLD_STOPTONE_CMDCODE,
- BLE_LLD_SETRESERVEDAREA_CMDCODE,
- BLE_LLD_MAKEACTIONPACKETPENDING_CMDCODE,
- BLE_LLD_INIT_CMDCODE,
-} BLE_LLD_Code_t;
-
-/* dataRoutine and condRoutine struct */
-typedef PACKED_STRUCT
-{
- uint8_t condCase;
- uint8_t dataCase;
-} setCase_t;
-
-/* Structure for Buffer */
-typedef PACKED_STRUCT
-{
- uint8_t txBuffer[RADIO_PKT_TX_BUF_SIZE]; /* __I */ /*txBuffer + Encrypt*/
- uint8_t rxBuffer[RADIO_PKT_RX_BUF_SIZE]; /* __O */ /*rxBuffer + radioPacketNb=rxBuffer[257] */
-} buffer_BLE_LLD_t;
-
-/* Generic structure for messages to M0, mostly used as a size reference.
- Only returnValue is used.
- A specialized structure (param_hal_BLE_xxx_t or param_BLE_LLD_xxx_t) should
- be used for actual messages. */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[24];
- uint8_t returnValue;
- uint8_t padding2[5];
- setCase_t padding3;
- buffer_BLE_LLD_t padding4;
-} param_BLE_LLD_t;
-
-/** Parameters for command HAL_BLE_SETNETWORKID_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t padding1[2];
- uint32_t id;
-} param_BLE_LLD_network_t;
-
-/** Parameters for commands HAL_BLE_SENDPACKET_CMDCODE and
- * HAL_BLE_LLD_SENDPACKETWITHACK_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t wakeupTime;
- uint32_t receiveTimeout;
- uint32_t packetNumber;
- uint8_t padding1[13];
- uint8_t channel;
- uint8_t padding2;
- uint8_t packetStopRx;
- uint8_t padding3[2];
- setCase_t setCase;
- buffer_BLE_LLD_t txrxBuffer;
-} param_BLE_LLD_send_t;
-
-/** Parameters for commands HAL_BLE_RECEIVEPACKET_CMDCODE and
- * HAL_BLE_LLD_RECEIVEPACKETWITHACK_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t wakeupTime;
- uint32_t receiveTimeout;
- uint32_t packetNumber;
- uint8_t padding1[14];
- uint8_t channel;
- uint8_t packetStopRx;
- uint8_t padding2[2];
- setCase_t setCase;
- buffer_BLE_LLD_t txrxBuffer;
-} param_BLE_LLD_receive_t;
-
-/** Parameters for command BLE_LLD_GETSTATUS_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t padding1[2];
- uint32_t time;
-} param_BLE_LLD_status_t;
-
-/** Parameters for command BLE_LLD_SETENCRYPTIONCOUNT_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[27];
- uint8_t stateMachineNo;
- uint8_t padding2[2];
- setCase_t padding3;
- uint8_t countTx[5];
- uint8_t countRcv[5];
-} param_BLE_LLD_cryptCount_t;
-
-/** Parameters for command BLE_LLD_SETENCRYPTIONATTRIBUTES_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[27];
- uint8_t stateMachineNo;
- uint8_t padding2[2];
- setCase_t padding3;
- uint8_t encIv[AES_IV_SIZE];
- uint8_t encKey[AES_KEY_SIZE];
-} param_BLE_LLD_cryptAttr_t;
-
-/** Parameters for command BLE_LLD_SETENCRYPTFLAGS_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[25];
- uint8_t encFlagTx;
- uint8_t encFlagRx;
- uint8_t StateMachineNo;
-} param_BLE_LLD_cryptFlags_t;
-
-/** Parameters for command BLE_LLD_ENCRYPTPLAINDATA_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[30];
- setCase_t padding2;
- uint8_t key[AES_KEY_SIZE];
- uint8_t padding3[112];
- uint8_t plainData[AES_BLOCK_SIZE];
- uint8_t padding[116];
- uint8_t cypherData[AES_BLOCK_SIZE];
-} param_BLE_LLD_crypt_t;
-
-/** Parameters for command BLE_LLD_STARTTONE_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[25];
- uint8_t channel;
- uint8_t padding2;
- uint8_t power;
-} param_BLE_LLD_toneStart_t;
-
-/** Parameters for command BLE_LLD_SETCHANNELMAP_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[27];
- uint8_t stateMachineNo;
- uint8_t padding2[2];
- setCase_t padding3;
- uint8_t map[CHAN_MAP_SIZE];
-} param_BLE_LLD_chanMap_t;
-
-/** Parameters for command BLE_LLD_SETCHANNEL_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[25];
- uint8_t channel;
- uint8_t channelInc;
- uint8_t stateMachineNo;
-} param_BLE_LLD_chan_t;
-
-/** Parameters for command BLE_LLD_SETTXATTRIBUTES_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t crcInit;
- uint32_t sca;
- uint32_t networkId;
- uint8_t padding1[15];
- uint8_t stateMachineNo;
-} param_BLE_LLD_txAttr_t;
-
-/** Parameters for command BLE_LLD_SETBACKTOBACKTIME_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t backToBackTime;
-} param_BLE_LLD_b2b_t;
-
-/** Parameters for command BLE_LLD_SETTXPOWER_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[27];
- uint8_t power;
-} param_BLE_LLD_power_t;
-
-/** Parameters for command BLE_LLD_SETTX_RX_PHY_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[25];
- uint8_t txPhy;
- uint8_t rxPhy;
- uint8_t stateMachineNo;
-} param_BLE_LLD_phy_t;
-
-/** Parameters for command BLE_LLD_SETRESERVEDAREA_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t wakeupTime;
- uint32_t receiveWindowLength;
- uint8_t padding1[17];
- uint8_t nextTrue;
- uint8_t nextFalse;
- uint8_t stateMachineNo;
- uint8_t actionTag;
- uint8_t actionPacketNb;
- setCase_t setCase;
- buffer_BLE_LLD_t txrxBuffer;
-} param_BLE_LLD_reserved_t;
-
-/** Parameters for command BLE_LLD_MAKEACTIONPACKETPENDING_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t padding1[2];
- uint32_t packetNumber;
- uint8_t padding2[15];
- uint8_t packetStopRx;
- uint8_t padding3;
- uint8_t actionPacketNb;
-} param_BLE_LLD_mkPending_t;
-
-/** Parameters for command BLE_LLD_INIT_CMDCODE */
-typedef PACKED_STRUCT
-{
- uint32_t startupTime;
- uint8_t padding1[24];
- uint8_t lowSpeedOsc;
- uint8_t whitening;
- setCase_t padding2;
- buffer_BLE_LLD_t txrxBuffer;
-} param_BLE_LLD_init_t;
-
-/** Parameters for replies */
-typedef PACKED_STRUCT
-{
- uint8_t padding1[12];
- uint32_t status;
- uint32_t timestampReceive;
- uint32_t rssi;
- uint8_t padding2[6];
- setCase_t padding3;
- buffer_BLE_LLD_t txrxBuffer;
-} param_BLE_LLD_m0Reply_t;
-
-/** Command to M0 */
-typedef PACKED_STRUCT
-{
- uint8_t id;
- param_BLE_LLD_t *params;
-} bleCmd_t;
-
-#endif /* BLE_LLD_PRIVATE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.c
new file mode 100644
index 000000000..caa507a85
--- /dev/null
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.c
@@ -0,0 +1,161 @@
+/**
+ ******************************************************************************
+ * File Name : pressbutton_app.c
+ * Description : BLE LLD simple demo to control LEDs remotely
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under Ultimate Liberty license
+ * SLA0044, the "License"; You may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at:
+ * www.st.com/SLA0044
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stdbool.h"
+#include "app_common.h"
+#include "stm32_seq.h"
+#include "stm32_lpm.h"
+#include "stm_logging.h"
+#include "dbg_trace.h"
+#include "ble_hal.h"
+#include "ipBLE_lld_public.h"
+#include "app_ble_lld.h"
+#include "pressbutton_app.h"
+
+/* Private includes -----------------------------------------------------------*/
+
+/* Private typedef -----------------------------------------------------------*/
+// Allows to pack and unpack user data in payload (must not exceed 255 bytes)
+typedef PACKED_STRUCT
+{
+ uint8_t led;
+} userPayload;
+
+/* Private defines -----------------------------------------------------------*/
+#define CHANNEL 8 // radio channel
+#define POWER TX_POW_PLUS_6_DB // Transmit power
+#define NET_ID 0x5A964129 // network ID, both devices must use the same
+#define RX_TIMEOUT_US (1*1000*1000) // max delay radio will listen for a packet
+#define DEBOUNCE_MS 250 // debouncing delay (ms)
+
+/* Private macros ------------------------------------------------------------*/
+
+/* Private function prototypes -----------------------------------------------*/
+static void radioInit(void);
+static void listenStart(void);
+static void listenEnd(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size);
+static void sendStart(void);
+static void sendEnd(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size);
+
+static inline uint32_t timeDifference(uint32_t old, uint32_t new);
+
+/* Private variables -----------------------------------------------*/
+static uint32_t ledToToggle;
+
+/* Functions Definition ------------------------------------------------------*/
+
+void PRESSBUTTON_APP_Init(void)
+{
+ CheckWirelessFirmwareInfo();
+
+ /* Disable low power */
+ UTIL_LPM_SetOffMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_DISABLE);
+ UTIL_LPM_SetStopMode(1 << CFG_LPM_APP_BLE_LLD, UTIL_LPM_DISABLE );
+
+ /* Register tasks for event processing */
+ UTIL_SEQ_RegTask(1<<CFG_TASK_BUTTON, UTIL_SEQ_RFU, sendStart);
+
+ APP_BLE_LLD_Init();
+ radioInit();
+ listenStart();
+}
+
+static void radioInit(void)
+{
+ HAL_BLE_LLD_Init(CFG_HS_STARTUP_TIME, true);
+ HAL_BLE_LLD_Configure(POWER, CHANNEL, true, CFG_BACK2BACK_TIME, NET_ID);
+}
+
+void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
+{
+ static uint32_t latest = 0;
+
+ // Debounce
+ if (timeDifference(latest, HAL_GetTick()) > DEBOUNCE_MS){
+ latest = HAL_GetTick();
+ switch (GPIO_Pin){
+ case BUTTON_SW1_PIN: ledToToggle = LED1; break;
+ case BUTTON_SW2_PIN: ledToToggle = LED2; break;
+ case BUTTON_SW3_PIN: ledToToggle = LED3; break;
+ default: return;
+ }
+ UTIL_SEQ_SetTask(1U << CFG_TASK_BUTTON, CFG_SCH_PRIO_0);
+ }
+}
+
+static void listenStart(void)
+{
+ uint8_t status;
+ status = HAL_BLE_LLD_ReceivePacket(RX_TIMEOUT_US, listenEnd);
+ if (status != SUCCESS_0){
+ APP_DBG("ERROR: %s: HAL call failed", __func__);
+ }
+}
+
+static void listenEnd(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size)
+{
+ userPayload *payload = data;
+ Led_TypeDef led;
+ APP_DBG("%s: event %s", __func__, eventToString(cmd));
+ if (cmd == RX_OK_READY){
+ if (size != sizeof(userPayload)){
+ APP_DBG("%s: wrong payload length, packet discarded", __func__);
+ }else{
+ led = (Led_TypeDef)payload->led;
+ if (led != LED1 && led != LED2 && led != LED3){
+ APP_DBG("%s: wrong led value, packet discarded", __func__);
+ }else{
+ BSP_LED_Toggle(led);
+ uartWrite("Led %d is Toggling", led);
+ }
+ }
+ }
+ listenStart();
+}
+
+
+static void sendStart(void)
+{
+ userPayload payload;
+
+ // Need to interrupt radio while it is listening, then to reinit
+ BLE_LLD_StopActivity();
+ radioInit();
+
+ payload.led = ledToToggle;
+ HAL_BLE_LLD_SendPacket(&payload, sizeof(payload),sendEnd);
+}
+
+static void sendEnd(radioEventType cmd, ActionPacket *ap, void *data, uint8_t size)
+{
+ APP_DBG("%s: event %s", __func__, eventToString(cmd));
+ listenStart();
+}
+
+// Computes difference between old and new timestamps with rollover handling
+static inline uint32_t timeDifference(uint32_t old, uint32_t new){
+ if(new < old){
+ // Rollover happened
+ return UINT32_MAX - old + 1 + new;
+ }else{
+ return new - old;
+ }
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/pressbutton_app.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.h
index e18e7d3fc..602d7c8c4 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/pressbutton_app.h
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.h
@@ -39,7 +39,6 @@ extern "C" {
/* Exported functions ------------------------------------------------------- */
void PRESSBUTTON_APP_Init(void);
-void Appli_TIM_PeriodElapsedCallback(void);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.c b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.c
deleted file mode 100644
index d04d5ca5b..000000000
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- ******************************************************************************
- * File Name : ring_buffer.c
- * Description : utility to provide ring buffer component
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* "SPECIFICATIONS"
- - support any type as an element (with any size): not for now, only char
- - no dynamic allocation
- - buffer size can be changed by user
- - support adding multiple elements (string)
- - support removing multiple elements (string?)
-
-*/
-
-/* Includes ------------------------------------------------------------------*/
-#include "app_conf.h"
-#include "app_common.h"
-#include "dbg_trace.h"
-#include "stm_logging.h"
-#include "ring_buffer.h"
-
-/* Private includes ----------------------------------------------------------*/
-
-/* Private typedef -----------------------------------------------------------*/
-
-/* Private defines -----------------------------------------------------------*/
-
-/* Private macros ------------------------------------------------------------*/
-
-/* Private function prototypes -----------------------------------------------*/
-
-/* Private variables ---------------------------------------------------------*/
-
-/* Functions Definition ------------------------------------------------------*/
-
-// WARNING: be careful to protect a buffer operation by critical section if it
-// can be accessed in interruption too
-
-// Private function to move an index one step forward
-static inline void bufIncIndex(const Buffer *buf, uint32_t *index){
- *index = (*index + 1) % buf->mem_size;
-}
-
-// Initialize buffer structure, must be called first (see BUF_ALLOC)
-void bufInit(Buffer *buf, uint32_t size){
- buf->idx_rd = 0;
- buf->idx_wr = 0;
- buf->mem_size = size;
- buf->data_size = 0;
-}
-
-// Test if buffer is empty
-bool bufIsEmpty(const Buffer *buf){
- return (0 == buf->data_size);
-}
-
-// Test if buffer is full
-bool bufIsFull(const Buffer *buf){
- return (buf->mem_size == buf->data_size);
-}
-
-// Store one byte in buffer
-// Call ignored if buffer already full
-void bufPutChar(Buffer *buf, char character){
- if(! bufIsFull(buf)){
- buf->memory[buf->idx_wr] = character;
- bufIncIndex(buf, &(buf->idx_wr));
- (buf->data_size)++;
- }
-}
-
-// Store a string in buffer (without '\0')
-// When buffer is full, remaining bytes are dropped
-void bufPutString(Buffer *buf, const char *string){
- uint32_t freeSize = buf->mem_size - buf->data_size;
- uint32_t addSize = MIN(strlen(string), freeSize);
- uint32_t toEndSize = buf->mem_size - buf->idx_wr;
- uint32_t cp1Size = addSize;
- uint32_t cp2Size = 0;
- if (addSize > toEndSize){
- cp1Size = toEndSize;
- cp2Size = addSize - toEndSize;
- }
- memcpy(&(buf->memory[buf->idx_wr]), string, cp1Size);
- if (cp2Size == 0){
- buf->idx_wr = (buf->idx_wr + cp1Size) % buf->mem_size;
- }else{
- memcpy(&(buf->memory[0]), &(string[cp1Size]), cp2Size);
- buf->idx_wr = cp2Size;
- }
- buf->data_size += addSize;
-}
-
-// Retrieve one byte from buffer
-// Buffer must not be empty (check with bufIsEmpty())
-char bufGetChar(Buffer *buf){
- char character;
- character = buf->memory[buf->idx_rd];
- bufIncIndex(buf, &(buf->idx_rd));
- (buf->data_size)--;
- return character;
-}
-
-// Retrieve at most size chars from buffer, return actual count copied
-uint32_t bufGetMultiChar(Buffer *buf, char *dest, uint32_t size){
- uint32_t count = 0;
- while (! bufIsEmpty(buf) && (count < size)){
- *dest = bufGetChar(buf);
- dest++;
- count++;
- }
- return count;
-}
-
-#define TEST(EXP) \
- do { \
- if(!(EXP)) { \
- PRINT_MESG_DBG("Test failed on line %d: " #EXP, __LINE__); \
- all_passed = false; \
- } \
- } while (0)
-
-#define BUF_TEST_SIZE 128
-
-// Test buffer code
-void bufTest(void){
- uint32_t i;
- bool all_passed = true;
- char bufMem[sizeof(Buffer) + BUF_TEST_SIZE];
- Buffer *buf = (Buffer *)&bufMem;
-
- PRINT_MESG_DBG("entering %s()", __func__);
- bufInit(buf, BUF_TEST_SIZE);
- TEST(bufIsEmpty(buf));
-
- bufPutChar(buf, 'a');
- TEST(!bufIsEmpty(buf));
- TEST(!bufIsFull(buf));
- TEST('a' == bufGetChar(buf));
- TEST(bufIsEmpty(buf));
-
- TEST(bufIsEmpty(buf));
- const char testString[] = "ST Microelectronics";
- char checkString[64];
- i = 0;
- bufPutString(buf, testString);
- while(!bufIsEmpty(buf)){
- checkString[i] = bufGetChar(buf);
- i++;
- }
- checkString[i] = '\0';
- TEST(0 == strcmp(testString, checkString));
-
- for(uint32_t i = 0; i<buf->mem_size; i++){
- bufPutChar(buf, 'a');
- }
- TEST(!bufIsEmpty(buf));
- TEST(bufIsFull(buf));
-
- // Check that new entries are ignored when full
- bufPutChar(buf, 'b');
-
- i = 0;
- while(!bufIsEmpty(buf)){
- TEST('a' == bufGetChar(buf));
- i++;
- }
- TEST(buf->mem_size == i);
-
- // Check interleaved access
- TEST(bufIsEmpty(buf));
- bufPutChar(buf, 'a');
- bufPutChar(buf, 'b');
- TEST('a' == bufGetChar(buf));
- bufPutChar(buf, 'c');
- TEST('b' == bufGetChar(buf));
- TEST('c' == bufGetChar(buf));
- TEST(bufIsEmpty(buf));
-
- // Check bufPutString without rollover
- bufInit(buf, BUF_TEST_SIZE);
- const char testString2[] = "ring buffer test string";
- bufPutString(buf, testString2);
- i = 0;
- while(!bufIsEmpty(buf)){
- checkString[i] = bufGetChar(buf);
- i++;
- }
- checkString[i] = '\0';
- TEST(0 == strcmp(testString2, checkString));
-
-// Check bufPutString with rollover
- bufInit(buf, BUF_TEST_SIZE);
- const char testString3[] = "ring buffer rollover test string";
- for (i=0; i < (BUF_TEST_SIZE - 10); i++){
- bufPutChar(buf, 'm');
- }
- for (i=0; i < 30; i++){
- bufGetChar(buf);
- }
- bufPutString(buf, testString3);
- for (i=0; i < (BUF_TEST_SIZE -10 -30); i++){
- bufGetChar(buf);
- }
- i = 0;
- while(!bufIsEmpty(buf)){
- checkString[i] = bufGetChar(buf);
- i++;
- }
- checkString[i] = '\0';
- PRINT_MESG_DBG(checkString);
- TEST(0 == strcmp(testString3, checkString));
-
- if(all_passed){
- PRINT_MESG_DBG("Ring buffer: all tests passed");
- }
-}
-
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.h b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.h
deleted file mode 100644
index fade0e716..000000000
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- ******************************************************************************
- * File Name : ring_buffer.h
- * Description : utility to provide ring buffer component
- ******************************************************************************
- * @attention
- *
- * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-#ifndef RING_BUFFER_H
-#define RING_BUFFER_H
-
-#include <stdint.h>
-#include <stdbool.h>
-
-typedef struct {
- uint32_t idx_rd; // index of the next element to read
- uint32_t idx_wr; // index of the next element to write
- uint32_t data_size; // current number of elements
- // (needed to be able to store mem_size elements)
- uint32_t mem_size; // size of memory[]
- char memory[]; // user data starts at this point
-}Buffer;
-
-/* Buffer memory should be allocated with:
-BUF_ALLOC(memoryVariable, BUFFER_SIZE);
-Buffer *userBufferPointer = (Buffer *)&memoryVariable;
-*/
-
-// Allocate memory for buffer, with alignment guarantee
-#define BUF_ALLOC(variable, size) \
- static void *(variable)[(sizeof(Buffer) + (size)) / (sizeof(void *)) + 1]
-
-void bufInit(Buffer *buf, uint32_t size);
-
-bool bufIsEmpty(const Buffer *buf);
-bool bufIsFull(const Buffer *buf);
-
-void bufPutChar(Buffer *buf, char character);
-void bufPutString(Buffer *buf, const char *string);
-
-char bufGetChar(Buffer *buf);
-uint32_t bufGetMultiChar(Buffer *buf, char *dest, uint32_t size);
-
-void bufTest(void);
-
-#endif
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/readme.txt b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/readme.txt
index bce8e9aba..83d962024 100644
--- a/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/readme.txt
+++ b/Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton/readme.txt
@@ -20,11 +20,11 @@
@par Example Description
-How to make blinking LED between 2 STM32WB15xx boards by pressing buttons.
+How to make toggling LED between 2 boards by pressing buttons.
@note The objectives are to communicate using BLE_LLD between 2 boards,
in BLE Radio format not BLE Stack protocol.
- BLE_LLD_Pressbutton can use 2 terminal to display communication between 2 boards.
+ BLE_LLD_Pressbutton can use 2 terminals to display communication between 2 boards.
BLE_LLD_Pressbutton can be used with BLE_LLD_Lowpower.
But Appli is based to show in a very simple way a communication between 2 boards:
It is based on pressing button and blinking answer
@@ -33,8 +33,15 @@ How to make blinking LED between 2 STM32WB15xx boards by pressing buttons.
Lowest Layer also called Low Level or LL
It is just over the Hardware and Radio Layer.
It contains all the API to Set/Configure/Initialize all the parameters for Sending/receiving BLE Radio format packet data
+ Over LL layer there is HAL level
+ It contains a reduced number of API to Send/Receive BLE Radio format packet with predefined parameters
+ It works by calling a set of LL API
+ It make simple and fast to Send/Receive Packet
+ But It does allow the user to change all the Radio parameters
-@note ble_lld module contains LL API
+@note LL is for user that want to customize the Radio and BLE parameters, it is more complex to implement
+ HAL is for user that want to Send/Receive in a very simple way less complex, without configuring LL
+ ble_lld module contains LLD API HAL and LL API
app_ble_lld module contains Transport Layer Command call from CPU1 to CPU2 + Buffer management + IT Radio management from CPU2
@par Keywords
@@ -44,13 +51,10 @@ BLE_LLD, Connectivity, BLE, LLD, IPCC, HAL, Dual core, send and receive Packet
@par Directory contents
- BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.h Header for app_ble_lld.c module
- - BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.h Header for ble_lld.c module
- - BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld_private.h Header for ble_lld private module
+ - BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.h Header for Pressbutton Application pressbutton_app.c module
- BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/tl_dbg_conf.h Header for ble_lld debug module
- - BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.h Header for ring buffer.c module
- BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/app_ble_lld.c contains TL management and Buffer for BLE LLD Application
- - BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ble_lld.c contains LL and HAL API
- - BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/ring_buffer.c contains ring buffer API
+ - BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/App/pressbutton_app.c Pressbutton program
- BLE_LLD/BLE_LLD_Pressbutton/STM32_WPAN/Target/hw_ipcc.c IPCC Driver
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/app_common.h Header for all modules with common definition
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/app_conf.h Parameters configuration file of the application
@@ -58,7 +62,6 @@ BLE_LLD, Connectivity, BLE, LLD, IPCC, HAL, Dual core, send and receive Packet
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/gpio_lld.h Parameters for gpio configuration file of the application
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/hw_conf.h Configuration file of the HW
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/hw_if.h Configuration file of the HW
- - BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/pressbutton_app.h Header for Pressbutton Application pressbutton_app.c module
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/main.h Header for main.c module
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm_logging.h Header for stm_logging.c module
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm32_lpm_if.h Header for stm32_lpm_if.c module
@@ -66,10 +69,9 @@ BLE_LLD, Connectivity, BLE, LLD, IPCC, HAL, Dual core, send and receive Packet
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/stm32wbxx_it.h Interrupt handlers header file
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/utilities_conf.h Configuration file of the utilities
- BLE_LLD/BLE_LLD_Pressbutton/Core/Inc/nucleo_wb15cc_conf.h NUCLEO-WB15CC board configuration file
- - BLE_LLD/BLE_LLD_Pressbutton/Core/Src/app_entry.c Initialization of the application
+ - BLE_LLD/BLE_LLD_Pressbutton/Core/Src/app_entry.c Initialization of the application
- BLE_LLD/BLE_LLD_Pressbutton/Core/Src/gpio_lld.c GPIO for application
- - BLE_LLD/BLE_LLD_Pressbutton/Core/Src/hw_uart.c UART Driver
- - BLE_LLD/BLE_LLD_Pressbutton/Core/Src/pressbutton_app.c Pressbutton program
+ - BLE_LLD/BLE_LLD_Pressbutton/Core/Src/hw_uart.c UART Driver
- BLE_LLD/BLE_LLD_Pressbutton/Core/Src/main.c Main program
- BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm_logging.c Logging for application
- BLE_LLD/BLE_LLD_Pressbutton/Core/Src/stm32_lpm_if.c Low Power Manager Interface
@@ -104,7 +106,7 @@ BLE_LLD, Connectivity, BLE, LLD, IPCC, HAL, Dual core, send and receive Packet
@par How to use it ?
In order to make the program work, you must do the following:
- - Connect 2 NUCLEO-WB15CC boards to your PC
+ - Connect 1 NUCLEO-WB15CC board to your PC
- Open your preferred toolchain
- Rebuild all files and load your image into one target memory
- Rebuild all files of BLE_LLD/BLE_LLD_Pressbutton application
@@ -112,49 +114,31 @@ In order to make the program work, you must do the following:
+ load stm32wb1x_BLE_LLD_fw.bin
- Run the application
-BLE_LLD_Pressbutton used only LL API for Send/receive by pressing SW1
+BLE_LLD_Pressbutton used only HAL API for Send/Receive
-If you want to control this application, you can directly press buttons
+If you want to control this application, you can press buttons
In this order and described into main.c:
-After power On or Reset (ALL the LED are OFF)
+After power On or Reset (ALL the LED are OFF) all the Boards are in Received mode
- 1) Press SW2 or SW3 to Init => GREEN and RED LED becomes ON after Init
- LL API : BLUE LED is OFF
- - BLE_LLD_Init(HS_STARTUP_TIME, 1, BLE_LLD_hot_ana_config_table, ENABLE);
+ 1) Press button SW on first board to interrupt Received mode and Send LED number to second board:
+ -SW Number 1 (SW1) for LED Number 1 (LED1)
+ -SW Number 2 (SW2) for LED Number 2 (LED2)
+ -SW Number 3 (SW3) for LED Number 3 (LED3)
- To send a Packet go to 2)
- or
- To receive a Packet go to 3)
-
- 2) Press SW2 for Send 500 Chained Packets ===> GREEN is switched off during TX
- LL API : BLUE LED is OFF
- - BLE_LLD_MakeActionPacketPending(); // after setting Packet is pending and start TX after TIMEOUT IT
+ 2) When Second board Receive LED number:
+ -LED1 : LED1 is Toggling
+ "Led 1 is Toggling" is print
+ -LED2 : LED2 is Toggling
+ "Led 2 is Toggling" is print
+ -LED3 : LED3 is Toggling
+ "Led 3 is Toggling" is print
- or
-
- 3) Press SW3 for receiving 400 Packets (HAL) and 500 Packets (LL) ===> RED is switched off during RX
- LL API : BLUE LED is OFF
- - BLE_LLD_MakeActionPacketPending(); // after setting Packet is pending and start RX after TIMEOUT IT
-
-
- 4) Press SW1 (Init must be performed after)
- Toggle BLUE LED
- Step 1) to re-start sequence
-
-
-
-When one board Send : RED LED is ON
-When one board Receive: GREEN LED is ON
+ 3) To Switch off the LED press Reset or press the SW Number corresponding of the LED that is ON
-When one board Send and other Receive and communicates with ACK,
-Sending board GREEN LED toggle (Terminal shows the TX with RX Ack communication)
-Receiving board RED LED toggle (Terminal shows the RX with TX Ack communication)
-
-At the END GREEN and RED LED are ON (Terminal shows the final number of TX/RX)
Serial Port Setup TERMINAL
Baud Rate:115200 / Data:8 bits / Parity:none / Stop:1bit / Flow Control:none
* <h3><center>&copy; COPYRIGHT STMicroelectronics</center></h3>
- */
+ */ \ No newline at end of file