19 changed files with 20241 additions and 8 deletions
			
			
		| @ -0,0 +1,58 @@ | |||||||
|  | /* USER CODE BEGIN Header */ | ||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    adc.h | ||||||
|  |   * @brief   This file contains all the function prototypes for | ||||||
|  |   *          the adc.c file | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2023 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | /* USER CODE END Header */ | ||||||
|  | /* Define to prevent recursive inclusion -------------------------------------*/ | ||||||
|  | #ifndef __ADC_H__ | ||||||
|  | #define __ADC_H__ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "main.h" | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Includes */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END Includes */ | ||||||
|  | 
 | ||||||
|  | extern ADC_HandleTypeDef hadc1; | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Private defines */ | ||||||
|  | #define ADC_CHANS (3u) | ||||||
|  | enum adc_chans { | ||||||
|  | 	adc_soil, | ||||||
|  | 	adc_vbat, | ||||||
|  | 	adc_vrefint | ||||||
|  | }; | ||||||
|  | extern uint16_t padc[ADC_CHANS]; | ||||||
|  | /* USER CODE END Private defines */ | ||||||
|  | 
 | ||||||
|  | void MX_ADC1_Init(void); | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Prototypes */ | ||||||
|  | int32_t adc_apply_refint(uint16_t sample); | ||||||
|  | /* USER CODE END Prototypes */ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* __ADC_H__ */ | ||||||
|  | 
 | ||||||
| @ -0,0 +1,52 @@ | |||||||
|  | /* USER CODE BEGIN Header */ | ||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    dma.h | ||||||
|  |   * @brief   This file contains all the function prototypes for | ||||||
|  |   *          the dma.c file | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2023 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | /* USER CODE END Header */ | ||||||
|  | /* Define to prevent recursive inclusion -------------------------------------*/ | ||||||
|  | #ifndef __DMA_H__ | ||||||
|  | #define __DMA_H__ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "main.h" | ||||||
|  | 
 | ||||||
|  | /* DMA memory to memory transfer handles -------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Includes */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END Includes */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Private defines */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END Private defines */ | ||||||
|  | 
 | ||||||
|  | void MX_DMA_Init(void); | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Prototypes */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END Prototypes */ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* __DMA_H__ */ | ||||||
|  | 
 | ||||||
| @ -0,0 +1,52 @@ | |||||||
|  | /* USER CODE BEGIN Header */ | ||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    rtc.h | ||||||
|  |   * @brief   This file contains all the function prototypes for | ||||||
|  |   *          the rtc.c file | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2023 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | /* USER CODE END Header */ | ||||||
|  | /* Define to prevent recursive inclusion -------------------------------------*/ | ||||||
|  | #ifndef __RTC_H__ | ||||||
|  | #define __RTC_H__ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "main.h" | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Includes */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END Includes */ | ||||||
|  | 
 | ||||||
|  | extern RTC_HandleTypeDef hrtc; | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Private defines */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END Private defines */ | ||||||
|  | 
 | ||||||
|  | void MX_RTC_Init(void); | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN Prototypes */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END Prototypes */ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* __RTC_H__ */ | ||||||
|  | 
 | ||||||
| @ -0,0 +1,186 @@ | |||||||
|  | /* USER CODE BEGIN Header */ | ||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    adc.c | ||||||
|  |   * @brief   This file provides code for the configuration | ||||||
|  |   *          of the ADC instances. | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2023 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | /* USER CODE END Header */ | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "adc.h" | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN 0 */ | ||||||
|  | const uint16_t *ADC_VREFIN_CAL_3V3_30C = (const uint16_t *) 0x1fff7a2a; | ||||||
|  | const uint16_t *ADC_TEMP_3V3_30C       = (const uint16_t *) 0x1fff7a2c; | ||||||
|  | const uint16_t *ADC_TEMP_3V3_110C      = (const uint16_t *) 0x1fff7a2e; | ||||||
|  | 
 | ||||||
|  | uint16_t padc[ADC_CHANS]; | ||||||
|  | /* USER CODE END 0 */ | ||||||
|  | 
 | ||||||
|  | ADC_HandleTypeDef hadc1; | ||||||
|  | DMA_HandleTypeDef hdma_adc1; | ||||||
|  | 
 | ||||||
|  | /* ADC1 init function */ | ||||||
|  | void MX_ADC1_Init(void) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |   /* USER CODE BEGIN ADC1_Init 0 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END ADC1_Init 0 */ | ||||||
|  | 
 | ||||||
|  |   ADC_ChannelConfTypeDef sConfig = {0}; | ||||||
|  | 
 | ||||||
|  |   /* USER CODE BEGIN ADC1_Init 1 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END ADC1_Init 1 */ | ||||||
|  | 
 | ||||||
|  |   /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
 | ||||||
