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

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Src/main.c')
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Src/main.c283
1 files changed, 55 insertions, 228 deletions
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Src/main.c b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Src/main.c
index 39631fd1c..9bae7ef89 100644
--- a/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Src/main.c
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_HeartRateFreeRTOS/Core/Src/main.c
@@ -43,10 +43,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
-#include "stm32_lpm.h"
-#include "dbg_trace.h"
-#include "hw_conf.h"
-#include "otp.h"
+
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@@ -72,6 +69,8 @@ UART_HandleTypeDef huart1;
DMA_HandleTypeDef hdma_lpuart1_tx;
DMA_HandleTypeDef hdma_usart1_tx;
+RNG_HandleTypeDef hrng;
+
RTC_HandleTypeDef hrtc;
/* Definitions for defaultTask */
@@ -92,15 +91,11 @@ static void MX_DMA_Init(void);
static void MX_RF_Init(void);
static void MX_RTC_Init(void);
static void MX_IPCC_Init(void);
+static void MX_RNG_Init(void);
void StartDefaultTask(void *argument);
/* USER CODE BEGIN PFP */
-void PeriphClock_Config(void);
-static void Reset_Device( void );
-static void Reset_IPCC( void );
-static void Reset_BackupDomain( void );
-static void Init_Exti( void );
-static void Config_HSE(void);
+
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
@@ -116,22 +111,17 @@ int main(void)
{
/* USER CODE BEGIN 1 */
- /**
- * The OPTVERR flag is wrongly set at power on
- * It shall be cleared before using any HAL_FLASH_xxx() api
- */
- __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
-
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
+ /* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */
+ MX_APPE_Config();
/* USER CODE BEGIN Init */
- Reset_Device();
- Config_HSE();
+
/* USER CODE END Init */
/* Configure the system clock */
@@ -141,8 +131,7 @@ int main(void)
MX_IPCC_Init();
/* USER CODE BEGIN SysInit */
- PeriphClock_Config();
- Init_Exti(); /**< Configure the system Power Mode */
+
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
@@ -150,6 +139,7 @@ int main(void)
MX_DMA_Init();
MX_RF_Init();
MX_RTC_Init();
+ MX_RNG_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
@@ -186,15 +176,15 @@ int main(void)
/* USER CODE END RTOS_EVENTS */
/* Init code for STM32_WPAN */
- APPE_Init();
+ MX_APPE_Init();
/* Start scheduler */
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
- while (1)
- {
+ while(1)
+ {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
@@ -222,11 +212,12 @@ void SystemClock_Config(void)
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE
- |RCC_OSCILLATORTYPE_LSE;
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSI
+ |RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+ RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
@@ -253,9 +244,11 @@ void SystemClock_Config(void)
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS|RCC_PERIPHCLK_RFWAKEUP
|RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1
- |RCC_PERIPHCLK_LPUART1;
+ |RCC_PERIPHCLK_LPUART1|RCC_PERIPHCLK_CLK48SEL
+ |RCC_PERIPHCLK_RNG;
PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1;
+ PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
PeriphClkInitStruct.RFWakeUpClockSelection = RCC_RFWKPCLKSOURCE_LSE;
PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSE;
@@ -266,19 +259,6 @@ void SystemClock_Config(void)
}
/* USER CODE BEGIN Smps */
-#if (CFG_USE_SMPS != 0)
- /**
- * Configure and enable SMPS
- *
- * The SMPS configuration is not yet supported by CubeMx
- * when SMPS output voltage is set to 1.4V, the RF output power is limited to 3.7dBm
- * the SMPS output voltage shall be increased for higher RF output power
- */
- LL_PWR_SMPS_SetStartupCurrent(LL_PWR_SMPS_STARTUP_CURRENT_80MA);
- LL_PWR_SMPS_SetOutputVoltageLevel(LL_PWR_SMPS_OUTPUT_VOLTAGE_1V40);
- LL_PWR_SMPS_Enable();
-#endif
-
/* USER CODE END Smps */
}
@@ -426,6 +406,33 @@ static void MX_RF_Init(void)
}
/**
+ * @brief RNG Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RNG_Init(void)
+{
+
+ /* USER CODE BEGIN RNG_Init 0 */
+
+ /* USER CODE END RNG_Init 0 */
+
+ /* USER CODE BEGIN RNG_Init 1 */
+
+ /* USER CODE END RNG_Init 1 */
+ hrng.Instance = RNG;
+ hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
+ if (HAL_RNG_Init(&hrng) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN RNG_Init 2 */
+
+ /* USER CODE END RNG_Init 2 */
+
+}
+
+/**
* @brief RTC Initialization Function
* @param None
* @retval None
@@ -454,14 +461,14 @@ static void MX_RTC_Init(void)
{
Error_Handler();
}
+ /** Enable the WakeUp
+ */
+ if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0, RTC_WAKEUPCLOCK_RTCCLK_DIV16) != HAL_OK)
+ {
+ Error_Handler();
+ }
/* USER CODE BEGIN RTC_Init 2 */
- /* Disable RTC registers write protection */
- LL_RTC_DisableWriteProtection(RTC);
-
- LL_RTC_WAKEUP_SetClock(RTC, CFG_RTC_WUCKSEL_DIVIDER);
- /* Enable RTC registers write protection */
- LL_RTC_EnableWriteProtection(RTC);
/* USER CODE END RTC_Init 2 */
}
@@ -504,186 +511,6 @@ static void MX_GPIO_Init(void)
/* USER CODE BEGIN 4 */
-void PeriphClock_Config(void)
-{
- #if (CFG_USB_INTERFACE_ENABLE != 0)
- RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = { 0 };
- RCC_CRSInitTypeDef RCC_CRSInitStruct = { 0 };
-
- /**
- * This prevents the CPU2 to disable the HSI48 oscillator when
- * it does not use anymore the RNG IP
- */
- LL_HSEM_1StepLock( HSEM, 5 );
-
- LL_RCC_HSI48_Enable();
-
- while(!LL_RCC_HSI48_IsReady());
-
- /* Select HSI48 as USB clock source */
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB;
- PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
- HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
-
- /*Configure the clock recovery system (CRS)**********************************/
-
- /* Enable CRS Clock */
- __HAL_RCC_CRS_CLK_ENABLE();
-
- /* Default Synchro Signal division factor (not divided) */
- RCC_CRSInitStruct.Prescaler = RCC_CRS_SYNC_DIV1;
-
- /* Set the SYNCSRC[1:0] bits according to CRS_Source value */
- RCC_CRSInitStruct.Source = RCC_CRS_SYNC_SOURCE_USB;
-
- /* HSI48 is synchronized with USB SOF at 1KHz rate */
- RCC_CRSInitStruct.ReloadValue = RCC_CRS_RELOADVALUE_DEFAULT;
- RCC_CRSInitStruct.ErrorLimitValue = RCC_CRS_ERRORLIMIT_DEFAULT;
-
- RCC_CRSInitStruct.Polarity = RCC_CRS_SYNC_POLARITY_RISING;
-
- /* Set the TRIM[5:0] to the default value*/
- RCC_CRSInitStruct.HSI48CalibrationValue = RCC_CRS_HSI48CALIBRATION_DEFAULT;
-
- /* Start automatic synchronization */
- HAL_RCCEx_CRSConfig(&RCC_CRSInitStruct);
-#endif
-
- return;
-}
-/*************************************************************
- *
- * LOCAL FUNCTIONS
- *
- *************************************************************/
-
-static void Config_HSE(void)
-{
- OTP_ID0_t * p_otp;
-
- /**
- * Read HSE_Tuning from OTP
- */
- p_otp = (OTP_ID0_t *) OTP_Read(0);
- if (p_otp)
- {
- LL_RCC_HSE_SetCapacitorTuning(p_otp->hse_tuning);
- }
-
- return;
-}
-
-
-static void Reset_Device( void )
-{
-#if ( CFG_HW_RESET_BY_FW == 1 )
- Reset_BackupDomain();
-
- Reset_IPCC();
-#endif
-
- return;
-}
-
-static void Reset_IPCC( void )
-{
- LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_IPCC);
-
- LL_C1_IPCC_ClearFlag_CHx(
- IPCC,
- LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
- | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
-
- LL_C2_IPCC_ClearFlag_CHx(
- IPCC,
- LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
- | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
-
- LL_C1_IPCC_DisableTransmitChannel(
- IPCC,
- LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
- | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
-
- LL_C2_IPCC_DisableTransmitChannel(
- IPCC,
- LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
- | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
-
- LL_C1_IPCC_DisableReceiveChannel(
- IPCC,
- LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
- | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
-
- LL_C2_IPCC_DisableReceiveChannel(
- IPCC,
- LL_IPCC_CHANNEL_1 | LL_IPCC_CHANNEL_2 | LL_IPCC_CHANNEL_3 | LL_IPCC_CHANNEL_4
- | LL_IPCC_CHANNEL_5 | LL_IPCC_CHANNEL_6);
-
- return;
-}
-
-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;
-}
-
-static void Init_Exti( void )
-{
- /**< Disable all wakeup interrupt on CPU1 except IPCC(36), HSEM(38) */
- LL_EXTI_DisableIT_0_31(~0);
- LL_EXTI_DisableIT_32_63( (~0) & (~(LL_EXTI_LINE_36 | LL_EXTI_LINE_38)) );
-
- return;
-}
-
-/*************************************************************
- *
- * WRAP FUNCTIONS
- *
- *************************************************************/
-void HAL_Delay(uint32_t Delay)
-{
- uint32_t tickstart = HAL_GetTick();
- uint32_t wait = Delay;
-
- /* Add a freq to guarantee minimum wait */
- if (wait < HAL_MAX_DELAY)
- {
- wait += HAL_GetTickFreq();
- }
-
- while ((HAL_GetTick() - tickstart) < wait)
- {
- /************************************************************************************
- * ENTER SLEEP MODE
- ***********************************************************************************/
- LL_LPM_EnableSleep( ); /**< Clear SLEEPDEEP bit of Cortex System Control Register */
-
- /**
- * This option is used to ensure that store operations are completed
- */
- #if defined ( __CC_ARM)
- __force_stores();
- #endif
-
- __WFI( );
- }
-}
-
/* USER CODE END 4 */
/* USER CODE BEGIN Header_StartDefaultTask */
@@ -704,7 +531,7 @@ void StartDefaultTask(void *argument)
/* USER CODE END 5 */
}
- /**
+/**
* @brief Period elapsed callback in non blocking mode
* @note This function is called when TIM17 interrupt took place, inside
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
@@ -733,7 +560,7 @@ void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
-
+
/* USER CODE END Error_Handler_Debug */
}
@@ -749,7 +576,7 @@ void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* 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) */
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */