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/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent_Init/Src/main.c')
-rw-r--r--Projects/P-NUCLEO-WB55.Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent_Init/Src/main.c331
1 files changed, 331 insertions, 0 deletions
diff --git a/Projects/P-NUCLEO-WB55.Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent_Init/Src/main.c b/Projects/P-NUCLEO-WB55.Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent_Init/Src/main.c
new file mode 100644
index 000000000..aaef778fa
--- /dev/null
+++ b/Projects/P-NUCLEO-WB55.Nucleo/Examples_LL/WWDG/WWDG_RefreshUntilUserEvent_Init/Src/main.c
@@ -0,0 +1,331 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file Examples_LL/WWDG/WWDG_RefreshUntilUserEvent_Init/Src/main.c
+ * @author MCD Application Team
+ * @brief This example describes how to configure WWDG down-counter (with Window)
+ * using the STM32WBxx WWDG LL API.
+ * Peripheral initialization done using LL unitary services functions.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
+ * All rights reserved.</center></h2>
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN PTD */
+
+/* USER CODE END PTD */
+
+/* Private define ------------------------------------------------------------*/
+/* USER CODE BEGIN PD */
+
+/* USER CODE END PD */
+
+/* Private macro -------------------------------------------------------------*/
+/* USER CODE BEGIN PM */
+
+/* USER CODE END PM */
+
+/* Private variables ---------------------------------------------------------*/
+
+/* USER CODE BEGIN PV */
+static __IO uint8_t KeyPressed = 0;
+/* USER CODE END PV */
+
+/* Private function prototypes -----------------------------------------------*/
+void SystemClock_Config(void);
+static void MX_GPIO_Init(void);
+static void MX_WWDG_Init(void);
+/* USER CODE BEGIN PFP */
+void UserButton_Callback(void);
+void Check_WWDG_Reset(void);
+void LED_On(void);
+/* USER CODE END PFP */
+
+/* Private user code ---------------------------------------------------------*/
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/**
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void)
+{
+ /* USER CODE BEGIN 1 */
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+
+ NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
+
+ /* System interrupt init*/
+
+ /* USER CODE BEGIN Init */
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* USER CODE BEGIN SysInit */
+
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_WWDG_Init();
+ /* USER CODE BEGIN 2 */
+
+ /* USER CODE END 2 */
+
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1)
+ {
+ if (1 != KeyPressed)
+ {
+ /* Refresh WWDG Downcounter to initial value ~2s*/
+ LL_WWDG_SetCounter(WWDG, 0X7E);
+
+ LL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
+ LL_mDelay(LED_BLINK_FAST);
+ }
+ /* USER CODE END WHILE */
+
+ /* USER CODE BEGIN 3 */
+ }
+ /* USER CODE END 3 */
+}
+
+/**
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void)
+{
+ /* HSI configuration and activation */
+ LL_RCC_HSI_Enable();
+ while(LL_RCC_HSI_IsReady() != 1)
+ {
+ }
+
+ /* Sysclk activation on the HSI */
+ /* Set CPU1 prescaler*/
+ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_8);
+
+ /* Set CPU2 prescaler*/
+ LL_C2_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_8);
+
+ LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);
+ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI)
+ {
+ }
+
+ /* Set AHB SHARED prescaler*/
+ LL_RCC_SetAHB4Prescaler(LL_RCC_SYSCLK_DIV_1);
+
+ /* Set APB1 prescaler*/
+ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
+
+ /* Set APB2 prescaler*/
+ LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
+
+ LL_Init1msTick(2000000);
+
+ /* Update CMSIS variable (which can be updated also through SystemCoreClockUpdate function) */
+ LL_SetSystemCoreClock(2000000);
+ /* USER CODE BEGIN Smps */
+
+ /* USER CODE END Smps */
+}
+
+/**
+ * @brief WWDG Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_WWDG_Init(void)
+{
+
+ /* USER CODE BEGIN WWDG_Init 0 */
+
+ /* Check if the system has resumed from WWDG reset*/
+ Check_WWDG_Reset();
+
+ /* USER CODE END WWDG_Init 0 */
+
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_WWDG);
+
+ /* USER CODE BEGIN WWDG_Init 1 */
+
+ /* Configure WWDG */
+
+ /* Refresh WWDG before activate it */
+ /* Activate WWDG */
+ /* set prescaler to have a rollover each about ~2s */
+ /* set window value to same value (~2s) as downcounter in order to ba able to refresh the WWDG almost immediately */
+
+ /* USER CODE END WWDG_Init 1 */
+ LL_WWDG_SetCounter(WWDG, 126);
+ LL_WWDG_Enable(WWDG);
+ LL_WWDG_SetPrescaler(WWDG, LL_WWDG_PRESCALER_8);
+ LL_WWDG_SetWindow(WWDG, 126);
+ /* USER CODE BEGIN WWDG_Init 2 */
+
+ /* USER CODE END WWDG_Init 2 */
+
+}
+
+/**
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void)
+{
+ LL_EXTI_InitTypeDef EXTI_InitStruct = {0};
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ /* GPIO Ports Clock Enable */
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);
+ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
+
+ /**/
+ LL_GPIO_ResetOutputPin(LED2_GPIO_Port, LED2_Pin);
+
+ /**/
+ LL_SYSCFG_SetEXTISource(LL_SYSCFG_EXTI_PORTC, LL_SYSCFG_EXTI_LINE4);
+
+ /**/
+ EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_4;
+ EXTI_InitStruct.Line_32_63 = LL_EXTI_LINE_NONE;
+ EXTI_InitStruct.LineCommand = ENABLE;
+ EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
+ EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_FALLING;
+ LL_EXTI_Init(&EXTI_InitStruct);
+
+ /**/
+ LL_GPIO_SetPinPull(USER_BUTTON_GPIO_Port, USER_BUTTON_Pin, LL_GPIO_PULL_UP);
+
+ /**/
+ LL_GPIO_SetPinMode(USER_BUTTON_GPIO_Port, USER_BUTTON_Pin, LL_GPIO_MODE_INPUT);
+
+ /**/
+ GPIO_InitStruct.Pin = LED2_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ LL_GPIO_Init(LED2_GPIO_Port, &GPIO_InitStruct);
+
+ /* EXTI interrupt init*/
+ NVIC_SetPriority(EXTI4_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),3, 0));
+ NVIC_EnableIRQ(EXTI4_IRQn);
+
+}
+
+/* USER CODE BEGIN 4 */
+
+/**
+ * @brief This function check if the system has resumed from WWDG reset
+ * @param None
+ * @retval None
+ */
+void Check_WWDG_Reset(void)
+{
+ if (LL_RCC_IsActiveFlag_WWDGRST())
+ {
+ /* clear WWDG reset flag */
+ LL_RCC_ClearResetFlags();
+
+ /* turn Led on and wait for user event to perform example again */
+ LED_On();
+
+ while(KeyPressed != 1)
+ {
+ }
+
+ /* Reset KeyPressed value */
+ KeyPressed = 0;
+ }
+}
+
+
+/**
+ * @brief Turn-on LED2.
+ * @param None
+ * @retval None
+ */
+void LED_On(void)
+{
+ /* Turn LED2 on */
+ LL_GPIO_SetOutputPin(LED2_GPIO_Port, LED2_Pin);
+}
+
+
+/******************************************************************************/
+/* USER IRQ HANDLER TREATMENT */
+/******************************************************************************/
+/**
+ * @brief Function to manage IRQ Handler
+ * @param None
+ * @retval None
+ */
+void UserButton_Callback(void)
+{
+ KeyPressed = 1;
+}
+/* USER CODE END 4 */
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+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 */
+}
+
+#ifdef USE_FULL_ASSERT
+/**
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+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) */
+ /* USER CODE END 6 */
+}
+#endif /* USE_FULL_ASSERT */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/