|  |   */ | ||||||
|  |   hadc1.Instance = ADC1; | ||||||
|  |   hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; | ||||||
|  |   hadc1.Init.Resolution = ADC_RESOLUTION_12B; | ||||||
|  |   hadc1.Init.ScanConvMode = ENABLE; | ||||||
|  |   hadc1.Init.ContinuousConvMode = ENABLE; | ||||||
|  |   hadc1.Init.DiscontinuousConvMode = DISABLE; | ||||||
|  |   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; | ||||||
|  |   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; | ||||||
|  |   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; | ||||||
|  |   hadc1.Init.NbrOfConversion = 3; | ||||||
|  |   hadc1.Init.DMAContinuousRequests = ENABLE; | ||||||
|  |   hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV; | ||||||
|  |   if (HAL_ADC_Init(&hadc1) != HAL_OK) | ||||||
|  |   { | ||||||
|  |     Error_Handler(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
 | ||||||
|  |   */ | ||||||
|  |   sConfig.Channel = ADC_CHANNEL_0; | ||||||
|  |   sConfig.Rank = 1; | ||||||
|  |   sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; | ||||||
|  |   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) | ||||||
|  |   { | ||||||
|  |     Error_Handler(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
 | ||||||
|  |   */ | ||||||
|  |   sConfig.Channel = ADC_CHANNEL_VBAT; | ||||||
|  |   sConfig.Rank = 2; | ||||||
|  |   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) | ||||||
|  |   { | ||||||
|  |     Error_Handler(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
 | ||||||
|  |   */ | ||||||
|  |   sConfig.Channel = ADC_CHANNEL_VREFINT; | ||||||
|  |   sConfig.Rank = 3; | ||||||
|  |   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) | ||||||
|  |   { | ||||||
|  |     Error_Handler(); | ||||||
|  |   } | ||||||
|  |   /* USER CODE BEGIN ADC1_Init 2 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END ADC1_Init 2 */ | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |   GPIO_InitTypeDef GPIO_InitStruct = {0}; | ||||||
|  |   if(adcHandle->Instance==ADC1) | ||||||
|  |   { | ||||||
|  |   /* USER CODE BEGIN ADC1_MspInit 0 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END ADC1_MspInit 0 */ | ||||||
|  |     /* ADC1 clock enable */ | ||||||
|  |     __HAL_RCC_ADC1_CLK_ENABLE(); | ||||||
|  | 
 | ||||||
|  |     __HAL_RCC_GPIOA_CLK_ENABLE(); | ||||||
|  |     /**ADC1 GPIO Configuration
 | ||||||
|  |     PA0-WKUP     ------> ADC1_IN0 | ||||||
|  |     */ | ||||||
|  |     GPIO_InitStruct.Pin = SOIL_Pin; | ||||||
|  |     GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; | ||||||
|  |     GPIO_InitStruct.Pull = GPIO_NOPULL; | ||||||
|  |     HAL_GPIO_Init(SOIL_GPIO_Port, &GPIO_InitStruct); | ||||||
|  | 
 | ||||||
|  |     /* ADC1 DMA Init */ | ||||||
|  |     /* ADC1 Init */ | ||||||
|  |     hdma_adc1.Instance = DMA2_Stream0; | ||||||
|  |     hdma_adc1.Init.Channel = DMA_CHANNEL_0; | ||||||
|  |     hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; | ||||||
|  |     hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; | ||||||
|  |     hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; | ||||||
|  |     hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; | ||||||
|  |     hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; | ||||||
|  |     hdma_adc1.Init.Mode = DMA_CIRCULAR; | ||||||
|  |     hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; | ||||||
|  |     hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_ENABLE; | ||||||
|  |     hdma_adc1.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; | ||||||
|  |     hdma_adc1.Init.MemBurst = DMA_MBURST_SINGLE; | ||||||
|  |     hdma_adc1.Init.PeriphBurst = DMA_PBURST_SINGLE; | ||||||
|  |     if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) | ||||||
|  |     { | ||||||
|  |       Error_Handler(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1); | ||||||
|  | 
 | ||||||
|  |   /* USER CODE BEGIN ADC1_MspInit 1 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END ADC1_MspInit 1 */ | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |   if(adcHandle->Instance==ADC1) | ||||||
|  |   { | ||||||
|  |   /* USER CODE BEGIN ADC1_MspDeInit 0 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END ADC1_MspDeInit 0 */ | ||||||
|  |     /* Peripheral clock disable */ | ||||||
|  |     __HAL_RCC_ADC1_CLK_DISABLE(); | ||||||
|  | 
 | ||||||
|  |     /**ADC1 GPIO Configuration
 | ||||||
|  |     PA0-WKUP     ------> ADC1_IN0 | ||||||
|  |     */ | ||||||
|  |     HAL_GPIO_DeInit(SOIL_GPIO_Port, SOIL_Pin); | ||||||
|  | 
 | ||||||
|  |     /* ADC1 DMA DeInit */ | ||||||
|  |     HAL_DMA_DeInit(adcHandle->DMA_Handle); | ||||||
|  |   /* USER CODE BEGIN ADC1_MspDeInit 1 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END ADC1_MspDeInit 1 */ | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN 1 */ | ||||||
|  | int32_t adc_apply_refint(uint16_t sample) | ||||||
|  | { | ||||||
|  | 	int32_t x = sample; | ||||||
|  | 
 | ||||||
|  | #if (0)	/* FIXME: VREFINT is always reading about half of the calibration value! */ | ||||||
|  | 	x *= *ADC_VREFIN_CAL_3V3_30C; | ||||||
|  | 	/* do not allow a divide-by-zero */ | ||||||
|  | 	x /= padc[adc_vrefint] ? padc[adc_vrefint] : *ADC_VREFIN_CAL_3V3_30C; | ||||||
|  | #endif /* FIXME */ | ||||||
|  | 
 | ||||||
|  | 	return x; | ||||||
|  | } | ||||||
|  | /* USER CODE END 1 */ | ||||||
| @ -0,0 +1,55 @@ | |||||||
|  | /* USER CODE BEGIN Header */ | ||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    dma.c | ||||||
|  |   * @brief   This file provides code for the configuration | ||||||
|  |   *          of all the requested memory to memory DMA transfers. | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2023 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | /* USER CODE END Header */ | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "dma.h" | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN 0 */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END 0 */ | ||||||
|  | 
 | ||||||
|  | /*----------------------------------------------------------------------------*/ | ||||||
|  | /* Configure DMA                                                              */ | ||||||
|  | /*----------------------------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN 1 */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END 1 */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * Enable DMA controller clock | ||||||
|  |   */ | ||||||
|  | void MX_DMA_Init(void) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |   /* DMA controller clock enable */ | ||||||
|  |   __HAL_RCC_DMA2_CLK_ENABLE(); | ||||||
|  | 
 | ||||||
|  |   /* DMA interrupt init */ | ||||||
|  |   /* DMA2_Stream0_IRQn interrupt configuration */ | ||||||
|  |   HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0); | ||||||
|  |   HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN 2 */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END 2 */ | ||||||
|  | 
 | ||||||
| @ -0,0 +1,133 @@ | |||||||
|  | /* USER CODE BEGIN Header */ | ||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    rtc.c | ||||||
|  |   * @brief   This file provides code for the configuration | ||||||
|  |   *          of the RTC instances. | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2023 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | /* USER CODE END Header */ | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "rtc.h" | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN 0 */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END 0 */ | ||||||
|  | 
 | ||||||
|  | RTC_HandleTypeDef hrtc; | ||||||
|  | 
 | ||||||
|  | /* RTC init function */ | ||||||
|  | void MX_RTC_Init(void) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |   /* USER CODE BEGIN RTC_Init 0 */ | ||||||
|  | #if(0) | ||||||
|  |   /* USER CODE END RTC_Init 0 */ | ||||||
|  | 
 | ||||||
|  |   RTC_TimeTypeDef sTime = {0}; | ||||||
|  |   RTC_DateTypeDef sDate = {0}; | ||||||
|  | 
 | ||||||
|  |   /* USER CODE BEGIN RTC_Init 1 */ | ||||||
|  | #endif /* 0 */ | ||||||
|  |   /* USER CODE END RTC_Init 1 */ | ||||||
|  | 
 | ||||||
|  |   /** Initialize RTC Only
 | ||||||
|  |   */ | ||||||
|  |   hrtc.Instance = RTC; | ||||||
|  |   hrtc.Init.HourFormat = RTC_HOURFORMAT_24; | ||||||
|  |   hrtc.Init.AsynchPrediv = 127; | ||||||
|  |   hrtc.Init.SynchPrediv = 255; | ||||||
|  |   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; | ||||||
|  |   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; | ||||||
|  |   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; | ||||||
|  |   if (HAL_RTC_Init(&hrtc) != HAL_OK) | ||||||
|  |   { | ||||||
|  |     Error_Handler(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* USER CODE BEGIN Check_RTC_BKUP */ | ||||||
|  | #if(0) | ||||||
|  |   /* USER CODE END Check_RTC_BKUP */ | ||||||
|  | 
 | ||||||
|  |   /** Initialize RTC and set the Time and Date
 | ||||||
|  |   */ | ||||||
|  |   sTime.Hours = 0; | ||||||
|  |   sTime.Minutes = 0; | ||||||
|  |   sTime.Seconds = 0; | ||||||
|  |   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_ADD1H; | ||||||
|  |   sTime.StoreOperation = RTC_STOREOPERATION_RESET; | ||||||
|  |   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) | ||||||
|  |   { | ||||||
|  |     Error_Handler(); | ||||||
|  |   } | ||||||
|  |   sDate.WeekDay = RTC_WEEKDAY_MONDAY; | ||||||
|  |   sDate.Month = RTC_MONTH_JANUARY; | ||||||
|  |   sDate.Date = 1; | ||||||
|  |   sDate.Year = 0; | ||||||
|  | 
 | ||||||
|  |   if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) | ||||||
|  |   { | ||||||
|  |     Error_Handler(); | ||||||
|  |   } | ||||||
|  |   /* USER CODE BEGIN RTC_Init 2 */ | ||||||
|  | #endif /* 0 */ | ||||||
|  |   /* USER CODE END RTC_Init 2 */ | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; | ||||||
|  |   if(rtcHandle->Instance==RTC) | ||||||
|  |   { | ||||||
|  |   /* USER CODE BEGIN RTC_MspInit 0 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END RTC_MspInit 0 */ | ||||||
|  | 
 | ||||||
|  |   /** Initializes the peripherals clock
 | ||||||
|  |   */ | ||||||
|  |     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; | ||||||
|  |     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; | ||||||
|  |     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) | ||||||
|  |     { | ||||||
|  |       Error_Handler(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /* RTC clock enable */ | ||||||
|  |     __HAL_RCC_RTC_ENABLE(); | ||||||
|  |   /* USER CODE BEGIN RTC_MspInit 1 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END RTC_MspInit 1 */ | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void HAL_RTC_MspDeInit(RTC_HandleTypeDef* rtcHandle) | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  |   if(rtcHandle->Instance==RTC) | ||||||
|  |   { | ||||||
|  |   /* USER CODE BEGIN RTC_MspDeInit 0 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END RTC_MspDeInit 0 */ | ||||||
|  |     /* Peripheral clock disable */ | ||||||
|  |     __HAL_RCC_RTC_DISABLE(); | ||||||
|  |   /* USER CODE BEGIN RTC_MspDeInit 1 */ | ||||||
|  | 
 | ||||||
|  |   /* USER CODE END RTC_MspDeInit 1 */ | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* USER CODE BEGIN 1 */ | ||||||
|  | 
 | ||||||
|  | /* USER CODE END 1 */ | ||||||
| @ -0,0 +1,898 @@ | |||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    stm32f4xx_hal_adc.h | ||||||
|  |   * @author  MCD Application Team | ||||||
|  |   * @brief   Header file containing functions prototypes of ADC HAL library. | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2017 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Define to prevent recursive inclusion -------------------------------------*/ | ||||||
|  | #ifndef __STM32F4xx_ADC_H | ||||||
|  | #define __STM32F4xx_ADC_H | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  |  extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "stm32f4xx_hal_def.h" | ||||||
|  | 
 | ||||||
|  | /* Include low level driver */ | ||||||
|  | #include "stm32f4xx_ll_adc.h" | ||||||
|  | 
 | ||||||
|  | /** @addtogroup STM32F4xx_HAL_Driver
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /* Exported types ------------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADC_Exported_Types ADC Exported Types
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** 
 | ||||||
|  |   * @brief  Structure definition of ADC and regular group initialization 
 | ||||||
|  |   * @note   Parameters of this structure are shared within 2 scopes: | ||||||
|  |   *          - Scope entire ADC (affects regular and injected groups): ClockPrescaler, Resolution, ScanConvMode, DataAlign, ScanConvMode, EOCSelection, LowPowerAutoWait, LowPowerAutoPowerOff, ChannelsBank. | ||||||
|  |   *          - Scope regular group: ContinuousConvMode, NbrOfConversion, DiscontinuousConvMode, NbrOfDiscConversion, ExternalTrigConvEdge, ExternalTrigConv. | ||||||
|  |   * @note   The setting of these parameters with function HAL_ADC_Init() is conditioned to ADC state. | ||||||
|  |   *         ADC state can be either: | ||||||
|  |   *          - For all parameters: ADC disabled | ||||||
|  |   *          - For all parameters except 'Resolution', 'ScanConvMode', 'DiscontinuousConvMode', 'NbrOfDiscConversion' : ADC enabled without conversion on going on regular group. | ||||||
|  |   *          - For parameters 'ExternalTrigConv' and 'ExternalTrigConvEdge': ADC enabled, even with conversion on going. | ||||||
|  |   *         If ADC is not in the appropriate state to modify some parameters, these parameters setting is bypassed | ||||||
|  |   *         without error reporting (as it can be the expected behaviour in case of intended action to update another parameter (which fulfills the ADC state condition) on the fly). | ||||||
|  |   */ | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   uint32_t ClockPrescaler;               /*!< Select ADC clock prescaler. The clock is common for 
 | ||||||
|  |                                               all the ADCs. | ||||||
|  |                                               This parameter can be a value of @ref ADC_ClockPrescaler */ | ||||||
|  |   uint32_t Resolution;                   /*!< Configures the ADC resolution.
 | ||||||
|  |                                               This parameter can be a value of @ref ADC_Resolution */ | ||||||
|  |   uint32_t DataAlign;                    /*!< Specifies ADC data alignment to right (MSB on register bit 11 and LSB on register bit 0) (default setting)
 | ||||||
|  |                                               or to left (if regular group: MSB on register bit 15 and LSB on register bit 4, if injected group (MSB kept as signed value due to potential negative value after offset application): MSB on register bit 14 and LSB on register bit 3). | ||||||
|  |                                               This parameter can be a value of @ref ADC_Data_align */ | ||||||
|  |   uint32_t ScanConvMode;                 /*!< Configures the sequencer of regular and injected groups.
 | ||||||
|  |                                               This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts. | ||||||
|  |                                               If disabled: Conversion is performed in single mode (one channel converted, the one defined in rank 1). | ||||||
|  |                                                            Parameters 'NbrOfConversion' and 'InjectedNbrOfConversion' are discarded (equivalent to set to 1). | ||||||
|  |                                               If enabled:  Conversions are performed in sequence mode (multiple ranks defined by 'NbrOfConversion'/'InjectedNbrOfConversion' and each channel rank). | ||||||
|  |                                                            Scan direction is upward: from rank1 to rank 'n'. | ||||||
|  |                                               This parameter can be set to ENABLE or DISABLE */ | ||||||
|  |   uint32_t EOCSelection;                 /*!< Specifies what EOC (End Of Conversion) flag is used for conversion by polling and interruption: end of conversion of each rank or complete sequence.
 | ||||||
|  |                                               This parameter can be a value of @ref ADC_EOCSelection. | ||||||
|  |                                               Note: For injected group, end of conversion (flag&IT) is raised only at the end of the sequence. | ||||||
|  |                                                     Therefore, if end of conversion is set to end of each conversion, injected group should not be used with interruption (HAL_ADCEx_InjectedStart_IT) | ||||||
|  |                                                     or polling (HAL_ADCEx_InjectedStart and HAL_ADCEx_InjectedPollForConversion). By the way, polling is still possible since driver will use an estimated timing for end of injected conversion. | ||||||
|  |                                               Note: If overrun feature is intended to be used, use ADC in mode 'interruption' (function HAL_ADC_Start_IT() ) with parameter EOCSelection set to end of each conversion or in mode 'transfer by DMA' (function HAL_ADC_Start_DMA()). | ||||||
|  |                                                     If overrun feature is intended to be bypassed, use ADC in mode 'polling' or 'interruption' with parameter EOCSelection must be set to end of sequence */ | ||||||
|  |   FunctionalState ContinuousConvMode;    /*!< Specifies whether the conversion is performed in single mode (one conversion) or continuous mode for regular group,
 | ||||||
|  |                                               after the selected trigger occurred (software start or external trigger). | ||||||
|  |                                               This parameter can be set to ENABLE or DISABLE. */ | ||||||
|  |   uint32_t NbrOfConversion;              /*!< Specifies the number of ranks that will be converted within the regular group sequencer.
 | ||||||
|  |                                               To use regular group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled. | ||||||
|  |                                               This parameter must be a number between Min_Data = 1 and Max_Data = 16. */ | ||||||
|  |   FunctionalState DiscontinuousConvMode; /*!< Specifies whether the conversions sequence of regular group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).
 | ||||||
|  |                                               Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded. | ||||||
|  |                                               Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded. | ||||||
|  |                                               This parameter can be set to ENABLE or DISABLE. */ | ||||||
|  |   uint32_t NbrOfDiscConversion;          /*!< Specifies the number of discontinuous conversions in which the  main sequence of regular group (parameter NbrOfConversion) will be subdivided.
 | ||||||
|  |                                               If parameter 'DiscontinuousConvMode' is disabled, this parameter is discarded. | ||||||
|  |                                               This parameter must be a number between Min_Data = 1 and Max_Data = 8. */ | ||||||
|  |   uint32_t ExternalTrigConv;             /*!< Selects the external event used to trigger the conversion start of regular group.
 | ||||||
|  |                                               If set to ADC_SOFTWARE_START, external triggers are disabled. | ||||||
|  |                                               If set to external trigger source, triggering is on event rising edge by default. | ||||||
|  |                                               This parameter can be a value of @ref ADC_External_trigger_Source_Regular */ | ||||||
|  |   uint32_t ExternalTrigConvEdge;         /*!< Selects the external trigger edge of regular group.
 | ||||||
|  |                                               If trigger is set to ADC_SOFTWARE_START, this parameter is discarded. | ||||||
|  |                                               This parameter can be a value of @ref ADC_External_trigger_edge_Regular */ | ||||||
|  |   FunctionalState DMAContinuousRequests; /*!< Specifies whether the DMA requests are performed in one shot mode (DMA transfer stop when number of conversions is reached)
 | ||||||
|  | 											  or in Continuous mode (DMA transfer unlimited, whatever number of conversions). | ||||||
|  | 											  Note: In continuous mode, DMA must be configured in circular mode. Otherwise an overrun will be triggered when DMA buffer maximum pointer is reached. | ||||||
|  | 											  Note: This parameter must be modified when no conversion is on going on both regular and injected groups (ADC disabled, or ADC enabled without continuous mode or external trigger that could launch a conversion). | ||||||
|  | 											  This parameter can be set to ENABLE or DISABLE. */ | ||||||
|  | }ADC_InitTypeDef; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** 
 | ||||||
|  |   * @brief  Structure definition of ADC channel for regular group   
 | ||||||
|  |   * @note   The setting of these parameters with function HAL_ADC_ConfigChannel() is conditioned to ADC state. | ||||||
|  |   *         ADC can be either disabled or enabled without conversion on going on regular group. | ||||||
|  |   */ 
 | ||||||
|  | typedef struct 
 | ||||||
|  | { | ||||||
|  |   uint32_t Channel;                /*!< Specifies the channel to configure into ADC regular group.
 | ||||||
|  |                                         This parameter can be a value of @ref ADC_channels */ | ||||||
|  |   uint32_t Rank;                   /*!< Specifies the rank in the regular group sequencer.
 | ||||||
|  |                                         This parameter must be a number between Min_Data = 1 and Max_Data = 16 */ | ||||||
|  |   uint32_t SamplingTime;           /*!< Sampling time value to be set for the selected channel.
 | ||||||
|  |                                         Unit: ADC clock cycles | ||||||
|  |                                         Conversion time is the addition of sampling time and processing time (12 ADC clock cycles at ADC resolution 12 bits, 11 cycles at 10 bits, 9 cycles at 8 bits, 7 cycles at 6 bits). | ||||||
|  |                                         This parameter can be a value of @ref ADC_sampling_times | ||||||
|  |                                         Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups. | ||||||
|  |                                                  If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting. | ||||||
|  |                                         Note: In case of usage of internal measurement channels (VrefInt/Vbat/TempSensor), | ||||||
|  |                                               sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting) | ||||||
|  |                                               Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 4us min). */ | ||||||
|  |   uint32_t Offset;                 /*!< Reserved for future use, can be set to 0 */ | ||||||
|  | }ADC_ChannelConfTypeDef; | ||||||
|  | 
 | ||||||
|  | /** 
 | ||||||
|  |   * @brief ADC Configuration multi-mode structure definition  
 | ||||||
|  |   */ 
 | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   uint32_t WatchdogMode;      /*!< Configures the ADC analog watchdog mode.
 | ||||||
|  |                                    This parameter can be a value of @ref ADC_analog_watchdog_selection */ | ||||||
|  |   uint32_t HighThreshold;     /*!< Configures the ADC analog watchdog High threshold value.
 | ||||||
|  |                                    This parameter must be a 12-bit value. */     
 | ||||||
|  |   uint32_t LowThreshold;      /*!< Configures the ADC analog watchdog High threshold value.
 | ||||||
|  |                                    This parameter must be a 12-bit value. */ | ||||||
|  |   uint32_t Channel;           /*!< Configures ADC channel for the analog watchdog. 
 | ||||||
|  |                                    This parameter has an effect only if watchdog mode is configured on single channel 
 | ||||||
|  |                                    This parameter can be a value of @ref ADC_channels */      
 | ||||||
|  |   FunctionalState ITMode;     /*!< Specifies whether the analog watchdog is configured
 | ||||||
|  |                                    is interrupt mode or in polling mode. | ||||||
|  |                                    This parameter can be set to ENABLE or DISABLE */ | ||||||
|  |   uint32_t WatchdogNumber;    /*!< Reserved for future use, can be set to 0 */ | ||||||
|  | }ADC_AnalogWDGConfTypeDef; | ||||||
|  | 
 | ||||||
|  | /** 
 | ||||||
|  |   * @brief  HAL ADC state machine: ADC states definition (bitfields) | ||||||
|  |   */ 
 | ||||||
|  | /* States of ADC global scope */ | ||||||
|  | #define HAL_ADC_STATE_RESET             0x00000000U    /*!< ADC not yet initialized or disabled */ | ||||||
|  | #define HAL_ADC_STATE_READY             0x00000001U    /*!< ADC peripheral ready for use */ | ||||||
|  | #define HAL_ADC_STATE_BUSY_INTERNAL     0x00000002U    /*!< ADC is busy to internal process (initialization, calibration) */ | ||||||
|  | #define HAL_ADC_STATE_TIMEOUT           0x00000004U    /*!< TimeOut occurrence */ | ||||||
|  | 
 | ||||||
|  | /* States of ADC errors */ | ||||||
|  | #define HAL_ADC_STATE_ERROR_INTERNAL    0x00000010U    /*!< Internal error occurrence */ | ||||||
|  | #define HAL_ADC_STATE_ERROR_CONFIG      0x00000020U    /*!< Configuration error occurrence */ | ||||||
|  | #define HAL_ADC_STATE_ERROR_DMA         0x00000040U    /*!< DMA error occurrence */ | ||||||
|  | 
 | ||||||
|  | /* States of ADC group regular */ | ||||||
|  | #define HAL_ADC_STATE_REG_BUSY          0x00000100U    /*!< A conversion on group regular is ongoing or can occur (either by continuous mode, | ||||||
|  |                                                             external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */ | ||||||
|  | #define HAL_ADC_STATE_REG_EOC           0x00000200U    /*!< Conversion data available on group regular */ | ||||||
|  | #define HAL_ADC_STATE_REG_OVR           0x00000400U    /*!< Overrun occurrence */ | ||||||
|  | 
 | ||||||
|  | /* States of ADC group injected */ | ||||||
|  | #define HAL_ADC_STATE_INJ_BUSY          0x00001000U    /*!< A conversion on group injected is ongoing or can occur (either by auto-injection mode, | ||||||
|  |                                                             external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */ | ||||||
|  | #define HAL_ADC_STATE_INJ_EOC           0x00002000U    /*!< Conversion data available on group injected */ | ||||||
|  | 
 | ||||||
|  | /* States of ADC analog watchdogs */ | ||||||
|  | #define HAL_ADC_STATE_AWD1              0x00010000U    /*!< Out-of-window occurrence of analog watchdog 1 */ | ||||||
|  | #define HAL_ADC_STATE_AWD2              0x00020000U    /*!< Not available on STM32F4 device: Out-of-window occurrence of analog watchdog 2 */ | ||||||
|  | #define HAL_ADC_STATE_AWD3              0x00040000U    /*!< Not available on STM32F4 device: Out-of-window occurrence of analog watchdog 3 */ | ||||||
|  | 
 | ||||||
|  | /* States of ADC multi-mode */ | ||||||
|  | #define HAL_ADC_STATE_MULTIMODE_SLAVE   0x00100000U    /*!< Not available on STM32F4 device: ADC in multimode slave state, controlled by another ADC master ( */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** 
 | ||||||
|  |   * @brief  ADC handle Structure definition | ||||||
|  |   */ 
 | ||||||
|  | #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1) | ||||||
|  | typedef struct __ADC_HandleTypeDef | ||||||
|  | #else | ||||||
|  | typedef struct | ||||||
|  | #endif | ||||||
|  | { | ||||||
|  |   ADC_TypeDef                   *Instance;                   /*!< Register base address */ | ||||||
|  | 
 | ||||||
|  |   ADC_InitTypeDef               Init;                        /*!< ADC required parameters */ | ||||||
|  | 
 | ||||||
|  |   __IO uint32_t                 NbrOfCurrentConversionRank;  /*!< ADC number of current conversion rank */ | ||||||
|  | 
 | ||||||
|  |   DMA_HandleTypeDef             *DMA_Handle;                 /*!< Pointer DMA Handler */ | ||||||
|  | 
 | ||||||
|  |   HAL_LockTypeDef               Lock;                        /*!< ADC locking object */ | ||||||
|  | 
 | ||||||
|  |   __IO uint32_t                 State;                       /*!< ADC communication state */ | ||||||
|  | 
 | ||||||
|  |   __IO uint32_t                 ErrorCode;                   /*!< ADC Error code */ | ||||||
|  | #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1) | ||||||
|  |   void (* ConvCpltCallback)(struct __ADC_HandleTypeDef *hadc);              /*!< ADC conversion complete callback */ | ||||||
|  |   void (* ConvHalfCpltCallback)(struct __ADC_HandleTypeDef *hadc);          /*!< ADC conversion DMA half-transfer callback */ | ||||||
|  |   void (* LevelOutOfWindowCallback)(struct __ADC_HandleTypeDef *hadc);      /*!< ADC analog watchdog 1 callback */ | ||||||
|  |   void (* ErrorCallback)(struct __ADC_HandleTypeDef *hadc);                 /*!< ADC error callback */ | ||||||
|  |   void (* InjectedConvCpltCallback)(struct __ADC_HandleTypeDef *hadc);      /*!< ADC group injected conversion complete callback */ | ||||||
|  |   void (* MspInitCallback)(struct __ADC_HandleTypeDef *hadc);               /*!< ADC Msp Init callback */ | ||||||
|  |   void (* MspDeInitCallback)(struct __ADC_HandleTypeDef *hadc);             /*!< ADC Msp DeInit callback */ | ||||||
|  | #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */ | ||||||
|  | }ADC_HandleTypeDef; | ||||||
|  | 
 | ||||||
|  | #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1) | ||||||
|  | /**
 | ||||||
|  |   * @brief  HAL ADC Callback ID enumeration definition | ||||||
|  |   */ | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   HAL_ADC_CONVERSION_COMPLETE_CB_ID     = 0x00U,  /*!< ADC conversion complete callback ID */ | ||||||
|  |   HAL_ADC_CONVERSION_HALF_CB_ID         = 0x01U,  /*!< ADC conversion DMA half-transfer callback ID */ | ||||||
|  |   HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID   = 0x02U,  /*!< ADC analog watchdog 1 callback ID */ | ||||||
|  |   HAL_ADC_ERROR_CB_ID                   = 0x03U,  /*!< ADC error callback ID */ | ||||||
|  |   HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID = 0x04U,  /*!< ADC group injected conversion complete callback ID */ | ||||||
|  |   HAL_ADC_MSPINIT_CB_ID                 = 0x05U,  /*!< ADC Msp Init callback ID          */ | ||||||
|  |   HAL_ADC_MSPDEINIT_CB_ID               = 0x06U   /*!< ADC Msp DeInit callback ID        */ | ||||||
|  | } HAL_ADC_CallbackIDTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  HAL ADC Callback pointer definition | ||||||
|  |   */ | ||||||
|  | typedef  void (*pADC_CallbackTypeDef)(ADC_HandleTypeDef *hadc); /*!< pointer to a ADC callback function */ | ||||||
|  | 
 | ||||||
|  | #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Exported constants --------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADC_Exported_Constants ADC Exported Constants
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_Error_Code ADC Error Code
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define HAL_ADC_ERROR_NONE        0x00U   /*!< No error                                              */ | ||||||
|  | #define HAL_ADC_ERROR_INTERNAL    0x01U   /*!< ADC IP internal error: if problem of clocking,  | ||||||
|  |                                                enable/disable, erroneous state                       */ | ||||||
|  | #define HAL_ADC_ERROR_OVR         0x02U   /*!< Overrun error                                         */ | ||||||
|  | #define HAL_ADC_ERROR_DMA         0x04U   /*!< DMA transfer error                                    */ | ||||||
|  | #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1) | ||||||
|  | #define HAL_ADC_ERROR_INVALID_CALLBACK  (0x10U)   /*!< Invalid Callback error */ | ||||||
|  | #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_ClockPrescaler  ADC Clock Prescaler
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_CLOCK_SYNC_PCLK_DIV2    0x00000000U | ||||||
|  | #define ADC_CLOCK_SYNC_PCLK_DIV4    ((uint32_t)ADC_CCR_ADCPRE_0) | ||||||
|  | #define ADC_CLOCK_SYNC_PCLK_DIV6    ((uint32_t)ADC_CCR_ADCPRE_1) | ||||||
|  | #define ADC_CLOCK_SYNC_PCLK_DIV8    ((uint32_t)ADC_CCR_ADCPRE) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_delay_between_2_sampling_phases ADC Delay Between 2 Sampling Phases
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_5CYCLES    0x00000000U | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_6CYCLES    ((uint32_t)ADC_CCR_DELAY_0) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_7CYCLES    ((uint32_t)ADC_CCR_DELAY_1) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_8CYCLES    ((uint32_t)(ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_9CYCLES    ((uint32_t)ADC_CCR_DELAY_2) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_10CYCLES   ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_0)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_11CYCLES   ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_12CYCLES   ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_13CYCLES   ((uint32_t)ADC_CCR_DELAY_3) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_14CYCLES   ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_0)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_15CYCLES   ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_1)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_16CYCLES   ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_17CYCLES   ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_2)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_18CYCLES   ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_2 | ADC_CCR_DELAY_0)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_19CYCLES   ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1)) | ||||||
|  | #define ADC_TWOSAMPLINGDELAY_20CYCLES   ((uint32_t)ADC_CCR_DELAY) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_Resolution ADC Resolution
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_RESOLUTION_12B  0x00000000U | ||||||
|  | #define ADC_RESOLUTION_10B  ((uint32_t)ADC_CR1_RES_0) | ||||||
|  | #define ADC_RESOLUTION_8B   ((uint32_t)ADC_CR1_RES_1) | ||||||
|  | #define ADC_RESOLUTION_6B   ((uint32_t)ADC_CR1_RES) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_External_trigger_edge_Regular ADC External Trigger Edge Regular
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_EXTERNALTRIGCONVEDGE_NONE           0x00000000U | ||||||
|  | #define ADC_EXTERNALTRIGCONVEDGE_RISING         ((uint32_t)ADC_CR2_EXTEN_0) | ||||||
|  | #define ADC_EXTERNALTRIGCONVEDGE_FALLING        ((uint32_t)ADC_CR2_EXTEN_1) | ||||||
|  | #define ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING  ((uint32_t)ADC_CR2_EXTEN) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_External_trigger_Source_Regular ADC External Trigger Source Regular
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Note: Parameter ADC_SOFTWARE_START is a software parameter used for        */ | ||||||
|  | /*       compatibility with other STM32 devices.                              */ | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T1_CC1    0x00000000U | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T1_CC2    ((uint32_t)ADC_CR2_EXTSEL_0) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T1_CC3    ((uint32_t)ADC_CR2_EXTSEL_1) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T2_CC2    ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T2_CC3    ((uint32_t)ADC_CR2_EXTSEL_2) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T2_CC4    ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T2_TRGO   ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T3_CC1    ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T3_TRGO   ((uint32_t)ADC_CR2_EXTSEL_3) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T4_CC4    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T5_CC1    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T5_CC2    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T5_CC3    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T8_CC1    ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_T8_TRGO   ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1)) | ||||||
|  | #define ADC_EXTERNALTRIGCONV_Ext_IT11  ((uint32_t)ADC_CR2_EXTSEL) | ||||||
|  | #define ADC_SOFTWARE_START             ((uint32_t)ADC_CR2_EXTSEL + 1U) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_Data_align ADC Data Align
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_DATAALIGN_RIGHT      0x00000000U | ||||||
|  | #define ADC_DATAALIGN_LEFT       ((uint32_t)ADC_CR2_ALIGN) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_channels  ADC Common Channels
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_CHANNEL_0           0x00000000U | ||||||
|  | #define ADC_CHANNEL_1           ((uint32_t)ADC_CR1_AWDCH_0) | ||||||
|  | #define ADC_CHANNEL_2           ((uint32_t)ADC_CR1_AWDCH_1) | ||||||
|  | #define ADC_CHANNEL_3           ((uint32_t)(ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_4           ((uint32_t)ADC_CR1_AWDCH_2) | ||||||
|  | #define ADC_CHANNEL_5           ((uint32_t)(ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_6           ((uint32_t)(ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1)) | ||||||
|  | #define ADC_CHANNEL_7           ((uint32_t)(ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_8           ((uint32_t)ADC_CR1_AWDCH_3) | ||||||
|  | #define ADC_CHANNEL_9           ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_10          ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1)) | ||||||
|  | #define ADC_CHANNEL_11          ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_12          ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2)) | ||||||
|  | #define ADC_CHANNEL_13          ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_14          ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1)) | ||||||
|  | #define ADC_CHANNEL_15          ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_16          ((uint32_t)ADC_CR1_AWDCH_4) | ||||||
|  | #define ADC_CHANNEL_17          ((uint32_t)(ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_0)) | ||||||
|  | #define ADC_CHANNEL_18          ((uint32_t)(ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_1)) | ||||||
|  | 
 | ||||||
|  | #define ADC_CHANNEL_VREFINT     ((uint32_t)ADC_CHANNEL_17) | ||||||
|  | #define ADC_CHANNEL_VBAT        ((uint32_t)ADC_CHANNEL_18) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_sampling_times  ADC Sampling Times
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_SAMPLETIME_3CYCLES    0x00000000U | ||||||
|  | #define ADC_SAMPLETIME_15CYCLES   ((uint32_t)ADC_SMPR1_SMP10_0) | ||||||
|  | #define ADC_SAMPLETIME_28CYCLES   ((uint32_t)ADC_SMPR1_SMP10_1) | ||||||
|  | #define ADC_SAMPLETIME_56CYCLES   ((uint32_t)(ADC_SMPR1_SMP10_1 | ADC_SMPR1_SMP10_0)) | ||||||
|  | #define ADC_SAMPLETIME_84CYCLES   ((uint32_t)ADC_SMPR1_SMP10_2) | ||||||
|  | #define ADC_SAMPLETIME_112CYCLES  ((uint32_t)(ADC_SMPR1_SMP10_2 | ADC_SMPR1_SMP10_0)) | ||||||
|  | #define ADC_SAMPLETIME_144CYCLES  ((uint32_t)(ADC_SMPR1_SMP10_2 | ADC_SMPR1_SMP10_1)) | ||||||
|  | #define ADC_SAMPLETIME_480CYCLES  ((uint32_t)ADC_SMPR1_SMP10) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  |   /** @defgroup ADC_EOCSelection ADC EOC Selection
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_EOC_SEQ_CONV              0x00000000U | ||||||
|  | #define ADC_EOC_SINGLE_CONV           0x00000001U | ||||||
|  | #define ADC_EOC_SINGLE_SEQ_CONV       0x00000002U  /*!< reserved for future use */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_Event_type ADC Event Type
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_AWD_EVENT             ((uint32_t)ADC_FLAG_AWD) | ||||||
|  | #define ADC_OVR_EVENT             ((uint32_t)ADC_FLAG_OVR) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_analog_watchdog_selection ADC Analog Watchdog Selection
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_ANALOGWATCHDOG_SINGLE_REG         ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN)) | ||||||
|  | #define ADC_ANALOGWATCHDOG_SINGLE_INJEC       ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_JAWDEN)) | ||||||
|  | #define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC    ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN | ADC_CR1_JAWDEN)) | ||||||
|  | #define ADC_ANALOGWATCHDOG_ALL_REG            ((uint32_t)ADC_CR1_AWDEN) | ||||||
|  | #define ADC_ANALOGWATCHDOG_ALL_INJEC          ((uint32_t)ADC_CR1_JAWDEN) | ||||||
|  | #define ADC_ANALOGWATCHDOG_ALL_REGINJEC       ((uint32_t)(ADC_CR1_AWDEN | ADC_CR1_JAWDEN)) | ||||||
|  | #define ADC_ANALOGWATCHDOG_NONE               0x00000000U | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  |     
 | ||||||
