diff options
Diffstat (limited to 'Projects/NUCLEO-WB15CC/Applications/BLE_LLD/BLE_LLD_Pressbutton')
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>© 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>© Copyright (c) 2019 STMicroelectronics. + * <h2><center>© 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>© Copyright (c) 2019 STMicroelectronics. + * <h2><center>© 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><Project Info></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>© 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>© 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>© 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>© 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(¶m[0], &devId, 4 ); - memcpy(¶m[4], &revId, 4 ); - LldTestsInitStatus = SHCI_C2_BLE_LLD_Init(8, param); + /* Send start cmd to M0 (with device and revision ID as parameters */ + memcpy(¶m[0], &devId, sizeof(devId)); + memcpy(¶m[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>© 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>© 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>© 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>© 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>© 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>© 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>© COPYRIGHT STMicroelectronics</center></h3> - */ + */
\ No newline at end of file |