|  | /** @defgroup ADC_interrupts_definition ADC Interrupts Definition
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_IT_EOC      ((uint32_t)ADC_CR1_EOCIE) | ||||||
|  | #define ADC_IT_AWD      ((uint32_t)ADC_CR1_AWDIE) | ||||||
|  | #define ADC_IT_JEOC     ((uint32_t)ADC_CR1_JEOCIE) | ||||||
|  | #define ADC_IT_OVR      ((uint32_t)ADC_CR1_OVRIE) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  |     
 | ||||||
|  | /** @defgroup ADC_flags_definition ADC Flags Definition
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_FLAG_AWD    ((uint32_t)ADC_SR_AWD) | ||||||
|  | #define ADC_FLAG_EOC    ((uint32_t)ADC_SR_EOC) | ||||||
|  | #define ADC_FLAG_JEOC   ((uint32_t)ADC_SR_JEOC) | ||||||
|  | #define ADC_FLAG_JSTRT  ((uint32_t)ADC_SR_JSTRT) | ||||||
|  | #define ADC_FLAG_STRT   ((uint32_t)ADC_SR_STRT) | ||||||
|  | #define ADC_FLAG_OVR    ((uint32_t)ADC_SR_OVR) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_channels_type ADC Channels Type
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_ALL_CHANNELS      0x00000001U | ||||||
|  | #define ADC_REGULAR_CHANNELS  0x00000002U /*!< reserved for future use */ | ||||||
|  | #define ADC_INJECTED_CHANNELS 0x00000003U /*!< reserved for future use */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /* Exported macro ------------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADC_Exported_Macros ADC Exported Macros
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @brief Reset ADC handle state
 | ||||||
|  |   * @param  __HANDLE__ ADC handle | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1) | ||||||
|  | #define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__)                               \ | ||||||
|  |   do{                                                                          \
 | ||||||
|  |      (__HANDLE__)->State = HAL_ADC_STATE_RESET;                               \
 | ||||||
|  |      (__HANDLE__)->MspInitCallback = NULL;                                     \
 | ||||||
|  |      (__HANDLE__)->MspDeInitCallback = NULL;                                   \
 | ||||||
|  |     } while(0) | ||||||
|  | #else | ||||||
|  | #define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__)                               \ | ||||||
|  |   ((__HANDLE__)->State = HAL_ADC_STATE_RESET) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the ADC peripheral. | ||||||
|  |   * @param  __HANDLE__ ADC handle | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR2 |=  ADC_CR2_ADON) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable the ADC peripheral. | ||||||
|  |   * @param  __HANDLE__ ADC handle | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR2 &=  ~ADC_CR2_ADON) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the ADC end of conversion interrupt. | ||||||
|  |   * @param  __HANDLE__ specifies the ADC Handle. | ||||||
|  |   * @param  __INTERRUPT__ ADC Interrupt. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1) |= (__INTERRUPT__)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable the ADC end of conversion interrupt. | ||||||
|  |   * @param  __HANDLE__ specifies the ADC Handle. | ||||||
|  |   * @param  __INTERRUPT__ ADC interrupt. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1) &= ~(__INTERRUPT__)) | ||||||
|  | 
 | ||||||
|  | /** @brief  Check if the specified ADC interrupt source is enabled or disabled.
 | ||||||
|  |   * @param  __HANDLE__ specifies the ADC Handle. | ||||||
|  |   * @param  __INTERRUPT__ specifies the ADC interrupt source to check. | ||||||
|  |   * @retval The new state of __IT__ (TRUE or FALSE). | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)  (((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Clear the ADC's pending flags. | ||||||
|  |   * @param  __HANDLE__ specifies the ADC Handle. | ||||||
|  |   * @param  __FLAG__ ADC flag. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = ~(__FLAG__)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Get the selected ADC's flag status. | ||||||
|  |   * @param  __HANDLE__ specifies the ADC Handle. | ||||||
|  |   * @param  __FLAG__ ADC flag. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Include ADC HAL Extension module */ | ||||||
|  | #include "stm32f4xx_hal_adc_ex.h" | ||||||
|  | 
 | ||||||
|  | /* Exported functions --------------------------------------------------------*/ | ||||||
|  | /** @addtogroup ADC_Exported_Functions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC_Exported_Functions_Group1
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Initialization/de-initialization functions ***********************************/ | ||||||
|  | HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc); | ||||||
|  | HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc); | ||||||
|  | void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc); | ||||||
|  | void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc); | ||||||
|  | 
 | ||||||
|  | #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1) | ||||||
|  | /* Callbacks Register/UnRegister functions  ***********************************/ | ||||||
|  | HAL_StatusTypeDef HAL_ADC_RegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID, pADC_CallbackTypeDef pCallback); | ||||||
|  | HAL_StatusTypeDef HAL_ADC_UnRegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID); | ||||||
|  | #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC_Exported_Functions_Group2
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* I/O operation functions ******************************************************/ | ||||||
|  | HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); | ||||||
|  | HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); | ||||||
|  | HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); | ||||||
|  | 
 | ||||||
|  | HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout); | ||||||
|  | 
 | ||||||
|  | HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc); | ||||||
|  | HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc); | ||||||
|  | 
 | ||||||
|  | void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc); | ||||||
|  | 
 | ||||||
|  | HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length); | ||||||
|  | HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc); | ||||||
|  | 
 | ||||||
|  | uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc); | ||||||
|  | 
 | ||||||
|  | void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc); | ||||||
|  | void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc); | ||||||
|  | void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc); | ||||||
|  | void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC_Exported_Functions_Group3
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Peripheral Control functions *************************************************/ | ||||||
|  | HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig); | ||||||
|  | HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC_Exported_Functions_Group4
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Peripheral State functions ***************************************************/ | ||||||
|  | uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc); | ||||||
|  | uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | /* Private types -------------------------------------------------------------*/ | ||||||
|  | /* Private variables ---------------------------------------------------------*/ | ||||||
|  | /* Private constants ---------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADC_Private_Constants ADC Private Constants
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Delay for ADC stabilization time.                                        */ | ||||||
|  | /* Maximum delay is 1us (refer to device datasheet, parameter tSTAB).       */ | ||||||
|  | /* Unit: us                                                                 */ | ||||||
|  | #define ADC_STAB_DELAY_US               3U | ||||||
|  | /* Delay for temperature sensor stabilization time.                         */ | ||||||
|  | /* Maximum delay is 10us (refer to device datasheet, parameter tSTART).     */ | ||||||
|  | /* Unit: us                                                                 */ | ||||||
|  | #define ADC_TEMPSENSOR_DELAY_US         10U | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private macro ------------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADC_Private_Macros ADC Private Macros
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Macro reserved for internal HAL driver usage, not intended to be used in
 | ||||||
|  |    code of final user */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Verification of ADC state: enabled or disabled | ||||||
|  |   * @param __HANDLE__ ADC handle | ||||||
|  |   * @retval SET (ADC enabled) or RESET (ADC disabled) | ||||||
|  |   */ | ||||||
|  | #define ADC_IS_ENABLE(__HANDLE__)                                              \ | ||||||
|  |   ((( ((__HANDLE__)->Instance->SR & ADC_SR_ADONS) == ADC_SR_ADONS )            \
 | ||||||
|  |   ) ? SET : RESET) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Test if conversion trigger of regular group is software start | ||||||
|  |   *        or external trigger. | ||||||
|  |   * @param __HANDLE__ ADC handle | ||||||
|  |   * @retval SET (software start) or RESET (external trigger) | ||||||
|  |   */ | ||||||
|  | #define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__)                              \ | ||||||
|  |   (((__HANDLE__)->Instance->CR2 & ADC_CR2_EXTEN) == RESET) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Test if conversion trigger of injected group is software start | ||||||
|  |   *        or external trigger. | ||||||
|  |   * @param __HANDLE__ ADC handle | ||||||
|  |   * @retval SET (software start) or RESET (external trigger) | ||||||
|  |   */ | ||||||
|  | #define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__)                             \ | ||||||
|  |   (((__HANDLE__)->Instance->CR2 & ADC_CR2_JEXTEN) == RESET) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Simultaneously clears and sets specific bits of the handle State | ||||||
|  |   * @note: ADC_STATE_CLR_SET() macro is merely aliased to generic macro MODIFY_REG(), | ||||||
|  |   *        the first parameter is the ADC handle State, the second parameter is the | ||||||
|  |   *        bit field to clear, the third and last parameter is the bit field to set. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_STATE_CLR_SET MODIFY_REG | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Clear ADC error code (set it to error code: "no error") | ||||||
|  |   * @param __HANDLE__ ADC handle | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_CLEAR_ERRORCODE(__HANDLE__)                                        \ | ||||||
|  |   ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE) | ||||||
|  | 
 | ||||||
|  |     
 | ||||||
|  | #define IS_ADC_CLOCKPRESCALER(ADC_CLOCK)     (((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV2) || \ | ||||||
|  |                                               ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV4) || \
 | ||||||
|  |                                               ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV6) || \
 | ||||||
|  |                                               ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV8)) | ||||||
|  | #define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TWOSAMPLINGDELAY_5CYCLES)  || \ | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_6CYCLES)  || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_7CYCLES)  || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_8CYCLES)  || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_9CYCLES)  || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_10CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_11CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_12CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_13CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_14CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_15CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_16CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_17CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_18CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_19CYCLES) || \
 | ||||||
|  |                                       ((DELAY) == ADC_TWOSAMPLINGDELAY_20CYCLES)) | ||||||
|  | #define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_RESOLUTION_12B) || \ | ||||||
|  |                                        ((RESOLUTION) == ADC_RESOLUTION_10B) || \
 | ||||||
|  |                                        ((RESOLUTION) == ADC_RESOLUTION_8B)  || \
 | ||||||
|  |                                        ((RESOLUTION) == ADC_RESOLUTION_6B)) | ||||||
|  | #define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGCONVEDGE_NONE)    || \ | ||||||
|  |                                     ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISING)  || \
 | ||||||
|  |                                     ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_FALLING) || \
 | ||||||
|  |                                     ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING)) | ||||||
|  | #define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1)  || \ | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC3)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC3)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC4)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_TRGO) || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_CC1)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC1)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC2)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC3)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_CC1)  || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || \
 | ||||||
|  |                                   ((REGTRIG) == ADC_EXTERNALTRIGCONV_Ext_IT11)|| \
 | ||||||
|  |                                   ((REGTRIG) == ADC_SOFTWARE_START)) | ||||||
|  | #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DATAALIGN_RIGHT) || \ | ||||||
|  |                                   ((ALIGN) == ADC_DATAALIGN_LEFT)) | ||||||
|  | #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SAMPLETIME_3CYCLES)   || \ | ||||||
|  |                                   ((TIME) == ADC_SAMPLETIME_15CYCLES)  || \
 | ||||||
|  |                                   ((TIME) == ADC_SAMPLETIME_28CYCLES)  || \
 | ||||||
|  |                                   ((TIME) == ADC_SAMPLETIME_56CYCLES)  || \
 | ||||||
|  |                                   ((TIME) == ADC_SAMPLETIME_84CYCLES)  || \
 | ||||||
|  |                                   ((TIME) == ADC_SAMPLETIME_112CYCLES) || \
 | ||||||
|  |                                   ((TIME) == ADC_SAMPLETIME_144CYCLES) || \
 | ||||||
|  |                                   ((TIME) == ADC_SAMPLETIME_480CYCLES)) | ||||||
|  | #define IS_ADC_EOCSelection(EOCSelection) (((EOCSelection) == ADC_EOC_SINGLE_CONV)   || \ | ||||||
|  |                                            ((EOCSelection) == ADC_EOC_SEQ_CONV)  || \
 | ||||||
|  |                                            ((EOCSelection) == ADC_EOC_SINGLE_SEQ_CONV)) | ||||||
|  | #define IS_ADC_EVENT_TYPE(EVENT) (((EVENT) == ADC_AWD_EVENT) || \ | ||||||
|  |                                   ((EVENT) == ADC_OVR_EVENT)) | ||||||
|  | #define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REG)        || \ | ||||||
|  |                                           ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_INJEC)      || \
 | ||||||
|  |                                           ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC)   || \
 | ||||||
|  |                                           ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REG)           || \
 | ||||||
|  |                                           ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_INJEC)         || \
 | ||||||
|  |                                           ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REGINJEC)      || \
 | ||||||
|  |                                           ((WATCHDOG) == ADC_ANALOGWATCHDOG_NONE)) | ||||||
|  | #define IS_ADC_CHANNELS_TYPE(CHANNEL_TYPE) (((CHANNEL_TYPE) == ADC_ALL_CHANNELS) || \ | ||||||
|  |                                             ((CHANNEL_TYPE) == ADC_REGULAR_CHANNELS) || \
 | ||||||
|  |                                             ((CHANNEL_TYPE) == ADC_INJECTED_CHANNELS)) | ||||||
|  | #define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFFU) | ||||||
|  | 
 | ||||||
|  | #define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 16U)) | ||||||
|  | #define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 1U) && ((RANK) <= (16U))) | ||||||
|  | #define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 1U) && ((NUMBER) <= 8U)) | ||||||
|  | #define IS_ADC_RANGE(RESOLUTION, ADC_VALUE)                                     \ | ||||||
|  |    ((((RESOLUTION) == ADC_RESOLUTION_12B) && ((ADC_VALUE) <= 0x0FFFU)) || \
 | ||||||
|  |     (((RESOLUTION) == ADC_RESOLUTION_10B) && ((ADC_VALUE) <= 0x03FFU)) || \
 | ||||||
|  |     (((RESOLUTION) == ADC_RESOLUTION_8B)  && ((ADC_VALUE) <= 0x00FFU)) || \
 | ||||||
|  |     (((RESOLUTION) == ADC_RESOLUTION_6B)  && ((ADC_VALUE) <= 0x003FU))) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set ADC Regular channel sequence length. | ||||||
|  |   * @param  _NbrOfConversion_ Regular channel sequence length. 
 | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_SQR1(_NbrOfConversion_) (((_NbrOfConversion_) - (uint8_t)1U) << 20U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set the ADC's sample time for channel numbers between 10 and 18. | ||||||
|  |   * @param  _SAMPLETIME_ Sample time parameter. | ||||||
|  |   * @param  _CHANNELNB_ Channel number.  
 | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_SMPR1(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (3U * (((uint32_t)((uint16_t)(_CHANNELNB_))) - 10U))) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set the ADC's sample time for channel numbers between 0 and 9. | ||||||
|  |   * @param  _SAMPLETIME_ Sample time parameter. | ||||||
|  |   * @param  _CHANNELNB_ Channel number.  
 | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_SMPR2(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (3U * ((uint32_t)((uint16_t)(_CHANNELNB_))))) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set the selected regular channel rank for rank between 1 and 6. | ||||||
|  |   * @param  _CHANNELNB_ Channel number. | ||||||
|  |   * @param  _RANKNB_ Rank number.    
 | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_SQR3_RK(_CHANNELNB_, _RANKNB_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * ((_RANKNB_) - 1U))) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set the selected regular channel rank for rank between 7 and 12. | ||||||
|  |   * @param  _CHANNELNB_ Channel number. | ||||||
|  |   * @param  _RANKNB_ Rank number.    
 | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_SQR2_RK(_CHANNELNB_, _RANKNB_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * ((_RANKNB_) - 7U))) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set the selected regular channel rank for rank between 13 and 16. | ||||||
|  |   * @param  _CHANNELNB_ Channel number. | ||||||
|  |   * @param  _RANKNB_ Rank number.    
 | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_SQR1_RK(_CHANNELNB_, _RANKNB_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * ((_RANKNB_) - 13U))) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable ADC continuous conversion mode. | ||||||
|  |   * @param  _CONTINUOUS_MODE_ Continuous mode. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_CR2_CONTINUOUS(_CONTINUOUS_MODE_) ((_CONTINUOUS_MODE_) << 1U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Configures the number of discontinuous conversions for the regular group channels. | ||||||
|  |   * @param  _NBR_DISCONTINUOUSCONV_ Number of discontinuous conversions. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_CR1_DISCONTINUOUS(_NBR_DISCONTINUOUSCONV_) (((_NBR_DISCONTINUOUSCONV_) - 1U) << ADC_CR1_DISCNUM_Pos) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable ADC scan mode. | ||||||
|  |   * @param  _SCANCONV_MODE_ Scan conversion mode. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_CR1_SCANCONV(_SCANCONV_MODE_) ((_SCANCONV_MODE_) << 8U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the ADC end of conversion selection. | ||||||
|  |   * @param  _EOCSelection_MODE_ End of conversion selection mode. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_CR2_EOCSelection(_EOCSelection_MODE_) ((_EOCSelection_MODE_) << 10U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the ADC DMA continuous request. | ||||||
|  |   * @param  _DMAContReq_MODE_ DMA continuous request mode. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_CR2_DMAContReq(_DMAContReq_MODE_) ((_DMAContReq_MODE_) << 9U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Return resolution bits in CR1 register. | ||||||
|  |   * @param __HANDLE__ ADC handle | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define ADC_GET_RESOLUTION(__HANDLE__) (((__HANDLE__)->Instance->CR1) & ADC_CR1_RES) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private functions ---------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADC_Private_Functions ADC Private Functions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /*__STM32F4xx_ADC_H */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,407 @@ | |||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    stm32f4xx_hal_adc_ex.h | ||||||
|  |   * @author  MCD Application Team | ||||||
|  |   * @brief   Header file of ADC HAL module. | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2017 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Define to prevent recursive inclusion -------------------------------------*/ | ||||||
|  | #ifndef __STM32F4xx_ADC_EX_H | ||||||
|  | #define __STM32F4xx_ADC_EX_H | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  |  extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "stm32f4xx_hal_def.h" | ||||||
|  | 
 | ||||||
|  | /** @addtogroup STM32F4xx_HAL_Driver
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADCEx
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /* Exported types ------------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADCEx_Exported_Types ADC Exported Types
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  |    
 | ||||||
|  | /** 
 | ||||||
|  |   * @brief  ADC Configuration injected Channel structure definition | ||||||
|  |   * @note   Parameters of this structure are shared within 2 scopes: | ||||||
|  |   *          - Scope channel: InjectedChannel, InjectedRank, InjectedSamplingTime, InjectedOffset | ||||||
|  |   *          - Scope injected group (affects all channels of injected group): InjectedNbrOfConversion, InjectedDiscontinuousConvMode, | ||||||
|  |   *            AutoInjectedConv, ExternalTrigInjecConvEdge, ExternalTrigInjecConv. | ||||||
|  |   * @note   The setting of these parameters with function HAL_ADCEx_InjectedConfigChannel() is conditioned to ADC state. | ||||||
|  |   *         ADC state can be either: | ||||||
|  |   *          - For all parameters: ADC disabled | ||||||
|  |   *          - For all except parameters 'InjectedDiscontinuousConvMode' and 'AutoInjectedConv': ADC enabled without conversion on going on injected group. | ||||||
|  |   *          - For parameters 'ExternalTrigInjecConv' and 'ExternalTrigInjecConvEdge': ADC enabled, even with conversion on going on injected group. | ||||||
|  |   */ | ||||||
|  | typedef struct 
 | ||||||
|  | { | ||||||
|  |   uint32_t InjectedChannel;                      /*!< Selection of ADC channel to configure
 | ||||||
|  |                                                       This parameter can be a value of @ref ADC_channels | ||||||
|  |                                                       Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability. */ | ||||||
|  |   uint32_t InjectedRank;                         /*!< Rank in the injected group sequencer
 | ||||||
|  |                                                       This parameter must be a value of @ref ADCEx_injected_rank | ||||||
|  |                                                       Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or parameter number of conversions can be adjusted) */ | ||||||
|  |   uint32_t InjectedSamplingTime;                 /*!< Sampling time value to be set for the selected channel.
 | ||||||
|  |                                                       Unit: ADC clock cycles | ||||||
|  |                                                       Conversion time is the addition of sampling time and processing time (12 ADC clock cycles at ADC resolution 12 bits, 11 cycles at 10 bits, 9 cycles at 8 bits, 7 cycles at 6 bits). | ||||||
|  |                                                       This parameter can be a value of @ref ADC_sampling_times | ||||||
|  |                                                       Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups. | ||||||
|  |                                                                If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting. | ||||||
|  |                                                       Note: In case of usage of internal measurement channels (VrefInt/Vbat/TempSensor), | ||||||
|  |                                                             sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting) | ||||||
|  |                                                             Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 4us min). */ | ||||||
|  |   uint32_t InjectedOffset;                       /*!< Defines the offset to be subtracted from the raw converted data (for channels set on injected group only).
 | ||||||
|  |                                                       Offset value must be a positive number. | ||||||
|  |                                                       Depending of ADC resolution selected (12, 10, 8 or 6 bits), | ||||||
|  |                                                       this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */ | ||||||
|  |   uint32_t InjectedNbrOfConversion;              /*!< Specifies the number of ranks that will be converted within the injected group sequencer.
 | ||||||
|  |                                                       To use the injected group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled. | ||||||
|  |                                                       This parameter must be a number between Min_Data = 1 and Max_Data = 4. | ||||||
|  |                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to 
 | ||||||
|  |                                                                configure a channel on injected group can impact the configuration of other channels previously set. */ | ||||||
|  |   FunctionalState InjectedDiscontinuousConvMode; /*!< Specifies whether the conversions sequence of injected group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).
 | ||||||
|  |                                                       Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded. | ||||||
|  |                                                       Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded. | ||||||
|  |                                                       This parameter can be set to ENABLE or DISABLE. | ||||||
|  |                                                       Note: For injected group, number of discontinuous ranks increment is fixed to one-by-one. | ||||||
|  |                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to 
 | ||||||
|  |                                                                configure a channel on injected group can impact the configuration of other channels previously set. */ | ||||||
|  |   FunctionalState AutoInjectedConv;              /*!< Enables or disables the selected ADC automatic injected group conversion after regular one
 | ||||||
|  |                                                       This parameter can be set to ENABLE or DISABLE.      
 | ||||||
|  |                                                       Note: To use Automatic injected conversion, discontinuous mode must be disabled ('DiscontinuousConvMode' and 'InjectedDiscontinuousConvMode' set to DISABLE) | ||||||
|  |                                                       Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_SOFTWARE_START) | ||||||
|  |                                                       Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete. | ||||||
|  |                                                             To maintain JAUTO always enabled, DMA must be configured in circular mode. | ||||||
|  |                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | ||||||
|  |                                                                configure a channel on injected group can impact the configuration of other channels previously set. */ | ||||||
|  |   uint32_t ExternalTrigInjecConv;                /*!< Selects the external event used to trigger the conversion start of injected group.
 | ||||||
|  |                                                       If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled. | ||||||
|  |                                                       If set to external trigger source, triggering is on event rising edge. | ||||||
|  |                                                       This parameter can be a value of @ref ADCEx_External_trigger_Source_Injected | ||||||
|  |                                                       Note: This parameter must be modified when ADC is disabled (before ADC start conversion or after ADC stop conversion). | ||||||
|  |                                                             If ADC is enabled, this parameter setting is bypassed without error reporting (as it can be the expected behaviour in case of another parameter update on the fly) | ||||||
|  |                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | ||||||
|  |                                                                configure a channel on injected group can impact the configuration of other channels previously set. */ | ||||||
|  |   uint32_t ExternalTrigInjecConvEdge;            /*!< Selects the external trigger edge of injected group.
 | ||||||
|  |                                                       This parameter can be a value of @ref ADCEx_External_trigger_edge_Injected. | ||||||
|  |                                                       If trigger is set to ADC_INJECTED_SOFTWARE_START, this parameter is discarded. | ||||||
|  |                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to 
 | ||||||
|  |                                                                configure a channel on injected group can impact the configuration of other channels previously set. */ | ||||||
|  | }ADC_InjectionConfTypeDef; 
 | ||||||
|  | 
 | ||||||
|  | /** 
 | ||||||
|  |   * @brief ADC Configuration multi-mode structure definition  
 | ||||||
|  |   */ 
 | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   uint32_t Mode;              /*!< Configures the ADC to operate in independent or multi mode. 
 | ||||||
|  |                                    This parameter can be a value of @ref ADCEx_Common_mode */ | ||||||
|  |   uint32_t DMAAccessMode;     /*!< Configures the Direct memory access mode for multi ADC mode.
 | ||||||
|  |                                    This parameter can be a value of @ref ADCEx_Direct_memory_access_mode_for_multi_mode */ | ||||||
|  |   uint32_t TwoSamplingDelay;  /*!< Configures the Delay between 2 sampling phases.
 | ||||||
|  |                                    This parameter can be a value of @ref ADC_delay_between_2_sampling_phases */ | ||||||
|  | }ADC_MultiModeTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Exported constants --------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADCEx_Exported_Constants ADC Exported Constants
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADCEx_Common_mode ADC Common Mode
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_MODE_INDEPENDENT                  0x00000000U | ||||||
|  | #define ADC_DUALMODE_REGSIMULT_INJECSIMULT    ((uint32_t)ADC_CCR_MULTI_0) | ||||||
|  | #define ADC_DUALMODE_REGSIMULT_ALTERTRIG      ((uint32_t)ADC_CCR_MULTI_1) | ||||||
|  | #define ADC_DUALMODE_INJECSIMULT              ((uint32_t)(ADC_CCR_MULTI_2 | ADC_CCR_MULTI_0)) | ||||||
|  | #define ADC_DUALMODE_REGSIMULT                ((uint32_t)(ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1)) | ||||||
|  | #define ADC_DUALMODE_INTERL                   ((uint32_t)(ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1 | ADC_CCR_MULTI_0)) | ||||||
|  | #define ADC_DUALMODE_ALTERTRIG                ((uint32_t)(ADC_CCR_MULTI_3 | ADC_CCR_MULTI_0)) | ||||||
|  | #define ADC_TRIPLEMODE_REGSIMULT_INJECSIMULT  ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_0)) | ||||||
|  | #define ADC_TRIPLEMODE_REGSIMULT_AlterTrig    ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_1)) | ||||||
|  | #define ADC_TRIPLEMODE_INJECSIMULT            ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_0)) | ||||||
|  | #define ADC_TRIPLEMODE_REGSIMULT              ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1)) | ||||||
|  | #define ADC_TRIPLEMODE_INTERL                 ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1 | ADC_CCR_MULTI_0)) | ||||||
|  | #define ADC_TRIPLEMODE_ALTERTRIG              ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_3 | ADC_CCR_MULTI_0)) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADCEx_Direct_memory_access_mode_for_multi_mode ADC Direct Memory Access Mode For Multi Mode
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_DMAACCESSMODE_DISABLED  0x00000000U                /*!< DMA mode disabled */ | ||||||
|  | #define ADC_DMAACCESSMODE_1         ((uint32_t)ADC_CCR_DMA_0)  /*!< DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/ | ||||||
|  | #define ADC_DMAACCESSMODE_2         ((uint32_t)ADC_CCR_DMA_1)  /*!< DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2)*/ | ||||||
|  | #define ADC_DMAACCESSMODE_3         ((uint32_t)ADC_CCR_DMA)    /*!< DMA mode 3 enabled (2 / 3 bytes by pairs - 2&1 then 1&3 then 3&2) */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADCEx_External_trigger_edge_Injected ADC External Trigger Edge Injected
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONVEDGE_NONE           0x00000000U | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONVEDGE_RISING         ((uint32_t)ADC_CR2_JEXTEN_0) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONVEDGE_FALLING        ((uint32_t)ADC_CR2_JEXTEN_1) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONVEDGE_RISINGFALLING  ((uint32_t)ADC_CR2_JEXTEN) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADCEx_External_trigger_Source_Injected ADC External Trigger Source Injected
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T1_CC4           0x00000000U | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T1_TRGO          ((uint32_t)ADC_CR2_JEXTSEL_0) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T2_CC1           ((uint32_t)ADC_CR2_JEXTSEL_1) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T2_TRGO          ((uint32_t)(ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T3_CC2           ((uint32_t)ADC_CR2_JEXTSEL_2) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T3_CC4           ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T4_CC1           ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T4_CC2           ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T4_CC3           ((uint32_t)ADC_CR2_JEXTSEL_3) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T4_TRGO          ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T5_CC4           ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_1)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T5_TRGO          ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T8_CC2           ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T8_CC3           ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_T8_CC4           ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1)) | ||||||
|  | #define ADC_EXTERNALTRIGINJECCONV_EXT_IT15         ((uint32_t)ADC_CR2_JEXTSEL) | ||||||
|  | #define ADC_INJECTED_SOFTWARE_START                ((uint32_t)ADC_CR2_JEXTSEL + 1U) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADCEx_injected_rank ADC Injected Rank
 | ||||||
|  |   * @{ | ||||||
|  |   */ 
 | ||||||
|  | #define ADC_INJECTED_RANK_1    0x00000001U | ||||||
|  | #define ADC_INJECTED_RANK_2    0x00000002U | ||||||
|  | #define ADC_INJECTED_RANK_3    0x00000003U | ||||||
|  | #define ADC_INJECTED_RANK_4    0x00000004U | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup ADCEx_channels  ADC Specific Channels
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | ||||||
|  |     defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \
 | ||||||
|  |     defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \
 | ||||||
|  |     defined(STM32F412Cx) | ||||||
|  | #define ADC_CHANNEL_TEMPSENSOR  ((uint32_t)ADC_CHANNEL_16) | ||||||
|  | #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F412Zx || | ||||||
|  |           STM32F412Vx || STM32F412Rx || STM32F412Cx */ | ||||||
|  | 
 | ||||||
|  | #if defined(STM32F411xE) || defined(STM32F413xx) || defined(STM32F423xx) || defined(STM32F427xx) || defined(STM32F437xx) ||\ | ||||||
|  |     defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) 
 | ||||||
|  | #define ADC_CHANNEL_DIFFERENCIATION_TEMPSENSOR_VBAT 0x10000000U /* Dummy bit for driver internal usage, not used in ADC channel setting registers CR1 or SQRx */ | ||||||
|  | #define ADC_CHANNEL_TEMPSENSOR  ((uint32_t)ADC_CHANNEL_18 | ADC_CHANNEL_DIFFERENCIATION_TEMPSENSOR_VBAT) | ||||||
|  | #endif /* STM32F411xE || STM32F413xx || STM32F423xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /* Exported macro ------------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADC_Exported_Macros ADC Exported Macros
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | ||||||
|  | /**
 | ||||||
|  |   * @brief Disable internal path of ADC channel Vbat | ||||||
|  |   * @note  Use case of this macro: | ||||||
|  |   *        On devices STM32F42x and STM32F43x, ADC internal channels | ||||||
|  |   *        Vbat and VrefInt share the same internal path, only | ||||||
|  |   *        one of them can be enabled.This macro is to be used when ADC 
 | ||||||
|  |   *        channels Vbat and VrefInt are selected, and must be called 
 | ||||||
|  |   *        before starting conversion of ADC channel VrefInt in order 
 | ||||||
|  |   *        to disable ADC channel Vbat. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_ADC_PATH_INTERNAL_VBAT_DISABLE() (ADC->CCR &= ~(ADC_CCR_VBATE)) | ||||||
|  | #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /* Exported functions --------------------------------------------------------*/ | ||||||
|  | /** @addtogroup ADCEx_Exported_Functions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADCEx_Exported_Functions_Group1
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* I/O operation functions ******************************************************/ | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc); | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc); | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc); | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc); | ||||||
|  | uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank); | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length); | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc); | ||||||
|  | uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc); | ||||||
|  | void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc); | ||||||
|  | 
 | ||||||
|  | /* Peripheral Control functions *************************************************/ | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc,ADC_InjectionConfTypeDef* sConfigInjected); | ||||||
|  | HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_MultiModeTypeDef* multimode); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | /* Private types -------------------------------------------------------------*/ | ||||||
|  | /* Private variables ---------------------------------------------------------*/ | ||||||
|  | /* Private constants ---------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADCEx_Private_Constants ADC Private Constants
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private macros ------------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADCEx_Private_Macros ADC Private Macros
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | ||||||
|  |     defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \
 | ||||||
|  |     defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \
 | ||||||
|  |     defined(STM32F412Cx) | ||||||
|  | #define IS_ADC_CHANNEL(CHANNEL) ((CHANNEL) <= ADC_CHANNEL_18) | ||||||
|  | #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || | ||||||
|  |           STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ | ||||||
|  |       
 | ||||||
|  | #if defined(STM32F411xE) || defined(STM32F413xx) || defined(STM32F423xx) || defined(STM32F427xx) || \ | ||||||
|  |     defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) || \
 | ||||||
|  |     defined(STM32F469xx) || defined(STM32F479xx) | ||||||
|  | #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) <= ADC_CHANNEL_18)  || \ | ||||||
|  |                                  ((CHANNEL) == ADC_CHANNEL_TEMPSENSOR)) | ||||||
|  | #endif /* STM32F411xE || STM32F413xx || STM32F423xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ | ||||||
|  | 
 | ||||||
|  | #define IS_ADC_MODE(MODE) (((MODE) == ADC_MODE_INDEPENDENT)                 || \ | ||||||
|  |                            ((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT)   || \
 | ||||||
|  |                            ((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG)     || \
 | ||||||
|  |                            ((MODE) == ADC_DUALMODE_INJECSIMULT)             || \
 | ||||||
|  |                            ((MODE) == ADC_DUALMODE_REGSIMULT)               || \
 | ||||||
|  |                            ((MODE) == ADC_DUALMODE_INTERL)                  || \
 | ||||||
|  |                            ((MODE) == ADC_DUALMODE_ALTERTRIG)               || \
 | ||||||
|  |                            ((MODE) == ADC_TRIPLEMODE_REGSIMULT_INJECSIMULT) || \
 | ||||||
|  |                            ((MODE) == ADC_TRIPLEMODE_REGSIMULT_AlterTrig)   || \
 | ||||||
|  |                            ((MODE) == ADC_TRIPLEMODE_INJECSIMULT)           || \
 | ||||||
|  |                            ((MODE) == ADC_TRIPLEMODE_REGSIMULT)             || \
 | ||||||
|  |                            ((MODE) == ADC_TRIPLEMODE_INTERL)                || \
 | ||||||
|  |                            ((MODE) == ADC_TRIPLEMODE_ALTERTRIG)) | ||||||
|  | #define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAACCESSMODE_DISABLED) || \ | ||||||
|  |                                       ((MODE) == ADC_DMAACCESSMODE_1)        || \
 | ||||||
|  |                                       ((MODE) == ADC_DMAACCESSMODE_2)        || \
 | ||||||
|  |                                       ((MODE) == ADC_DMAACCESSMODE_3)) | ||||||
|  | #define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_NONE)    || \ | ||||||
|  |                                           ((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISING)  || \
 | ||||||
|  |                                           ((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_FALLING) || \
 | ||||||
|  |                                           ((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISINGFALLING)) | ||||||
|  | #define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4)  || \ | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC2)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC1)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC2)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO) || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC3)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4)  || \
 | ||||||
|  |                                         ((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15)|| \
 | ||||||
|  |                                         ((INJTRIG) == ADC_INJECTED_SOFTWARE_START)) | ||||||
|  | #define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 4U)) | ||||||
|  | #define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= 1U) && ((RANK) <= 4U)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set the selected injected Channel rank. | ||||||
|  |   * @param  _CHANNELNB_ Channel number. | ||||||
|  |   * @param  _RANKNB_ Rank number. 
 | ||||||
|  |   * @param  _JSQR_JL_ Sequence length. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define   ADC_JSQR(_CHANNELNB_, _RANKNB_, _JSQR_JL_)  (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * (uint8_t)(((_RANKNB_) + 3U) - (_JSQR_JL_)))) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Defines if the selected ADC is within ADC common register ADC123 or ADC1 | ||||||
|  |   * if available (ADC2, ADC3 availability depends on STM32 product) | ||||||
|  |   * @param __HANDLE__ ADC handle | ||||||
|  |   * @retval Common control register ADC123 or ADC1 | ||||||
|  |   */ | ||||||
|  | #if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F429xx) || defined(STM32F437xx) || defined(STM32F439xx) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) | ||||||
|  | #define ADC_COMMON_REGISTER(__HANDLE__)                ADC123_COMMON | ||||||
|  | #else | ||||||
|  | #define ADC_COMMON_REGISTER(__HANDLE__)                ADC1_COMMON | ||||||
|  | #endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx || STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private functions ---------------------------------------------------------*/ | ||||||
|  | /** @defgroup ADCEx_Private_Functions ADC Private Functions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /*__STM32F4xx_ADC_EX_H */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,915 @@ | |||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    stm32f4xx_hal_rtc.h | ||||||
|  |   * @author  MCD Application Team | ||||||
|  |   * @brief   Header file of RTC HAL module. | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2017 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Define to prevent recursive inclusion -------------------------------------*/ | ||||||
|  | #ifndef STM32F4xx_HAL_RTC_H | ||||||
|  | #define STM32F4xx_HAL_RTC_H | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | #include "stm32f4xx_hal_def.h" | ||||||
|  | 
 | ||||||
|  | /** @addtogroup STM32F4xx_HAL_Driver
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup RTC
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Exported types ------------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Exported_Types RTC Exported Types
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  HAL State structures definition | ||||||
|  |   */ | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   HAL_RTC_STATE_RESET             = 0x00U,  /*!< RTC not yet initialized or disabled */ | ||||||
|  |   HAL_RTC_STATE_READY             = 0x01U,  /*!< RTC initialized and ready for use   */ | ||||||
|  |   HAL_RTC_STATE_BUSY              = 0x02U,  /*!< RTC process is ongoing              */ | ||||||
|  |   HAL_RTC_STATE_TIMEOUT           = 0x03U,  /*!< RTC timeout state                   */ | ||||||
|  |   HAL_RTC_STATE_ERROR             = 0x04U   /*!< RTC error state                     */ | ||||||
|  | } HAL_RTCStateTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  RTC Configuration Structure definition | ||||||
|  |   */ | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   uint32_t HourFormat;      /*!< Specifies the RTC Hour Format.
 | ||||||
|  |                                  This parameter can be a value of @ref RTC_Hour_Formats */ | ||||||
|  | 
 | ||||||
|  |   uint32_t AsynchPrediv;    /*!< Specifies the RTC Asynchronous Predivider value.
 | ||||||
|  |                                  This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7F */ | ||||||
|  | 
 | ||||||
|  |   uint32_t SynchPrediv;     /*!< Specifies the RTC Synchronous Predivider value.
 | ||||||
|  |                                  This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x7FFF */ | ||||||
|  | 
 | ||||||
|  |   uint32_t OutPut;          /*!< Specifies which signal will be routed to the RTC output.
 | ||||||
|  |                                  This parameter can be a value of @ref RTC_Output_selection_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint32_t OutPutPolarity;  /*!< Specifies the polarity of the output signal.
 | ||||||
|  |                                  This parameter can be a value of @ref RTC_Output_Polarity_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint32_t OutPutType;      /*!< Specifies the RTC Output Pin mode.
 | ||||||
|  |                                  This parameter can be a value of @ref RTC_Output_Type_ALARM_OUT */ | ||||||
|  | } RTC_InitTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  RTC Time structure definition | ||||||
|  |   */ | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   uint8_t Hours;            /*!< Specifies the RTC Time Hour.
 | ||||||
|  |                                  This parameter must be a number between Min_Data = 0 and Max_Data = 12 if the RTC_HourFormat_12 is selected | ||||||
|  |                                  This parameter must be a number between Min_Data = 0 and Max_Data = 23 if the RTC_HourFormat_24 is selected */ | ||||||
|  | 
 | ||||||
|  |   uint8_t Minutes;          /*!< Specifies the RTC Time Minutes.
 | ||||||
|  |                                  This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ | ||||||
|  | 
 | ||||||
|  |   uint8_t Seconds;          /*!< Specifies the RTC Time Seconds.
 | ||||||
|  |                                  This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ | ||||||
|  | 
 | ||||||
|  |   uint8_t TimeFormat;       /*!< Specifies the RTC AM/PM Time.
 | ||||||
|  |                                  This parameter can be a value of @ref RTC_AM_PM_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint32_t SubSeconds;      /*!< Specifies the RTC_SSR RTC Sub Second register content.
 | ||||||
|  |                                  This parameter corresponds to a time unit range between [0-1] Second | ||||||
|  |                                  with [1 Sec / SecondFraction +1] granularity */ | ||||||
|  | 
 | ||||||
|  |   uint32_t SecondFraction;  /*!< Specifies the range or granularity of Sub Second register content
 | ||||||
|  |                                  corresponding to Synchronous prescaler factor value (PREDIV_S) | ||||||
|  |                                  This parameter corresponds to a time unit range between [0-1] Second | ||||||
|  |                                  with [1 Sec / SecondFraction +1] granularity. | ||||||
|  |                                  This field will be used only by HAL_RTC_GetTime function */ | ||||||
|  | 
 | ||||||
|  |   uint32_t DayLightSaving;  /*!< This interface is deprecated. To manage Daylight
 | ||||||
|  |                                  Saving Time, please use HAL_RTC_DST_xxx functions */ | ||||||
|  | 
 | ||||||
|  |   uint32_t StoreOperation;  /*!< This interface is deprecated. To manage Daylight
 | ||||||
|  |                                  Saving Time, please use HAL_RTC_DST_xxx functions */ | ||||||
|  | } RTC_TimeTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  RTC Date structure definition | ||||||
|  |   */ | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   uint8_t WeekDay;  /*!< Specifies the RTC Date WeekDay.
 | ||||||
|  |                          This parameter can be a value of @ref RTC_WeekDay_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint8_t Month;    /*!< Specifies the RTC Date Month (in BCD format).
 | ||||||
|  |                          This parameter can be a value of @ref RTC_Month_Date_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint8_t Date;     /*!< Specifies the RTC Date.
 | ||||||
|  |                          This parameter must be a number between Min_Data = 1 and Max_Data = 31 */ | ||||||
|  | 
 | ||||||
|  |   uint8_t Year;     /*!< Specifies the RTC Date Year.
 | ||||||
|  |                          This parameter must be a number between Min_Data = 0 and Max_Data = 99 */ | ||||||
|  | 
 | ||||||
|  | } RTC_DateTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  RTC Alarm structure definition | ||||||
|  |   */ | ||||||
|  | typedef struct | ||||||
|  | { | ||||||
|  |   RTC_TimeTypeDef AlarmTime;     /*!< Specifies the RTC Alarm Time members */ | ||||||
|  | 
 | ||||||
|  |   uint32_t AlarmMask;            /*!< Specifies the RTC Alarm Masks.
 | ||||||
|  |                                       This parameter can be a value of @ref RTC_AlarmMask_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint32_t AlarmSubSecondMask;   /*!< Specifies the RTC Alarm SubSeconds Masks.
 | ||||||
|  |                                       This parameter can be a value of @ref RTC_Alarm_Sub_Seconds_Masks_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint32_t AlarmDateWeekDaySel;  /*!< Specifies the RTC Alarm is on Date or WeekDay.
 | ||||||
|  |                                       This parameter can be a value of @ref RTC_AlarmDateWeekDay_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint8_t AlarmDateWeekDay;      /*!< Specifies the RTC Alarm Date/WeekDay.
 | ||||||
|  |                                       If the Alarm Date is selected, this parameter must be set to a value in the 1-31 range. | ||||||
|  |                                       If the Alarm WeekDay is selected, this parameter can be a value of @ref RTC_WeekDay_Definitions */ | ||||||
|  | 
 | ||||||
|  |   uint32_t Alarm;                /*!< Specifies the alarm .
 | ||||||
|  |                                       This parameter can be a value of @ref RTC_Alarms_Definitions */ | ||||||
|  | } RTC_AlarmTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  RTC Handle Structure definition | ||||||
|  |   */ | ||||||
|  | #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | ||||||
|  | typedef struct __RTC_HandleTypeDef | ||||||
|  | #else | ||||||
|  | typedef struct | ||||||
|  | #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | ||||||
|  | { | ||||||
|  |   RTC_TypeDef                 *Instance;  /*!< Register base address    */ | ||||||
|  | 
 | ||||||
|  |   RTC_InitTypeDef             Init;       /*!< RTC required parameters  */ | ||||||
|  | 
 | ||||||
|  |   HAL_LockTypeDef             Lock;       /*!< RTC locking object       */ | ||||||
|  | 
 | ||||||
|  |   __IO HAL_RTCStateTypeDef    State;      /*!< Time communication state */ | ||||||
|  | 
 | ||||||
|  | #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | ||||||
|  |   void (* AlarmAEventCallback)      (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Alarm A Event callback         */ | ||||||
|  | 
 | ||||||
|  |   void (* AlarmBEventCallback)      (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Alarm B Event callback         */ | ||||||
|  | 
 | ||||||
|  |   void (* TimeStampEventCallback)   (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Timestamp Event callback       */ | ||||||
|  | 
 | ||||||
|  |   void (* WakeUpTimerEventCallback) (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC WakeUpTimer Event callback     */ | ||||||
|  | 
 | ||||||
|  |   void (* Tamper1EventCallback)     (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Tamper 1 Event callback        */ | ||||||
|  | 
 | ||||||
|  | #if defined(RTC_TAMPER2_SUPPORT) | ||||||
|  |   void (* Tamper2EventCallback)     (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Tamper 2 Event callback        */ | ||||||
|  | #endif /* RTC_TAMPER2_SUPPORT */ | ||||||
|  | 
 | ||||||
|  |   void (* MspInitCallback)          (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Msp Init callback              */ | ||||||
|  | 
 | ||||||
|  |   void (* MspDeInitCallback)        (struct __RTC_HandleTypeDef *hrtc);  /*!< RTC Msp DeInit callback            */ | ||||||
|  | 
 | ||||||
|  | #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | ||||||
|  | 
 | ||||||
|  | } RTC_HandleTypeDef; | ||||||
|  | 
 | ||||||
|  | #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | ||||||
|  | /**
 | ||||||
|  |   * @brief  HAL RTC Callback ID enumeration definition | ||||||
|  |   */ | ||||||
|  | typedef enum | ||||||
|  | { | ||||||
|  |   HAL_RTC_ALARM_A_EVENT_CB_ID           = 0x00U,    /*!< RTC Alarm A Event Callback ID       */ | ||||||
|  |   HAL_RTC_ALARM_B_EVENT_CB_ID           = 0x01U,    /*!< RTC Alarm B Event Callback ID       */ | ||||||
|  |   HAL_RTC_TIMESTAMP_EVENT_CB_ID         = 0x02U,    /*!< RTC Timestamp Event Callback ID     */ | ||||||
|  |   HAL_RTC_WAKEUPTIMER_EVENT_CB_ID       = 0x03U,    /*!< RTC Wakeup Timer Event Callback ID  */ | ||||||
|  |   HAL_RTC_TAMPER1_EVENT_CB_ID           = 0x04U,    /*!< RTC Tamper 1 Callback ID            */ | ||||||
|  | #if defined(RTC_TAMPER2_SUPPORT) | ||||||
|  |   HAL_RTC_TAMPER2_EVENT_CB_ID           = 0x05U,    /*!< RTC Tamper 2 Callback ID            */ | ||||||
|  | #endif /* RTC_TAMPER2_SUPPORT */ | ||||||
|  |   HAL_RTC_MSPINIT_CB_ID                 = 0x0EU,    /*!< RTC Msp Init callback ID            */ | ||||||
|  |   HAL_RTC_MSPDEINIT_CB_ID               = 0x0FU     /*!< RTC Msp DeInit callback ID          */ | ||||||
|  | } HAL_RTC_CallbackIDTypeDef; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  HAL RTC Callback pointer definition | ||||||
|  |   */ | ||||||
|  | typedef  void (*pRTC_CallbackTypeDef)(RTC_HandleTypeDef *hrtc);  /*!< pointer to an RTC callback function */ | ||||||
|  | #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Exported constants --------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Exported_Constants RTC Exported Constants
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Hour_Formats RTC Hour Formats
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_HOURFORMAT_24              0x00000000U | ||||||
|  | #define RTC_HOURFORMAT_12              RTC_CR_FMT | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Output_selection_Definitions RTC Output Selection Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_OUTPUT_DISABLE             0x00000000U | ||||||
|  | #define RTC_OUTPUT_ALARMA              RTC_CR_OSEL_0 | ||||||
|  | #define RTC_OUTPUT_ALARMB              RTC_CR_OSEL_1 | ||||||
|  | #define RTC_OUTPUT_WAKEUP              RTC_CR_OSEL | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Output_Polarity_Definitions RTC Output Polarity Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_OUTPUT_POLARITY_HIGH       0x00000000U | ||||||
|  | #define RTC_OUTPUT_POLARITY_LOW        RTC_CR_POL | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Output_Type_ALARM_OUT RTC Output Type ALARM OUT
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_OUTPUT_TYPE_OPENDRAIN      0x00000000U | ||||||
|  | #define RTC_OUTPUT_TYPE_PUSHPULL       RTC_TAFCR_ALARMOUTTYPE | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_AM_PM_Definitions RTC AM PM Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_HOURFORMAT12_AM            ((uint8_t)0x00) | ||||||
|  | #define RTC_HOURFORMAT12_PM            ((uint8_t)0x01) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_DayLightSaving_Definitions RTC DayLight Saving Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_DAYLIGHTSAVING_SUB1H       RTC_CR_SUB1H | ||||||
|  | #define RTC_DAYLIGHTSAVING_ADD1H       RTC_CR_ADD1H | ||||||
|  | #define RTC_DAYLIGHTSAVING_NONE        0x00000000U | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_StoreOperation_Definitions RTC Store Operation Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_STOREOPERATION_RESET        0x00000000U | ||||||
|  | #define RTC_STOREOPERATION_SET          RTC_CR_BKP | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Input_parameter_format_definitions RTC Input Parameter Format Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_FORMAT_BIN                  0x00000000U | ||||||
|  | #define RTC_FORMAT_BCD                  0x00000001U | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Month_Date_Definitions RTC Month Date Definitions (in BCD format)
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_MONTH_JANUARY              ((uint8_t)0x01) | ||||||
|  | #define RTC_MONTH_FEBRUARY             ((uint8_t)0x02) | ||||||
|  | #define RTC_MONTH_MARCH                ((uint8_t)0x03) | ||||||
|  | #define RTC_MONTH_APRIL                ((uint8_t)0x04) | ||||||
|  | #define RTC_MONTH_MAY                  ((uint8_t)0x05) | ||||||
|  | #define RTC_MONTH_JUNE                 ((uint8_t)0x06) | ||||||
|  | #define RTC_MONTH_JULY                 ((uint8_t)0x07) | ||||||
|  | #define RTC_MONTH_AUGUST               ((uint8_t)0x08) | ||||||
|  | #define RTC_MONTH_SEPTEMBER            ((uint8_t)0x09) | ||||||
|  | #define RTC_MONTH_OCTOBER              ((uint8_t)0x10) | ||||||
|  | #define RTC_MONTH_NOVEMBER             ((uint8_t)0x11) | ||||||
|  | #define RTC_MONTH_DECEMBER             ((uint8_t)0x12) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_WeekDay_Definitions RTC WeekDay Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_WEEKDAY_MONDAY             ((uint8_t)0x01) | ||||||
|  | #define RTC_WEEKDAY_TUESDAY            ((uint8_t)0x02) | ||||||
|  | #define RTC_WEEKDAY_WEDNESDAY          ((uint8_t)0x03) | ||||||
|  | #define RTC_WEEKDAY_THURSDAY           ((uint8_t)0x04) | ||||||
|  | #define RTC_WEEKDAY_FRIDAY             ((uint8_t)0x05) | ||||||
|  | #define RTC_WEEKDAY_SATURDAY           ((uint8_t)0x06) | ||||||
|  | #define RTC_WEEKDAY_SUNDAY             ((uint8_t)0x07) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_AlarmDateWeekDay_Definitions RTC Alarm Date WeekDay Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_ALARMDATEWEEKDAYSEL_DATE      0x00000000U | ||||||
|  | #define RTC_ALARMDATEWEEKDAYSEL_WEEKDAY   RTC_ALRMAR_WDSEL | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_AlarmMask_Definitions RTC Alarm Mask Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_ALARMMASK_NONE                0x00000000U | ||||||
|  | #define RTC_ALARMMASK_DATEWEEKDAY         RTC_ALRMAR_MSK4 | ||||||
|  | #define RTC_ALARMMASK_HOURS               RTC_ALRMAR_MSK3 | ||||||
|  | #define RTC_ALARMMASK_MINUTES             RTC_ALRMAR_MSK2 | ||||||
|  | #define RTC_ALARMMASK_SECONDS             RTC_ALRMAR_MSK1 | ||||||
|  | #define RTC_ALARMMASK_ALL                 (RTC_ALARMMASK_DATEWEEKDAY | \ | ||||||
|  |                                            RTC_ALARMMASK_HOURS       | \
 | ||||||
|  |                                            RTC_ALARMMASK_MINUTES     | \
 | ||||||
|  |                                            RTC_ALARMMASK_SECONDS) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Alarms_Definitions RTC Alarms Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_ALARM_A                       RTC_CR_ALRAE | ||||||
|  | #define RTC_ALARM_B                       RTC_CR_ALRBE | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Alarm_Sub_Seconds_Masks_Definitions RTC Alarm Sub Seconds Masks Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /*!< All Alarm SS fields are masked. There is no comparison on sub seconds for Alarm */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_ALL         0x00000000U | ||||||
|  | /*!< SS[14:1] are don't care in Alarm comparison. Only SS[0] is compared.     */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_1      RTC_ALRMASSR_MASKSS_0 | ||||||
|  | /*!< SS[14:2] are don't care in Alarm comparison. Only SS[1:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_2      RTC_ALRMASSR_MASKSS_1 | ||||||
|  | /*!< SS[14:3] are don't care in Alarm comparison. Only SS[2:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_3      (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_1) | ||||||
|  | /*!< SS[14:4] are don't care in Alarm comparison. Only SS[3:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_4      RTC_ALRMASSR_MASKSS_2 | ||||||
|  | /*!< SS[14:5] are don't care in Alarm comparison. Only SS[4:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_5      (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_2) | ||||||
|  | /*!< SS[14:6] are don't care in Alarm comparison. Only SS[5:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_6      (RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_2) | ||||||
|  | /*!< SS[14:7] are don't care in Alarm comparison. Only SS[6:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_7      (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_2) | ||||||
|  | /*!< SS[14:8] are don't care in Alarm comparison. Only SS[7:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_8      RTC_ALRMASSR_MASKSS_3 | ||||||
|  | /*!< SS[14:9] are don't care in Alarm comparison. Only SS[8:0] are compared.  */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_9      (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_3) | ||||||
|  | /*!< SS[14:10] are don't care in Alarm comparison. Only SS[9:0] are compared. */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_10     (RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_3) | ||||||
|  | /*!< SS[14:11] are don't care in Alarm comparison. Only SS[10:0] are compared. */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_11     (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_3) | ||||||
|  | /*!< SS[14:12] are don't care in Alarm comparison. Only SS[11:0] are compared. */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_12     (RTC_ALRMASSR_MASKSS_2 | RTC_ALRMASSR_MASKSS_3) | ||||||
|  | /*!< SS[14:13] are don't care in Alarm comparison. Only SS[12:0] are compared. */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14_13     (RTC_ALRMASSR_MASKSS_0 | RTC_ALRMASSR_MASKSS_2 | RTC_ALRMASSR_MASKSS_3) | ||||||
|  | /*!< SS[14] is don't care in Alarm comparison. Only SS[13:0] are compared. */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_SS14        (RTC_ALRMASSR_MASKSS_1 | RTC_ALRMASSR_MASKSS_2 | RTC_ALRMASSR_MASKSS_3) | ||||||
|  | /*!< SS[14:0] are compared and must match to activate alarm. */ | ||||||
|  | #define RTC_ALARMSUBSECONDMASK_NONE        RTC_ALRMASSR_MASKSS | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Interrupts_Definitions RTC Interrupts Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_IT_TS                         RTC_CR_TSIE         /*!< Enable Timestamp Interrupt               */ | ||||||
|  | #define RTC_IT_WUT                        RTC_CR_WUTIE        /*!< Enable Wakeup timer Interrupt            */ | ||||||
|  | #define RTC_IT_ALRB                       RTC_CR_ALRBIE       /*!< Enable Alarm B Interrupt                 */ | ||||||
|  | #define RTC_IT_ALRA                       RTC_CR_ALRAIE       /*!< Enable Alarm A Interrupt                 */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Flags_Definitions RTC Flags Definitions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define RTC_FLAG_RECALPF                  RTC_ISR_RECALPF     /*!< Recalibration pending flag               */ | ||||||
|  | #if defined(RTC_TAMPER2_SUPPORT) | ||||||
|  | #define RTC_FLAG_TAMP2F                   RTC_ISR_TAMP2F      /*!< Tamper 2 event flag                      */ | ||||||
|  | #endif /* RTC_TAMPER2_SUPPORT */ | ||||||
|  | #define RTC_FLAG_TAMP1F                   RTC_ISR_TAMP1F      /*!< Tamper 1 event flag                      */ | ||||||
|  | #define RTC_FLAG_TSOVF                    RTC_ISR_TSOVF       /*!< Timestamp overflow flag                  */ | ||||||
|  | #define RTC_FLAG_TSF                      RTC_ISR_TSF         /*!< Timestamp event flag                     */ | ||||||
|  | #define RTC_FLAG_WUTF                     RTC_ISR_WUTF        /*!< Wakeup timer event flag                  */ | ||||||
|  | #define RTC_FLAG_ALRBF                    RTC_ISR_ALRBF       /*!< Alarm B event flag                       */ | ||||||
|  | #define RTC_FLAG_ALRAF                    RTC_ISR_ALRAF       /*!< Alarm A event flag                       */ | ||||||
|  | #define RTC_FLAG_INITF                    RTC_ISR_INITF       /*!< RTC in initialization mode flag          */ | ||||||
|  | #define RTC_FLAG_RSF                      RTC_ISR_RSF         /*!< Register synchronization flag            */ | ||||||
|  | #define RTC_FLAG_INITS                    RTC_ISR_INITS       /*!< RTC initialization status flag           */ | ||||||
|  | #define RTC_FLAG_SHPF                     RTC_ISR_SHPF        /*!< Shift operation pending flag             */ | ||||||
|  | #define RTC_FLAG_WUTWF                    RTC_ISR_WUTWF       /*!< WUTR register write allowance flag       */ | ||||||
|  | #define RTC_FLAG_ALRBWF                   RTC_ISR_ALRBWF      /*!< ALRMBR register write allowance flag     */ | ||||||
|  | #define RTC_FLAG_ALRAWF                   RTC_ISR_ALRAWF      /*!< ALRMAR register write allowance flag     */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Exported macros -----------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Exported_Macros RTC Exported Macros
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @brief Reset RTC handle state
 | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | ||||||
|  | #define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) do {                                            \ | ||||||
|  |                                                       (__HANDLE__)->State = HAL_RTC_STATE_RESET; \
 | ||||||
|  |                                                       (__HANDLE__)->MspInitCallback = NULL;      \
 | ||||||
|  |                                                       (__HANDLE__)->MspDeInitCallback = NULL;    \
 | ||||||
|  |                                                     } while(0U) | ||||||
|  | #else | ||||||
|  | #define __HAL_RTC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_RTC_STATE_RESET) | ||||||
|  | #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable the write protection for RTC registers. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__) do {                                       \ | ||||||
|  |                                                            (__HANDLE__)->Instance->WPR = 0xCAU;  \
 | ||||||
|  |                                                            (__HANDLE__)->Instance->WPR = 0x53U;  \
 | ||||||
|  |                                                          } while(0U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the write protection for RTC registers. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__) do {                                       \ | ||||||
|  |                                                           (__HANDLE__)->Instance->WPR = 0xFFU;  \
 | ||||||
|  |                                                         } while(0U) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the RTC ALARMA peripheral. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARMA_ENABLE(__HANDLE__)                           ((__HANDLE__)->Instance->CR |= (RTC_CR_ALRAE)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable the RTC ALARMA peripheral. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARMA_DISABLE(__HANDLE__)                          ((__HANDLE__)->Instance->CR &= ~(RTC_CR_ALRAE)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the RTC ALARMB peripheral. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARMB_ENABLE(__HANDLE__)                           ((__HANDLE__)->Instance->CR |= (RTC_CR_ALRBE)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable the RTC ALARMB peripheral. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARMB_DISABLE(__HANDLE__)                          ((__HANDLE__)->Instance->CR &= ~(RTC_CR_ALRBE)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable the RTC Alarm interrupt. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt sources to be enabled or disabled. | ||||||
|  |   *          This parameter can be any combination of the following values: | ||||||
|  |   *             @arg RTC_IT_ALRA: Alarm A interrupt | ||||||
|  |   *             @arg RTC_IT_ALRB: Alarm B interrupt | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_ENABLE_IT(__HANDLE__, __INTERRUPT__)          ((__HANDLE__)->Instance->CR |= (__INTERRUPT__)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable the RTC Alarm interrupt. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt sources to be enabled or disabled. | ||||||
|  |   *          This parameter can be any combination of the following values: | ||||||
|  |   *             @arg RTC_IT_ALRA: Alarm A interrupt | ||||||
|  |   *             @arg RTC_IT_ALRB: Alarm B interrupt | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_DISABLE_IT(__HANDLE__, __INTERRUPT__)         ((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Check whether the specified RTC Alarm interrupt has occurred or not. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt to check. | ||||||
|  |   *         This parameter can be: | ||||||
|  |   *            @arg RTC_IT_ALRA: Alarm A interrupt | ||||||
|  |   *            @arg RTC_IT_ALRB: Alarm B interrupt | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_GET_IT(__HANDLE__, __INTERRUPT__)           (((((__HANDLE__)->Instance->ISR) & ((__INTERRUPT__) >> 4U)) != 0U) ? 1U : 0U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Get the selected RTC Alarm's flag status. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @param  __FLAG__ specifies the RTC Alarm Flag to check. | ||||||
|  |   *         This parameter can be: | ||||||
|  |   *            @arg RTC_FLAG_ALRAF: Alarm A interrupt flag | ||||||
|  |   *            @arg RTC_FLAG_ALRAWF: Alarm A 'write allowed' flag | ||||||
|  |   *            @arg RTC_FLAG_ALRBF: Alarm B interrupt flag | ||||||
|  |   *            @arg RTC_FLAG_ALRBWF: Alarm B 'write allowed' flag | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_GET_FLAG(__HANDLE__, __FLAG__)                (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) != 0U) ? 1U : 0U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Clear the RTC Alarm's pending flags. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @param  __FLAG__ specifies the RTC Alarm flag to be cleared. | ||||||
|  |   *          This parameter can be: | ||||||
|  |   *             @arg RTC_FLAG_ALRAF | ||||||
|  |   *             @arg RTC_FLAG_ALRBF | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_CLEAR_FLAG(__HANDLE__, __FLAG__)                  ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT)) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Check whether the specified RTC Alarm interrupt has been enabled or not. | ||||||
|  |   * @param  __HANDLE__ specifies the RTC handle. | ||||||
|  |   * @param  __INTERRUPT__ specifies the RTC Alarm interrupt sources to check. | ||||||
|  |   *         This parameter can be: | ||||||
|  |   *            @arg RTC_IT_ALRA: Alarm A interrupt | ||||||
|  |   *            @arg RTC_IT_ALRB: Alarm B interrupt | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)     (((((__HANDLE__)->Instance->CR) & (__INTERRUPT__)) != 0U) ? 1U : 0U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable interrupt on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_ENABLE_IT()            (EXTI->IMR |= RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable interrupt on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_DISABLE_IT()           (EXTI->IMR &= ~RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable event on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_ENABLE_EVENT()          (EXTI->EMR |= RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable event on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_DISABLE_EVENT()         (EXTI->EMR &= ~RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable falling edge trigger on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE()   (EXTI->FTSR |= RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable falling edge trigger on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE()  (EXTI->FTSR &= ~RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable rising edge trigger on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE()    (EXTI->RTSR |= RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable rising edge trigger on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE()   (EXTI->RTSR &= ~RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Enable rising & falling edge trigger on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_FALLING_EDGE() do {                                             \ | ||||||
|  |                                                                __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE();  \
 | ||||||
|  |                                                                __HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE(); \
 | ||||||
|  |                                                              } while(0U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Disable rising & falling edge trigger on the RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_FALLING_EDGE() do {                                              \ | ||||||
|  |                                                                 __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE();  \
 | ||||||
|  |                                                                 __HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE(); \
 | ||||||
|  |                                                               } while(0U) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Check whether the RTC Alarm associated EXTI line interrupt flag is set or not. | ||||||
|  |   * @retval Line Status. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_GET_FLAG()              (EXTI->PR & RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Clear the RTC Alarm associated EXTI line flag. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_CLEAR_FLAG()            (EXTI->PR = RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief Generate a Software interrupt on RTC Alarm associated EXTI line. | ||||||
|  |   * @retval None. | ||||||
|  |   */ | ||||||
|  | #define __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()         (EXTI->SWIER |= RTC_EXTI_LINE_ALARM_EVENT) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Include RTC HAL Extended module */ | ||||||
|  | #include "stm32f4xx_hal_rtc_ex.h" | ||||||
|  | 
 | ||||||
|  | /* Exported functions --------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup RTC_Exported_Functions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup RTC_Exported_Functions_Group1
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Initialization and de-initialization functions  ****************************/ | ||||||
|  | HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc); | ||||||
|  | void              HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc); | ||||||
|  | void              HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc); | ||||||
|  | 
 | ||||||
|  | /* Callbacks Register/UnRegister functions  ***********************************/ | ||||||
|  | #if (USE_HAL_RTC_REGISTER_CALLBACKS == 1) | ||||||
|  | HAL_StatusTypeDef HAL_RTC_RegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID, pRTC_CallbackTypeDef pCallback); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_UnRegisterCallback(RTC_HandleTypeDef *hrtc, HAL_RTC_CallbackIDTypeDef CallbackID); | ||||||
|  | #endif /* USE_HAL_RTC_REGISTER_CALLBACKS */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup RTC_Exported_Functions_Group2
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* RTC Time and Date functions ************************************************/ | ||||||
|  | HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup RTC_Exported_Functions_Group3
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* RTC Alarm functions ********************************************************/ | ||||||
|  | HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_DeactivateAlarm(RTC_HandleTypeDef *hrtc, uint32_t Alarm); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm, uint32_t Format); | ||||||
|  | void              HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef *hrtc); | ||||||
|  | HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout); | ||||||
|  | void              HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup RTC_Exported_Functions_Group4
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Peripheral Control functions ***********************************************/ | ||||||
|  | HAL_StatusTypeDef   HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc); | ||||||
|  | 
 | ||||||
|  | /* RTC Daylight Saving Time functions *****************************************/ | ||||||
|  | void              HAL_RTC_DST_Add1Hour(RTC_HandleTypeDef *hrtc); | ||||||
|  | void              HAL_RTC_DST_Sub1Hour(RTC_HandleTypeDef *hrtc); | ||||||
|  | void              HAL_RTC_DST_SetStoreOperation(RTC_HandleTypeDef *hrtc); | ||||||
|  | void              HAL_RTC_DST_ClearStoreOperation(RTC_HandleTypeDef *hrtc); | ||||||
|  | uint32_t          HAL_RTC_DST_ReadStoreOperation(RTC_HandleTypeDef *hrtc); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup RTC_Exported_Functions_Group5
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Peripheral State functions *************************************************/ | ||||||
|  | HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef *hrtc); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private types -------------------------------------------------------------*/ | ||||||
|  | /* Private variables ---------------------------------------------------------*/ | ||||||
|  | /* Private constants ---------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Private_Constants RTC Private Constants
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | /* Masks Definition */ | ||||||
|  | #define RTC_TR_RESERVED_MASK    ((uint32_t)(RTC_TR_HT  | RTC_TR_HU  | \ | ||||||
|  |                                             RTC_TR_MNT | RTC_TR_MNU | \
 | ||||||
|  |                                             RTC_TR_ST  | RTC_TR_SU  | \
 | ||||||
|  |                                             RTC_TR_PM)) | ||||||
|  | #define RTC_DR_RESERVED_MASK    ((uint32_t)(RTC_DR_YT | RTC_DR_YU | \ | ||||||
|  |                                             RTC_DR_MT | RTC_DR_MU | \
 | ||||||
|  |                                             RTC_DR_DT | RTC_DR_DU | \
 | ||||||
|  |                                             RTC_DR_WDU)) | ||||||
|  | #define RTC_INIT_MASK           0xFFFFFFFFU | ||||||
|  | #define RTC_RSF_MASK            ((uint32_t)~(RTC_ISR_INIT | RTC_ISR_RSF)) | ||||||
|  | #define RTC_FLAGS_MASK          ((uint32_t)(RTC_FLAG_INITF   | RTC_FLAG_INITS  | \ | ||||||
|  |                                             RTC_FLAG_ALRAF   | RTC_FLAG_ALRAWF | \
 | ||||||
|  |                                             RTC_FLAG_ALRBF   | RTC_FLAG_ALRBWF | \
 | ||||||
|  |                                             RTC_FLAG_WUTF    | RTC_FLAG_WUTWF  | \
 | ||||||
|  |                                             RTC_FLAG_RECALPF | RTC_FLAG_SHPF   | \
 | ||||||
|  |                                             RTC_FLAG_TSF     | RTC_FLAG_TSOVF  | \
 | ||||||
|  |                                             RTC_FLAG_RSF     | RTC_TAMPER_FLAGS_MASK)) | ||||||
|  | 
 | ||||||
|  | #define RTC_TIMEOUT_VALUE       1000U | ||||||
|  | 
 | ||||||
|  | #define RTC_EXTI_LINE_ALARM_EVENT  EXTI_IMR_MR17  /*!< External interrupt line 17 Connected to the RTC Alarm event */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private macros ------------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Private_Macros RTC Private Macros
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_IS_RTC_Definitions RTC Private macros to check input parameters
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | #define IS_RTC_HOUR_FORMAT(FORMAT)     (((FORMAT) == RTC_HOURFORMAT_12) || \ | ||||||
|  |                                         ((FORMAT) == RTC_HOURFORMAT_24)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_OUTPUT_DISABLE) || \ | ||||||
|  |                                ((OUTPUT) == RTC_OUTPUT_ALARMA)  || \
 | ||||||
|  |                                ((OUTPUT) == RTC_OUTPUT_ALARMB)  || \
 | ||||||
|  |                                ((OUTPUT) == RTC_OUTPUT_WAKEUP)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_OUTPUT_POL(POL) (((POL) == RTC_OUTPUT_POLARITY_HIGH) || \ | ||||||
|  |                                 ((POL) == RTC_OUTPUT_POLARITY_LOW)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_OUTPUT_TYPE(TYPE) (((TYPE) == RTC_OUTPUT_TYPE_OPENDRAIN) || \ | ||||||
|  |                                   ((TYPE) == RTC_OUTPUT_TYPE_PUSHPULL)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ASYNCH_PREDIV(PREDIV)   ((PREDIV) <= 0x7FU) | ||||||
|  | #define IS_RTC_SYNCH_PREDIV(PREDIV)    ((PREDIV) <= 0x7FFFU) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_HOUR12(HOUR)            (((HOUR) > 0U) && ((HOUR) <= 12U)) | ||||||
|  | #define IS_RTC_HOUR24(HOUR)            ((HOUR) <= 23U) | ||||||
|  | #define IS_RTC_MINUTES(MINUTES)        ((MINUTES) <= 59U) | ||||||
|  | #define IS_RTC_SECONDS(SECONDS)        ((SECONDS) <= 59U) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_HOURFORMAT12(PM)  (((PM) == RTC_HOURFORMAT12_AM) || \ | ||||||
|  |                                   ((PM) == RTC_HOURFORMAT12_PM)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DAYLIGHTSAVING_SUB1H) || \ | ||||||
|  |                                       ((SAVE) == RTC_DAYLIGHTSAVING_ADD1H) || \
 | ||||||
|  |                                       ((SAVE) == RTC_DAYLIGHTSAVING_NONE)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_STOREOPERATION_RESET) || \ | ||||||
|  |                                            ((OPERATION) == RTC_STOREOPERATION_SET)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_FORMAT_BIN) || ((FORMAT) == RTC_FORMAT_BCD)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_YEAR(YEAR)              ((YEAR) <= 99U) | ||||||
|  | #define IS_RTC_MONTH(MONTH)            (((MONTH) >= 1U) && ((MONTH) <= 12U)) | ||||||
|  | #define IS_RTC_DATE(DATE)              (((DATE) >= 1U) && ((DATE) <= 31U)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY)    || \ | ||||||
|  |                                  ((WEEKDAY) == RTC_WEEKDAY_TUESDAY)   || \
 | ||||||
|  |                                  ((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \
 | ||||||
|  |                                  ((WEEKDAY) == RTC_WEEKDAY_THURSDAY)  || \
 | ||||||
|  |                                  ((WEEKDAY) == RTC_WEEKDAY_FRIDAY)    || \
 | ||||||
|  |                                  ((WEEKDAY) == RTC_WEEKDAY_SATURDAY)  || \
 | ||||||
|  |                                  ((WEEKDAY) == RTC_WEEKDAY_SUNDAY)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ALARM_DATE_WEEKDAY_DATE(DATE) (((DATE) > 0U) && ((DATE) <= 31U)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY)    || \ | ||||||
|  |                                                     ((WEEKDAY) == RTC_WEEKDAY_TUESDAY)   || \
 | ||||||
|  |                                                     ((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \
 | ||||||
|  |                                                     ((WEEKDAY) == RTC_WEEKDAY_THURSDAY)  || \
 | ||||||
|  |                                                     ((WEEKDAY) == RTC_WEEKDAY_FRIDAY)    || \
 | ||||||
|  |                                                     ((WEEKDAY) == RTC_WEEKDAY_SATURDAY)  || \
 | ||||||
|  |                                                     ((WEEKDAY) == RTC_WEEKDAY_SUNDAY)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ALARM_DATE_WEEKDAY_SEL(SEL) (((SEL) == RTC_ALARMDATEWEEKDAYSEL_DATE) || \ | ||||||
|  |                                             ((SEL) == RTC_ALARMDATEWEEKDAYSEL_WEEKDAY)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ALARM_MASK(MASK)  (((MASK) & ((uint32_t)~RTC_ALARMMASK_ALL)) == 0U) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ALARM(ALARM)      (((ALARM) == RTC_ALARM_A) || ((ALARM) == RTC_ALARM_B)) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ALARM_SUB_SECOND_VALUE(VALUE) ((VALUE) <= RTC_ALRMASSR_SS) | ||||||
|  | 
 | ||||||
|  | #define IS_RTC_ALARM_SUB_SECOND_MASK(MASK)   (((MASK) == RTC_ALARMSUBSECONDMASK_ALL)     || \ | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_1)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_2)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_3)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_4)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_5)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_6)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_7)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_8)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_9)  || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_10) || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_11) || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_12) || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14_13) || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_SS14)    || \
 | ||||||
|  |                                               ((MASK) == RTC_ALARMSUBSECONDMASK_NONE)) | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private functions ---------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @defgroup RTC_Private_Functions RTC Private Functions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | HAL_StatusTypeDef  RTC_EnterInitMode(RTC_HandleTypeDef *hrtc); | ||||||
|  | HAL_StatusTypeDef  RTC_ExitInitMode(RTC_HandleTypeDef *hrtc); | ||||||
|  | uint8_t            RTC_ByteToBcd2(uint8_t number); | ||||||
|  | uint8_t            RTC_Bcd2ToByte(uint8_t number); | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #endif /* STM32F4xx_HAL_RTC_H */ | ||||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -0,0 +1,922 @@ | |||||||
|  | /**
 | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @file    stm32f4xx_ll_adc.c | ||||||
|  |   * @author  MCD Application Team | ||||||
|  |   * @brief   ADC LL module driver | ||||||
|  |   ****************************************************************************** | ||||||
|  |   * @attention | ||||||
|  |   * | ||||||
|  |   * Copyright (c) 2017 STMicroelectronics. | ||||||
|  |   * All rights reserved. | ||||||
|  |   * | ||||||
|  |   * This software is licensed under terms that can be found in the LICENSE file | ||||||
|  |   * in the root directory of this software component. | ||||||
|  |   * If no LICENSE file comes with this software, it is provided AS-IS. | ||||||
|  |   * | ||||||
|  |   ****************************************************************************** | ||||||
|  |   */ | ||||||
|  | #if defined(USE_FULL_LL_DRIVER) | ||||||
|  | 
 | ||||||
|  | /* Includes ------------------------------------------------------------------*/ | ||||||
|  | #include "stm32f4xx_ll_adc.h" | ||||||
|  | #include "stm32f4xx_ll_bus.h" | ||||||
|  | 
 | ||||||
|  | #ifdef  USE_FULL_ASSERT | ||||||
|  |   #include "stm32_assert.h" | ||||||
|  | #else | ||||||
|  |   #define assert_param(expr) ((void)0U) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /** @addtogroup STM32F4xx_LL_Driver
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | #if defined (ADC1) || defined (ADC2) || defined (ADC3) | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC_LL ADC
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Private types -------------------------------------------------------------*/ | ||||||
|  | /* Private variables ---------------------------------------------------------*/ | ||||||
|  | /* Private constants ---------------------------------------------------------*/ | ||||||
|  | /* Private macros ------------------------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC_LL_Private_Macros
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /* Check of parameters for configuration of ADC hierarchical scope:           */ | ||||||
|  | /* common to several ADC instances.                                           */ | ||||||
|  | #define IS_LL_ADC_COMMON_CLOCK(__CLOCK__)                                      \ | ||||||
|  |   (   ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV2)                             \
 | ||||||
|  |    || ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV4)                             \
 | ||||||
|  |    || ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV6)                             \
 | ||||||
|  |    || ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV8)                             \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | /* Check of parameters for configuration of ADC hierarchical scope:           */ | ||||||
|  | /* ADC instance.                                                              */ | ||||||
|  | #define IS_LL_ADC_RESOLUTION(__RESOLUTION__)                                   \ | ||||||
|  |   (   ((__RESOLUTION__) == LL_ADC_RESOLUTION_12B)                              \
 | ||||||
|  |    || ((__RESOLUTION__) == LL_ADC_RESOLUTION_10B)                              \
 | ||||||
|  |    || ((__RESOLUTION__) == LL_ADC_RESOLUTION_8B)                               \
 | ||||||
|  |    || ((__RESOLUTION__) == LL_ADC_RESOLUTION_6B)                               \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_DATA_ALIGN(__DATA_ALIGN__)                                   \ | ||||||
|  |   (   ((__DATA_ALIGN__) == LL_ADC_DATA_ALIGN_RIGHT)                            \
 | ||||||
|  |    || ((__DATA_ALIGN__) == LL_ADC_DATA_ALIGN_LEFT)                             \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_SCAN_SELECTION(__SCAN_SELECTION__)                           \ | ||||||
|  |   (   ((__SCAN_SELECTION__) == LL_ADC_SEQ_SCAN_DISABLE)                        \
 | ||||||
|  |    || ((__SCAN_SELECTION__) == LL_ADC_SEQ_SCAN_ENABLE)                         \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_SEQ_SCAN_MODE(__SEQ_SCAN_MODE__)                             \ | ||||||
|  |   (   ((__SCAN_MODE__) == LL_ADC_SEQ_SCAN_DISABLE)                             \
 | ||||||
|  |    || ((__SCAN_MODE__) == LL_ADC_SEQ_SCAN_ENABLE)                              \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | /* Check of parameters for configuration of ADC hierarchical scope:           */ | ||||||
|  | /* ADC group regular                                                          */ | ||||||
|  | #define IS_LL_ADC_REG_TRIG_SOURCE(__REG_TRIG_SOURCE__)                         \ | ||||||
|  |   (   ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_SOFTWARE)                      \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH1)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH2)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH3)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH2)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH3)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_CH4)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO)                 \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_CH1)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO)                 \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM4_CH4)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM5_CH1)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM5_CH2)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM5_CH3)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_CH1)                  \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM8_TRGO)                 \
 | ||||||
|  |    || ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11)               \
 | ||||||
|  |   ) | ||||||
|  | #define IS_LL_ADC_REG_CONTINUOUS_MODE(__REG_CONTINUOUS_MODE__)                 \ | ||||||
|  |   (   ((__REG_CONTINUOUS_MODE__) == LL_ADC_REG_CONV_SINGLE)                    \
 | ||||||
|  |    || ((__REG_CONTINUOUS_MODE__) == LL_ADC_REG_CONV_CONTINUOUS)                \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_REG_DMA_TRANSFER(__REG_DMA_TRANSFER__)                       \ | ||||||
|  |   (   ((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_NONE)                 \
 | ||||||
|  |    || ((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_LIMITED)              \
 | ||||||
|  |    || ((__REG_DMA_TRANSFER__) == LL_ADC_REG_DMA_TRANSFER_UNLIMITED)            \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_REG_FLAG_EOC_SELECTION(__REG_FLAG_EOC_SELECTION__)           \ | ||||||
|  |   (   ((__REG_FLAG_EOC_SELECTION__) == LL_ADC_REG_FLAG_EOC_SEQUENCE_CONV)      \
 | ||||||
|  |    || ((__REG_FLAG_EOC_SELECTION__) == LL_ADC_REG_FLAG_EOC_UNITARY_CONV)       \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_REG_SEQ_SCAN_LENGTH(__REG_SEQ_SCAN_LENGTH__)                 \ | ||||||
|  |   (   ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_DISABLE)               \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_2RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_3RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_4RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_5RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_6RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_7RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_8RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_9RANKS)         \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_10RANKS)        \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_11RANKS)        \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_12RANKS)        \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_13RANKS)        \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_14RANKS)        \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_15RANKS)        \
 | ||||||
|  |    || ((__REG_SEQ_SCAN_LENGTH__) == LL_ADC_REG_SEQ_SCAN_ENABLE_16RANKS)        \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_REG_SEQ_SCAN_DISCONT_MODE(__REG_SEQ_DISCONT_MODE__)          \ | ||||||
|  |   (   ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_DISABLE)           \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_1RANK)             \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_2RANKS)            \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_3RANKS)            \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_4RANKS)            \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_5RANKS)            \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_6RANKS)            \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_7RANKS)            \
 | ||||||
|  |    || ((__REG_SEQ_DISCONT_MODE__) == LL_ADC_REG_SEQ_DISCONT_8RANKS)            \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | /* Check of parameters for configuration of ADC hierarchical scope:           */ | ||||||
|  | /* ADC group injected                                                         */ | ||||||
|  | #define IS_LL_ADC_INJ_TRIG_SOURCE(__INJ_TRIG_SOURCE__)                         \ | ||||||
|  |   (   ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_SOFTWARE)                      \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_CH4)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM1_TRGO)                 \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_CH1)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM2_TRGO)                 \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH2)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM3_CH4)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH1)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH2)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_CH3)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM4_TRGO)                 \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM5_CH4)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM5_TRGO)                 \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH2)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH3)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_TIM8_CH4)                  \
 | ||||||
|  |    || ((__INJ_TRIG_SOURCE__) == LL_ADC_INJ_TRIG_EXT_EXTI_LINE15)               \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_INJ_TRIG_EXT_EDGE(__INJ_TRIG_EXT_EDGE__)                     \ | ||||||
|  |   (   ((__INJ_TRIG_EXT_EDGE__) == LL_ADC_INJ_TRIG_EXT_RISING)                  \
 | ||||||
|  |    || ((__INJ_TRIG_EXT_EDGE__) == LL_ADC_INJ_TRIG_EXT_FALLING)                 \
 | ||||||
|  |    || ((__INJ_TRIG_EXT_EDGE__) == LL_ADC_INJ_TRIG_EXT_RISINGFALLING)           \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_INJ_TRIG_AUTO(__INJ_TRIG_AUTO__)                             \ | ||||||
|  |   (   ((__INJ_TRIG_AUTO__) == LL_ADC_INJ_TRIG_INDEPENDENT)                     \
 | ||||||
|  |    || ((__INJ_TRIG_AUTO__) == LL_ADC_INJ_TRIG_FROM_GRP_REGULAR)                \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_INJ_SEQ_SCAN_LENGTH(__INJ_SEQ_SCAN_LENGTH__)                 \ | ||||||
|  |   (   ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_DISABLE)               \
 | ||||||
|  |    || ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_2RANKS)         \
 | ||||||
|  |    || ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_3RANKS)         \
 | ||||||
|  |    || ((__INJ_SEQ_SCAN_LENGTH__) == LL_ADC_INJ_SEQ_SCAN_ENABLE_4RANKS)         \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_INJ_SEQ_SCAN_DISCONT_MODE(__INJ_SEQ_DISCONT_MODE__)          \ | ||||||
|  |   (   ((__INJ_SEQ_DISCONT_MODE__) == LL_ADC_INJ_SEQ_DISCONT_DISABLE)           \
 | ||||||
|  |    || ((__INJ_SEQ_DISCONT_MODE__) == LL_ADC_INJ_SEQ_DISCONT_1RANK)             \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #if defined(ADC_MULTIMODE_SUPPORT) | ||||||
|  | /* Check of parameters for configuration of ADC hierarchical scope:           */ | ||||||
|  | /* multimode.                                                                 */ | ||||||
|  | #if defined(ADC3) | ||||||
|  | #define IS_LL_ADC_MULTI_MODE(__MULTI_MODE__)                                   \ | ||||||
|  |   (   ((__MULTI_MODE__) == LL_ADC_MULTI_INDEPENDENT)                           \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIMULT)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INTERL)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_SIMULT)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_ALTERN)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM)                  \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT)                  \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM)                  \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_TRIPLE_REG_SIM_INJ_SIM)                \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_TRIPLE_REG_SIM_INJ_ALT)                \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_TRIPLE_INJ_SIMULT)                     \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_TRIPLE_REG_SIMULT)                     \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_TRIPLE_REG_INTERL)                     \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_TRIPLE_INJ_ALTERN)                     \
 | ||||||
|  |   ) | ||||||
|  | #else | ||||||
|  | #define IS_LL_ADC_MULTI_MODE(__MULTI_MODE__)                                   \ | ||||||
|  |   (   ((__MULTI_MODE__) == LL_ADC_MULTI_INDEPENDENT)                           \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIMULT)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INTERL)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_SIMULT)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_INJ_ALTERN)                       \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM)                  \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT)                  \
 | ||||||
|  |    || ((__MULTI_MODE__) == LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM)                  \
 | ||||||
|  |   ) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_MULTI_DMA_TRANSFER(__MULTI_DMA_TRANSFER__)                   \ | ||||||
|  |   (   ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_EACH_ADC)              \
 | ||||||
|  |    || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_LIMIT_1)               \
 | ||||||
|  |    || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_LIMIT_2)               \
 | ||||||
|  |    || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_LIMIT_3)               \
 | ||||||
|  |    || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_UNLMT_1)               \
 | ||||||
|  |    || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_UNLMT_2)               \
 | ||||||
|  |    || ((__MULTI_DMA_TRANSFER__) == LL_ADC_MULTI_REG_DMA_UNLMT_3)               \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_MULTI_TWOSMP_DELAY(__MULTI_TWOSMP_DELAY__)                   \ | ||||||
|  |   (   ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_5CYCLES)          \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_6CYCLES)          \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_7CYCLES)          \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_8CYCLES)          \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_9CYCLES)          \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_10CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_11CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_12CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_13CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_14CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_15CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_16CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_17CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_18CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_19CYCLES)         \
 | ||||||
|  |    || ((__MULTI_TWOSMP_DELAY__) == LL_ADC_MULTI_TWOSMP_DELAY_20CYCLES)         \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #define IS_LL_ADC_MULTI_MASTER_SLAVE(__MULTI_MASTER_SLAVE__)                   \ | ||||||
|  |   (   ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_MASTER)                        \
 | ||||||
|  |    || ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_SLAVE)                         \
 | ||||||
|  |    || ((__MULTI_MASTER_SLAVE__) == LL_ADC_MULTI_MASTER_SLAVE)                  \
 | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  | #endif /* ADC_MULTIMODE_SUPPORT */ | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /* Private function prototypes -----------------------------------------------*/ | ||||||
|  | 
 | ||||||
|  | /* Exported functions --------------------------------------------------------*/ | ||||||
|  | /** @addtogroup ADC_LL_Exported_Functions
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /** @addtogroup ADC_LL_EF_Init
 | ||||||
|  |   * @{ | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  De-initialize registers of all ADC instances belonging to | ||||||
|  |   *         the same ADC common instance to their default reset values. | ||||||
|  |   * @param  ADCxy_COMMON ADC common instance | ||||||
|  |   *         (can be set directly from CMSIS definition or by using helper macro @ref __LL_ADC_COMMON_INSTANCE() ) | ||||||
|  |   * @retval An ErrorStatus enumeration value: | ||||||
|  |   *          - SUCCESS: ADC common registers are de-initialized | ||||||
|  |   *          - ERROR: not applicable | ||||||
|  |   */ | ||||||
|  | ErrorStatus LL_ADC_CommonDeInit(ADC_Common_TypeDef *ADCxy_COMMON) | ||||||
|  | { | ||||||
|  |   /* Check the parameters */ | ||||||
|  |   assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON)); | ||||||
|  |   
 | ||||||
|  | 
 | ||||||
|  |   /* Force reset of ADC clock (core clock) */ | ||||||
|  |   LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_ADC); | ||||||
|  |   
 | ||||||
|  |   /* Release reset of ADC clock (core clock) */ | ||||||
|  |   LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_ADC); | ||||||
|  |   
 | ||||||
|  |   return SUCCESS; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Initialize some features of ADC common parameters | ||||||
|  |   *         (all ADC instances belonging to the same ADC common instance) | ||||||
|  |   *         and multimode (for devices with several ADC instances available). | ||||||
|  |   * @note   The setting of ADC common parameters is conditioned to | ||||||
|  |   *         ADC instances state: | ||||||
|  |   *         All ADC instances belonging to the same ADC common instance | ||||||
|  |   *         must be disabled. | ||||||
|  |   * @param  ADCxy_COMMON ADC common instance | ||||||
|  |   *         (can be set directly from CMSIS definition or by using helper macro @ref __LL_ADC_COMMON_INSTANCE() ) | ||||||
|  |   * @param  ADC_CommonInitStruct Pointer to a @ref LL_ADC_CommonInitTypeDef structure | ||||||
|  |   * @retval An ErrorStatus enumeration value: | ||||||
|  |   *          - SUCCESS: ADC common registers are initialized | ||||||
|  |   *          - ERROR: ADC common registers are not initialized | ||||||
|  |   */ | ||||||
|  | ErrorStatus LL_ADC_CommonInit(ADC_Common_TypeDef *ADCxy_COMMON, LL_ADC_CommonInitTypeDef *ADC_CommonInitStruct) | ||||||
|  | { | ||||||
|  |   ErrorStatus status = SUCCESS; | ||||||
|  |   
 | ||||||
|  |   /* Check the parameters */ | ||||||
|  |   assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON)); | ||||||
|  |   assert_param(IS_LL_ADC_COMMON_CLOCK(ADC_CommonInitStruct->CommonClock)); | ||||||
|  |   
 | ||||||
|  | #if defined(ADC_MULTIMODE_SUPPORT) | ||||||
|  |   assert_param(IS_LL_ADC_MULTI_MODE(ADC_CommonInitStruct->Multimode)); | ||||||
|  |   if(ADC_CommonInitStruct->Multimode != LL_ADC_MULTI_INDEPENDENT) | ||||||
|  |   { | ||||||
|  |     assert_param(IS_LL_ADC_MULTI_DMA_TRANSFER(ADC_CommonInitStruct->MultiDMATransfer)); | ||||||
|  |     assert_param(IS_LL_ADC_MULTI_TWOSMP_DELAY(ADC_CommonInitStruct->MultiTwoSamplingDelay)); | ||||||
|  |   } | ||||||
|  | #endif /* ADC_MULTIMODE_SUPPORT */ | ||||||
|  | 
 | ||||||
|  |   /* Note: Hardware constraint (refer to description of functions             */ | ||||||
|  |   /*       "LL_ADC_SetCommonXXX()" and "LL_ADC_SetMultiXXX()"):               */ | ||||||
|  |   /*       On this STM32 series, setting of these features is conditioned to  */ | ||||||
|  |   /*       ADC state:                                                         */ | ||||||
|  |   /*       All ADC instances of the ADC common group must be disabled.        */ | ||||||
|  |   if(__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(ADCxy_COMMON) == 0UL) | ||||||
|  |   { | ||||||
|  |     /* Configuration of ADC hierarchical scope:                               */ | ||||||
|  |     /*  - common to several ADC                                               */ | ||||||
|  |     /*    (all ADC instances belonging to the same ADC common instance)       */ | ||||||
|  |     /*    - Set ADC clock (conversion clock)                                  */ | ||||||
|  |     /*  - multimode (if several ADC instances available on the                */ | ||||||
|  |     /*    selected device)                                                    */ | ||||||
|  |     /*    - Set ADC multimode configuration                                   */ | ||||||
|  |     /*    - Set ADC multimode DMA transfer                                    */ | ||||||
|  |     /*    - Set ADC multimode: delay between 2 sampling phases                */ | ||||||
|  | #if defined(ADC_MULTIMODE_SUPPORT) | ||||||
|  |     if(ADC_CommonInitStruct->Multimode != LL_ADC_MULTI_INDEPENDENT) | ||||||
|  |     { | ||||||
|  |       MODIFY_REG(ADCxy_COMMON->CCR, | ||||||
|  |                    ADC_CCR_ADCPRE | ||||||
|  |                  | ADC_CCR_MULTI | ||||||
|  |                  | ADC_CCR_DMA | ||||||
|  |                  | ADC_CCR_DDS | ||||||
|  |                  | ADC_CCR_DELAY | ||||||
|  |                 , | ||||||
|  |                    ADC_CommonInitStruct->CommonClock | ||||||
|  |                  | ADC_CommonInitStruct->Multimode | ||||||
|  |                  | ADC_CommonInitStruct->MultiDMATransfer | ||||||
|  |                  | ADC_CommonInitStruct->MultiTwoSamplingDelay | ||||||
|  |                 ); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |       MODIFY_REG(ADCxy_COMMON->CCR, | ||||||
|  |                    ADC_CCR_ADCPRE | ||||||
|  |                  | ADC_CCR_MULTI | ||||||
|  |                  | ADC_CCR_DMA | ||||||
|  |                  | ADC_CCR_DDS | ||||||
|  |                  | ADC_CCR_DELAY | ||||||
|  |                 , | ||||||
|  |                    ADC_CommonInitStruct->CommonClock | ||||||
|  |                  | LL_ADC_MULTI_INDEPENDENT | ||||||
|  |                 ); | ||||||
|  |     } | ||||||
|  | #else | ||||||
|  |     LL_ADC_SetCommonClock(ADCxy_COMMON, ADC_CommonInitStruct->CommonClock); | ||||||
|  | #endif | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     /* Initialization error: One or several ADC instances belonging to        */ | ||||||
|  |     /* the same ADC common instance are not disabled.                         */ | ||||||
|  |     status = ERROR; | ||||||
|  |   } | ||||||
|  |   
 | ||||||
|  |   return status; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set each @ref LL_ADC_CommonInitTypeDef field to default value. | ||||||
|  |   * @param  ADC_CommonInitStruct Pointer to a @ref LL_ADC_CommonInitTypeDef structure | ||||||
|  |   *                              whose fields will be set to default values. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | void LL_ADC_CommonStructInit(LL_ADC_CommonInitTypeDef *ADC_CommonInitStruct) | ||||||
|  | { | ||||||
|  |   /* Set ADC_CommonInitStruct fields to default values */ | ||||||
|  |   /* Set fields of ADC common */ | ||||||
|  |   /* (all ADC instances belonging to the same ADC common instance) */ | ||||||
|  |   ADC_CommonInitStruct->CommonClock = LL_ADC_CLOCK_SYNC_PCLK_DIV2; | ||||||
|  |   
 | ||||||
|  | #if defined(ADC_MULTIMODE_SUPPORT) | ||||||
|  |   /* Set fields of ADC multimode */ | ||||||
|  |   ADC_CommonInitStruct->Multimode             = LL_ADC_MULTI_INDEPENDENT; | ||||||
|  |     ADC_CommonInitStruct->MultiDMATransfer      = LL_ADC_MULTI_REG_DMA_EACH_ADC; | ||||||
|  |   ADC_CommonInitStruct->MultiTwoSamplingDelay = LL_ADC_MULTI_TWOSMP_DELAY_5CYCLES; | ||||||
|  | #endif /* ADC_MULTIMODE_SUPPORT */ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  De-initialize registers of the selected ADC instance | ||||||
|  |   *         to their default reset values. | ||||||
|  |   * @note   To reset all ADC instances quickly (perform a hard reset), | ||||||
|  |   *         use function @ref LL_ADC_CommonDeInit(). | ||||||
|  |   * @param  ADCx ADC instance | ||||||
|  |   * @retval An ErrorStatus enumeration value: | ||||||
|  |   *          - SUCCESS: ADC registers are de-initialized | ||||||
|  |   *          - ERROR: ADC registers are not de-initialized | ||||||
|  |   */ | ||||||
|  | ErrorStatus LL_ADC_DeInit(ADC_TypeDef *ADCx) | ||||||
|  | { | ||||||
|  |   ErrorStatus status = SUCCESS; | ||||||
|  |   
 | ||||||
|  |   /* Check the parameters */ | ||||||
|  |   assert_param(IS_ADC_ALL_INSTANCE(ADCx)); | ||||||
|  |   
 | ||||||
|  |   /* Disable ADC instance if not already disabled.                            */ | ||||||
|  |   if(LL_ADC_IsEnabled(ADCx) == 1UL) | ||||||
|  |   { | ||||||
|  |     /* Set ADC group regular trigger source to SW start to ensure to not      */ | ||||||
|  |     /* have an external trigger event occurring during the conversion stop    */ | ||||||
|  |     /* ADC disable process.                                                   */ | ||||||
|  |     LL_ADC_REG_SetTriggerSource(ADCx, LL_ADC_REG_TRIG_SOFTWARE); | ||||||
|  |     
 | ||||||
|  |     /* Set ADC group injected trigger source to SW start to ensure to not     */ | ||||||
|  |     /* have an external trigger event occurring during the conversion stop    */ | ||||||
|  |     /* ADC disable process.                                                   */ | ||||||
|  |     LL_ADC_INJ_SetTriggerSource(ADCx, LL_ADC_INJ_TRIG_SOFTWARE); | ||||||
|  |     
 | ||||||
|  |     /* Disable the ADC instance */ | ||||||
|  |     LL_ADC_Disable(ADCx); | ||||||
|  |   } | ||||||
|  |   
 | ||||||
|  |   /* Check whether ADC state is compliant with expected state */ | ||||||
|  |   /* (hardware requirements of bits state to reset registers below) */ | ||||||
|  |   if(READ_BIT(ADCx->CR2, ADC_CR2_ADON) == 0UL) | ||||||
|  |   { | ||||||
|  |     /* ========== Reset ADC registers ========== */ | ||||||
|  |     /* Reset register SR */ | ||||||
|  |     CLEAR_BIT(ADCx->SR, | ||||||
|  |               (  LL_ADC_FLAG_STRT | ||||||
|  |                | LL_ADC_FLAG_JSTRT | ||||||
|  |                | LL_ADC_FLAG_EOCS | ||||||
|  |                | LL_ADC_FLAG_OVR | ||||||
|  |                | LL_ADC_FLAG_JEOS | ||||||
|  |                | LL_ADC_FLAG_AWD1 ) | ||||||
|  |              ); | ||||||
|  |     
 | ||||||
|  |     /* Reset register CR1 */ | ||||||
|  |     CLEAR_BIT(ADCx->CR1, | ||||||
|  |               (  ADC_CR1_OVRIE   | ADC_CR1_RES     | ADC_CR1_AWDEN | ||||||
|  |                | ADC_CR1_JAWDEN | ||||||
|  |                | ADC_CR1_DISCNUM | ADC_CR1_JDISCEN | ADC_CR1_DISCEN | ||||||
|  |                | ADC_CR1_JAUTO   | ADC_CR1_AWDSGL  | ADC_CR1_SCAN | ||||||
|  |                | ADC_CR1_JEOCIE  | ADC_CR1_AWDIE   | ADC_CR1_EOCIE | ||||||
|  |                | ADC_CR1_AWDCH                                     ) | ||||||
|  |              ); | ||||||
|  |     
 | ||||||
|  |     /* Reset register CR2 */ | ||||||
|  |     CLEAR_BIT(ADCx->CR2, | ||||||
|  |               (  ADC_CR2_SWSTART  | ADC_CR2_EXTEN  | ADC_CR2_EXTSEL | ||||||
|  |                | ADC_CR2_JSWSTART | ADC_CR2_JEXTEN | ADC_CR2_JEXTSEL | ||||||
|  |                | ADC_CR2_ALIGN    | ADC_CR2_EOCS | ||||||
|  |                | ADC_CR2_DDS      | ADC_CR2_DMA | ||||||
|  |                | ADC_CR2_CONT     | ADC_CR2_ADON                    ) | ||||||
|  |              ); | ||||||
|  |     
 | ||||||
|  |     /* Reset register SMPR1 */ | ||||||
|  |     CLEAR_BIT(ADCx->SMPR1, | ||||||
|  |               (  ADC_SMPR1_SMP18 | ADC_SMPR1_SMP17 | ADC_SMPR1_SMP16 | ||||||
|  |                | ADC_SMPR1_SMP15 | ADC_SMPR1_SMP14 | ADC_SMPR1_SMP13 | ||||||
|  |                | ADC_SMPR1_SMP12 | ADC_SMPR1_SMP11 | ADC_SMPR1_SMP10) | ||||||
|  |              ); | ||||||
|  |     
 | ||||||
|  |     /* Reset register SMPR2 */ | ||||||
|  |     CLEAR_BIT(ADCx->SMPR2, | ||||||
|  |               (  ADC_SMPR2_SMP9 | ||||||
|  |                | ADC_SMPR2_SMP8 | ADC_SMPR2_SMP7 | ADC_SMPR2_SMP6 | ||||||
|  |                | ADC_SMPR2_SMP5 | ADC_SMPR2_SMP4 | ADC_SMPR2_SMP3 | ||||||
|  |                | ADC_SMPR2_SMP2 | ADC_SMPR2_SMP1 | ADC_SMPR2_SMP0) | ||||||
|  |              ); | ||||||
|  |     
 | ||||||
|  |     /* Reset register JOFR1 */ | ||||||
|  |     CLEAR_BIT(ADCx->JOFR1, ADC_JOFR1_JOFFSET1); | ||||||
|  |     /* Reset register JOFR2 */ | ||||||
|  |     CLEAR_BIT(ADCx->JOFR2, ADC_JOFR2_JOFFSET2); | ||||||
|  |     /* Reset register JOFR3 */ | ||||||
|  |     CLEAR_BIT(ADCx->JOFR3, ADC_JOFR3_JOFFSET3); | ||||||
|  |     /* Reset register JOFR4 */ | ||||||
|  |     CLEAR_BIT(ADCx->JOFR4, ADC_JOFR4_JOFFSET4); | ||||||
|  |     
 | ||||||
|  |     /* Reset register HTR */ | ||||||
|  |     SET_BIT(ADCx->HTR, ADC_HTR_HT); | ||||||
|  |     /* Reset register LTR */ | ||||||
|  |     CLEAR_BIT(ADCx->LTR, ADC_LTR_LT); | ||||||
|  |     
 | ||||||
|  |     /* Reset register SQR1 */ | ||||||
|  |     CLEAR_BIT(ADCx->SQR1, | ||||||
|  |               (  ADC_SQR1_L | ||||||
|  |                | ADC_SQR1_SQ16 | ||||||
|  |                | ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13) | ||||||
|  |              ); | ||||||
|  |              
 | ||||||
|  |     /* Reset register SQR2 */ | ||||||
|  |     CLEAR_BIT(ADCx->SQR2, | ||||||
|  |               (  ADC_SQR2_SQ12 | ADC_SQR2_SQ11 | ADC_SQR2_SQ10 | ||||||
|  |                | ADC_SQR2_SQ9 | ADC_SQR2_SQ8 | ADC_SQR2_SQ7) | ||||||
|  |              ); | ||||||
|  | 
 | ||||||
|  |     /* Reset register SQR3 */ | ||||||
|  |     CLEAR_BIT(ADCx->SQR3, | ||||||
|  |               (  ADC_SQR3_SQ6 | ADC_SQR3_SQ5 | ADC_SQR3_SQ4 | ||||||
|  |                | ADC_SQR3_SQ3 | ADC_SQR3_SQ2 | ADC_SQR3_SQ1) | ||||||
|  |              ); | ||||||
|  | 
 | ||||||
|  |     /* Reset register JSQR */ | ||||||
|  |     CLEAR_BIT(ADCx->JSQR, | ||||||
|  |               (  ADC_JSQR_JL | ||||||
|  |                | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ||||||
|  |                | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1  ) | ||||||
|  |              ); | ||||||
|  |     
 | ||||||
|  |     /* Reset register DR */ | ||||||
|  |     /* bits in access mode read only, no direct reset applicable */ | ||||||
|  |     
 | ||||||
|  |     /* Reset registers JDR1, JDR2, JDR3, JDR4 */ | ||||||
|  |     /* bits in access mode read only, no direct reset applicable */ | ||||||
|  |     
 | ||||||
|  |     /* Reset register CCR */ | ||||||
|  |     CLEAR_BIT(ADC->CCR, ADC_CCR_TSVREFE | ADC_CCR_ADCPRE); | ||||||
|  |   } | ||||||
|  |   
 | ||||||
|  |   return status; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Initialize some features of ADC instance. | ||||||
|  |   * @note   These parameters have an impact on ADC scope: ADC instance. | ||||||
|  |   *         Affects both group regular and group injected (availability | ||||||
|  |   *         of ADC group injected depends on STM32 families). | ||||||
|  |   *         Refer to corresponding unitary functions into | ||||||
|  |   *         @ref ADC_LL_EF_Configuration_ADC_Instance . | ||||||
|  |   * @note   The setting of these parameters by function @ref LL_ADC_Init() | ||||||
|  |   *         is conditioned to ADC state: | ||||||
|  |   *         ADC instance must be disabled. | ||||||
|  |   *         This condition is applied to all ADC features, for efficiency | ||||||
|  |   *         and compatibility over all STM32 families. However, the different | ||||||
|  |   *         features can be set under different ADC state conditions | ||||||
|  |   *         (setting possible with ADC enabled without conversion on going, | ||||||
|  |   *         ADC enabled with conversion on going, ...) | ||||||
|  |   *         Each feature can be updated afterwards with a unitary function | ||||||
|  |   *         and potentially with ADC in a different state than disabled, | ||||||
|  |   *         refer to description of each function for setting | ||||||
|  |   *         conditioned to ADC state. | ||||||
|  |   * @note   After using this function, some other features must be configured | ||||||
|  |   *         using LL unitary functions. | ||||||
|  |   *         The minimum configuration remaining to be done is: | ||||||
|  |   *          - Set ADC group regular or group injected sequencer: | ||||||
|  |   *            map channel on the selected sequencer rank. | ||||||
|  |   *            Refer to function @ref LL_ADC_REG_SetSequencerRanks(). | ||||||
|  |   *          - Set ADC channel sampling time | ||||||
|  |   *            Refer to function LL_ADC_SetChannelSamplingTime(); | ||||||
|  |   * @param  ADCx ADC instance | ||||||
|  |   * @param  ADC_InitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure | ||||||
|  |   * @retval An ErrorStatus enumeration value: | ||||||
|  |   *          - SUCCESS: ADC registers are initialized | ||||||
|  |   *          - ERROR: ADC registers are not initialized | ||||||
|  |   */ | ||||||
|  | ErrorStatus LL_ADC_Init(ADC_TypeDef *ADCx, LL_ADC_InitTypeDef *ADC_InitStruct) | ||||||
|  | { | ||||||
|  |   ErrorStatus status = SUCCESS; | ||||||
|  |   
 | ||||||
|  |   /* Check the parameters */ | ||||||
|  |   assert_param(IS_ADC_ALL_INSTANCE(ADCx)); | ||||||
|  |   
 | ||||||
|  |   assert_param(IS_LL_ADC_RESOLUTION(ADC_InitStruct->Resolution)); | ||||||
|  |   assert_param(IS_LL_ADC_DATA_ALIGN(ADC_InitStruct->DataAlignment)); | ||||||
|  |   assert_param(IS_LL_ADC_SCAN_SELECTION(ADC_InitStruct->SequencersScanMode)); | ||||||
|  |   
 | ||||||
|  |   /* Note: Hardware constraint (refer to description of this function):       */ | ||||||
|  |   /*       ADC instance must be disabled.                                     */ | ||||||
|  |   if(LL_ADC_IsEnabled(ADCx) == 0UL) | ||||||
|  |   { | ||||||
|  |     /* Configuration of ADC hierarchical scope:                               */ | ||||||
|  |     /*  - ADC instance                                                        */ | ||||||
|  |     /*    - Set ADC data resolution                                           */ | ||||||
|  |     /*    - Set ADC conversion data alignment                                 */ | ||||||
|  |     MODIFY_REG(ADCx->CR1, | ||||||
|  |                  ADC_CR1_RES | ||||||
|  |                | ADC_CR1_SCAN | ||||||
|  |               , | ||||||
|  |                  ADC_InitStruct->Resolution | ||||||
|  |                | ADC_InitStruct->SequencersScanMode | ||||||
|  |               ); | ||||||
|  |     
 | ||||||
|  |     MODIFY_REG(ADCx->CR2, | ||||||
|  |                  ADC_CR2_ALIGN | ||||||
|  |               , | ||||||
|  |                  ADC_InitStruct->DataAlignment | ||||||
|  |               ); | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     /* Initialization error: ADC instance is not disabled. */ | ||||||
|  |     status = ERROR; | ||||||
|  |   } | ||||||
|  |   return status; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set each @ref LL_ADC_InitTypeDef field to default value. | ||||||
|  |   * @param  ADC_InitStruct Pointer to a @ref LL_ADC_InitTypeDef structure | ||||||
|  |   *                        whose fields will be set to default values. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | void LL_ADC_StructInit(LL_ADC_InitTypeDef *ADC_InitStruct) | ||||||
|  | { | ||||||
|  |   /* Set ADC_InitStruct fields to default values */ | ||||||
|  |   /* Set fields of ADC instance */ | ||||||
|  |   ADC_InitStruct->Resolution    = LL_ADC_RESOLUTION_12B; | ||||||
|  |   ADC_InitStruct->DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; | ||||||
|  |   
 | ||||||
|  |   /* Enable scan mode to have a generic behavior with ADC of other            */ | ||||||
|  |   /* STM32 families, without this setting available:                          */ | ||||||
|  |   /* ADC group regular sequencer and ADC group injected sequencer depend      */ | ||||||
|  |   /* only of their own configuration.                                         */ | ||||||
|  |   ADC_InitStruct->SequencersScanMode      = LL_ADC_SEQ_SCAN_ENABLE; | ||||||
|  |   
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Initialize some features of ADC group regular. | ||||||
|  |   * @note   These parameters have an impact on ADC scope: ADC group regular. | ||||||
|  |   *         Refer to corresponding unitary functions into | ||||||
|  |   *         @ref ADC_LL_EF_Configuration_ADC_Group_Regular | ||||||
|  |   *         (functions with prefix "REG"). | ||||||
|  |   * @note   The setting of these parameters by function @ref LL_ADC_Init() | ||||||
|  |   *         is conditioned to ADC state: | ||||||
|  |   *         ADC instance must be disabled. | ||||||
|  |   *         This condition is applied to all ADC features, for efficiency | ||||||
|  |   *         and compatibility over all STM32 families. However, the different | ||||||
|  |   *         features can be set under different ADC state conditions | ||||||
|  |   *         (setting possible with ADC enabled without conversion on going, | ||||||
|  |   *         ADC enabled with conversion on going, ...) | ||||||
|  |   *         Each feature can be updated afterwards with a unitary function | ||||||
|  |   *         and potentially with ADC in a different state than disabled, | ||||||
|  |   *         refer to description of each function for setting | ||||||
|  |   *         conditioned to ADC state. | ||||||
|  |   * @note   After using this function, other features must be configured | ||||||
|  |   *         using LL unitary functions. | ||||||
|  |   *         The minimum configuration remaining to be done is: | ||||||
|  |   *          - Set ADC group regular or group injected sequencer: | ||||||
|  |   *            map channel on the selected sequencer rank. | ||||||
|  |   *            Refer to function @ref LL_ADC_REG_SetSequencerRanks(). | ||||||
|  |   *          - Set ADC channel sampling time | ||||||
|  |   *            Refer to function LL_ADC_SetChannelSamplingTime(); | ||||||
|  |   * @param  ADCx ADC instance | ||||||
|  |   * @param  ADC_REG_InitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure | ||||||
|  |   * @retval An ErrorStatus enumeration value: | ||||||
|  |   *          - SUCCESS: ADC registers are initialized | ||||||
|  |   *          - ERROR: ADC registers are not initialized | ||||||
|  |   */ | ||||||
|  | ErrorStatus LL_ADC_REG_Init(ADC_TypeDef *ADCx, LL_ADC_REG_InitTypeDef *ADC_REG_InitStruct) | ||||||
|  | { | ||||||
|  |   ErrorStatus status = SUCCESS; | ||||||
|  |   
 | ||||||
|  |   /* Check the parameters */ | ||||||
|  |   assert_param(IS_ADC_ALL_INSTANCE(ADCx)); | ||||||
|  |   assert_param(IS_LL_ADC_REG_TRIG_SOURCE(ADC_REG_InitStruct->TriggerSource)); | ||||||
|  |   assert_param(IS_LL_ADC_REG_SEQ_SCAN_LENGTH(ADC_REG_InitStruct->SequencerLength)); | ||||||
|  |   if(ADC_REG_InitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE) | ||||||
|  |   { | ||||||
|  |     assert_param(IS_LL_ADC_REG_SEQ_SCAN_DISCONT_MODE(ADC_REG_InitStruct->SequencerDiscont)); | ||||||
|  |   } | ||||||
|  |   assert_param(IS_LL_ADC_REG_CONTINUOUS_MODE(ADC_REG_InitStruct->ContinuousMode)); | ||||||
|  |   assert_param(IS_LL_ADC_REG_DMA_TRANSFER(ADC_REG_InitStruct->DMATransfer)); | ||||||
|  |   
 | ||||||
|  |   /* ADC group regular continuous mode and discontinuous mode                 */ | ||||||
|  |   /* can not be enabled simultenaeously                                       */ | ||||||
|  |   assert_param((ADC_REG_InitStruct->ContinuousMode == LL_ADC_REG_CONV_SINGLE) | ||||||
|  |                || (ADC_REG_InitStruct->SequencerDiscont == LL_ADC_REG_SEQ_DISCONT_DISABLE)); | ||||||
|  |   
 | ||||||
|  |   /* Note: Hardware constraint (refer to description of this function):       */ | ||||||
|  |   /*       ADC instance must be disabled.                                     */ | ||||||
|  |   if(LL_ADC_IsEnabled(ADCx) == 0UL) | ||||||
|  |   { | ||||||
|  |     /* Configuration of ADC hierarchical scope:                               */ | ||||||
|  |     /*  - ADC group regular                                                   */ | ||||||
|  |     /*    - Set ADC group regular trigger source                              */ | ||||||
|  |     /*    - Set ADC group regular sequencer length                            */ | ||||||
|  |     /*    - Set ADC group regular sequencer discontinuous mode                */ | ||||||
|  |     /*    - Set ADC group regular continuous mode                             */ | ||||||
|  |     /*    - Set ADC group regular conversion data transfer: no transfer or    */ | ||||||
|  |     /*      transfer by DMA, and DMA requests mode                            */ | ||||||
|  |     /* Note: On this STM32 series, ADC trigger edge is set when starting      */ | ||||||
|  |     /*       ADC conversion.                                                  */ | ||||||
|  |     /*       Refer to function @ref LL_ADC_REG_StartConversionExtTrig().      */ | ||||||
|  |     if(ADC_REG_InitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE) | ||||||
|  |     { | ||||||
|  |       MODIFY_REG(ADCx->CR1, | ||||||
|  |                    ADC_CR1_DISCEN | ||||||
|  |                  | ADC_CR1_DISCNUM | ||||||
|  |                 , | ||||||
|  |                    ADC_REG_InitStruct->SequencerDiscont | ||||||
|  |                 ); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |       MODIFY_REG(ADCx->CR1, | ||||||
|  |                    ADC_CR1_DISCEN | ||||||
|  |                  | ADC_CR1_DISCNUM | ||||||
|  |                 , | ||||||
|  |                    LL_ADC_REG_SEQ_DISCONT_DISABLE | ||||||
|  |                 ); | ||||||
|  |     } | ||||||
|  |     
 | ||||||
|  |     MODIFY_REG(ADCx->CR2, | ||||||
|  |                  ADC_CR2_EXTSEL | ||||||
|  |                | ADC_CR2_EXTEN | ||||||
|  |                | ADC_CR2_CONT | ||||||
|  |                | ADC_CR2_DMA | ||||||
|  |                | ADC_CR2_DDS | ||||||
|  |               , | ||||||
|  |                 (ADC_REG_InitStruct->TriggerSource & ADC_CR2_EXTSEL) | ||||||
|  |                | ADC_REG_InitStruct->ContinuousMode | ||||||
|  |                | ADC_REG_InitStruct->DMATransfer | ||||||
|  |               ); | ||||||
|  | 
 | ||||||
|  |     /* Set ADC group regular sequencer length and scan direction */ | ||||||
|  |     /* Note: Hardware constraint (refer to description of this function):     */ | ||||||
|  |     /* Note: If ADC instance feature scan mode is disabled                    */ | ||||||
|  |     /*       (refer to  ADC instance initialization structure                 */ | ||||||
|  |     /*       parameter @ref SequencersScanMode                                */ | ||||||
|  |     /*       or function @ref LL_ADC_SetSequencersScanMode() ),               */ | ||||||
|  |     /*       this parameter is discarded.                                     */ | ||||||
|  |     LL_ADC_REG_SetSequencerLength(ADCx, ADC_REG_InitStruct->SequencerLength); | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     /* Initialization error: ADC instance is not disabled. */ | ||||||
|  |     status = ERROR; | ||||||
|  |   } | ||||||
|  |   return status; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set each @ref LL_ADC_REG_InitTypeDef field to default value. | ||||||
|  |   * @param  ADC_REG_InitStruct Pointer to a @ref LL_ADC_REG_InitTypeDef structure | ||||||
|  |   *                            whose fields will be set to default values. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | void LL_ADC_REG_StructInit(LL_ADC_REG_InitTypeDef *ADC_REG_InitStruct) | ||||||
|  | { | ||||||
|  |   /* Set ADC_REG_InitStruct fields to default values */ | ||||||
|  |   /* Set fields of ADC group regular */ | ||||||
|  |   /* Note: On this STM32 series, ADC trigger edge is set when starting        */ | ||||||
|  |   /*       ADC conversion.                                                    */ | ||||||
|  |   /*       Refer to function @ref LL_ADC_REG_StartConversionExtTrig().        */ | ||||||
|  |   ADC_REG_InitStruct->TriggerSource    = LL_ADC_REG_TRIG_SOFTWARE; | ||||||
|  |   ADC_REG_InitStruct->SequencerLength  = LL_ADC_REG_SEQ_SCAN_DISABLE; | ||||||
|  |   ADC_REG_InitStruct->SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE; | ||||||
|  |   ADC_REG_InitStruct->ContinuousMode   = LL_ADC_REG_CONV_SINGLE; | ||||||
|  |   ADC_REG_InitStruct->DMATransfer      = LL_ADC_REG_DMA_TRANSFER_NONE; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Initialize some features of ADC group injected. | ||||||
|  |   * @note   These parameters have an impact on ADC scope: ADC group injected. | ||||||
|  |   *         Refer to corresponding unitary functions into | ||||||
|  |   *         @ref ADC_LL_EF_Configuration_ADC_Group_Regular | ||||||
|  |   *         (functions with prefix "INJ"). | ||||||
|  |   * @note   The setting of these parameters by function @ref LL_ADC_Init() | ||||||
|  |   *         is conditioned to ADC state: | ||||||
|  |   *         ADC instance must be disabled. | ||||||
|  |   *         This condition is applied to all ADC features, for efficiency | ||||||
|  |   *         and compatibility over all STM32 families. However, the different | ||||||
|  |   *         features can be set under different ADC state conditions | ||||||
|  |   *         (setting possible with ADC enabled without conversion on going, | ||||||
|  |   *         ADC enabled with conversion on going, ...) | ||||||
|  |   *         Each feature can be updated afterwards with a unitary function | ||||||
|  |   *         and potentially with ADC in a different state than disabled, | ||||||
|  |   *         refer to description of each function for setting | ||||||
|  |   *         conditioned to ADC state. | ||||||
|  |   * @note   After using this function, other features must be configured | ||||||
|  |   *         using LL unitary functions. | ||||||
|  |   *         The minimum configuration remaining to be done is: | ||||||
|  |   *          - Set ADC group injected sequencer: | ||||||
|  |   *            map channel on the selected sequencer rank. | ||||||
|  |   *            Refer to function @ref LL_ADC_INJ_SetSequencerRanks(). | ||||||
|  |   *          - Set ADC channel sampling time | ||||||
|  |   *            Refer to function LL_ADC_SetChannelSamplingTime(); | ||||||
|  |   * @param  ADCx ADC instance | ||||||
|  |   * @param  ADC_INJ_InitStruct Pointer to a @ref LL_ADC_INJ_InitTypeDef structure | ||||||
|  |   * @retval An ErrorStatus enumeration value: | ||||||
|  |   *          - SUCCESS: ADC registers are initialized | ||||||
|  |   *          - ERROR: ADC registers are not initialized | ||||||
|  |   */ | ||||||
|  | ErrorStatus LL_ADC_INJ_Init(ADC_TypeDef *ADCx, LL_ADC_INJ_InitTypeDef *ADC_INJ_InitStruct) | ||||||
|  | { | ||||||
|  |   ErrorStatus status = SUCCESS; | ||||||
|  |   
 | ||||||
|  |   /* Check the parameters */ | ||||||
|  |   assert_param(IS_ADC_ALL_INSTANCE(ADCx)); | ||||||
|  |   assert_param(IS_LL_ADC_INJ_TRIG_SOURCE(ADC_INJ_InitStruct->TriggerSource)); | ||||||
|  |   assert_param(IS_LL_ADC_INJ_SEQ_SCAN_LENGTH(ADC_INJ_InitStruct->SequencerLength)); | ||||||
|  |   if(ADC_INJ_InitStruct->SequencerLength != LL_ADC_INJ_SEQ_SCAN_DISABLE) | ||||||
|  |   { | ||||||
|  |     assert_param(IS_LL_ADC_INJ_SEQ_SCAN_DISCONT_MODE(ADC_INJ_InitStruct->SequencerDiscont)); | ||||||
|  |   } | ||||||
|  |   assert_param(IS_LL_ADC_INJ_TRIG_AUTO(ADC_INJ_InitStruct->TrigAuto)); | ||||||
|  |   
 | ||||||
|  |   /* Note: Hardware constraint (refer to description of this function):       */ | ||||||
|  |   /*       ADC instance must be disabled.                                     */ | ||||||
|  |   if(LL_ADC_IsEnabled(ADCx) == 0UL) | ||||||
|  |   { | ||||||
|  |     /* Configuration of ADC hierarchical scope:                               */ | ||||||
|  |     /*  - ADC group injected                                                  */ | ||||||
|  |     /*    - Set ADC group injected trigger source                             */ | ||||||
|  |     /*    - Set ADC group injected sequencer length                           */ | ||||||
|  |     /*    - Set ADC group injected sequencer discontinuous mode               */ | ||||||
|  |     /*    - Set ADC group injected conversion trigger: independent or         */ | ||||||
|  |     /*      from ADC group regular                                            */ | ||||||
|  |     /* Note: On this STM32 series, ADC trigger edge is set when starting      */ | ||||||
|  |     /*       ADC conversion.                                                  */ | ||||||
|  |     /*       Refer to function @ref LL_ADC_INJ_StartConversionExtTrig().      */ | ||||||
|  |     if(ADC_INJ_InitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE) | ||||||
|  |     { | ||||||
|  |       MODIFY_REG(ADCx->CR1, | ||||||
|  |                    ADC_CR1_JDISCEN | ||||||
|  |                  | ADC_CR1_JAUTO | ||||||
|  |                 , | ||||||
|  |                    ADC_INJ_InitStruct->SequencerDiscont | ||||||
|  |                  | ADC_INJ_InitStruct->TrigAuto | ||||||
|  |                 ); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |       MODIFY_REG(ADCx->CR1, | ||||||
|  |                    ADC_CR1_JDISCEN | ||||||
|  |                  | ADC_CR1_JAUTO | ||||||
|  |                 , | ||||||
|  |                    LL_ADC_REG_SEQ_DISCONT_DISABLE | ||||||
|  |                  | ADC_INJ_InitStruct->TrigAuto | ||||||
|  |                 ); | ||||||
|  |     } | ||||||
|  |     
 | ||||||
|  |     MODIFY_REG(ADCx->CR2, | ||||||
|  |                  ADC_CR2_JEXTSEL | ||||||
|  |                | ADC_CR2_JEXTEN | ||||||
|  |               , | ||||||
|  |                 (ADC_INJ_InitStruct->TriggerSource & ADC_CR2_JEXTSEL) | ||||||
|  |               ); | ||||||
|  |     
 | ||||||
|  |     /* Note: Hardware constraint (refer to description of this function):     */ | ||||||
|  |     /* Note: If ADC instance feature scan mode is disabled                    */ | ||||||
|  |     /*       (refer to  ADC instance initialization structure                 */ | ||||||
|  |     /*       parameter @ref SequencersScanMode                                */ | ||||||
|  |     /*       or function @ref LL_ADC_SetSequencersScanMode() ),               */ | ||||||
|  |     /*       this parameter is discarded.                                     */ | ||||||
|  |     LL_ADC_INJ_SetSequencerLength(ADCx, ADC_INJ_InitStruct->SequencerLength); | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     /* Initialization error: ADC instance is not disabled. */ | ||||||
|  |     status = ERROR; | ||||||
|  |   } | ||||||
|  |   return status; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @brief  Set each @ref LL_ADC_INJ_InitTypeDef field to default value. | ||||||
|  |   * @param  ADC_INJ_InitStruct Pointer to a @ref LL_ADC_INJ_InitTypeDef structure | ||||||
|  |   *                            whose fields will be set to default values. | ||||||
|  |   * @retval None | ||||||
|  |   */ | ||||||
|  | void LL_ADC_INJ_StructInit(LL_ADC_INJ_InitTypeDef *ADC_INJ_InitStruct) | ||||||
|  | { | ||||||
|  |   /* Set ADC_INJ_InitStruct fields to default values */ | ||||||
|  |   /* Set fields of ADC group injected */ | ||||||
|  |   ADC_INJ_InitStruct->TriggerSource    = LL_ADC_INJ_TRIG_SOFTWARE; | ||||||
|  |   ADC_INJ_InitStruct->SequencerLength  = LL_ADC_INJ_SEQ_SCAN_DISABLE; | ||||||
|  |   ADC_INJ_InitStruct->SequencerDiscont = LL_ADC_INJ_SEQ_DISCONT_DISABLE; | ||||||
|  |   ADC_INJ_InitStruct->TrigAuto         = LL_ADC_INJ_TRIG_INDEPENDENT; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | #endif /* ADC1 || ADC2 || ADC3 */ | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |   * @} | ||||||
|  |   */ | ||||||
|  | 
 | ||||||
|  | #endif /* USE_FULL_LL_DRIVER */ | ||||||
|  | 
 | ||||||
					Loading…
					
					
				
		Reference in new issue