commit for ADC1 config with three internal channel (Temperature Sensor, Vrefint and Vbat); Working on 32Mhz, single sequencer rank conversion mode with interrupt and overrun data written.
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file adc.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the adc.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 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 */
|
||||||
|
|
||||||
|
/* USER CODE END Private defines */
|
||||||
|
|
||||||
|
void MX_ADC1_Init(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Prototypes */
|
||||||
|
|
||||||
|
/* USER CODE END Prototypes */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ADC_H__ */
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ extern "C" {
|
|||||||
* @brief This is the list of modules to be used in the HAL driver
|
* @brief This is the list of modules to be used in the HAL driver
|
||||||
*/
|
*/
|
||||||
#define HAL_MODULE_ENABLED
|
#define HAL_MODULE_ENABLED
|
||||||
/* #define HAL_ADC_MODULE_ENABLED */
|
#define HAL_ADC_MODULE_ENABLED
|
||||||
/* #define HAL_CEC_MODULE_ENABLED */
|
/* #define HAL_CEC_MODULE_ENABLED */
|
||||||
/* #define HAL_COMP_MODULE_ENABLED */
|
/* #define HAL_COMP_MODULE_ENABLED */
|
||||||
/* #define HAL_CRC_MODULE_ENABLED */
|
/* #define HAL_CRC_MODULE_ENABLED */
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ void EXTI4_15_IRQHandler(void);
|
|||||||
void DMA1_Channel1_IRQHandler(void);
|
void DMA1_Channel1_IRQHandler(void);
|
||||||
void DMA1_Channel2_3_IRQHandler(void);
|
void DMA1_Channel2_3_IRQHandler(void);
|
||||||
void DMA1_Ch4_5_DMAMUX1_OVR_IRQHandler(void);
|
void DMA1_Ch4_5_DMAMUX1_OVR_IRQHandler(void);
|
||||||
|
void ADC1_IRQHandler(void);
|
||||||
void TIM17_IRQHandler(void);
|
void TIM17_IRQHandler(void);
|
||||||
void I2C1_IRQHandler(void);
|
void I2C1_IRQHandler(void);
|
||||||
void I2C2_IRQHandler(void);
|
void I2C2_IRQHandler(void);
|
||||||
|
|||||||
+126
@@ -0,0 +1,126 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file adc.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the ADC instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 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 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
ADC_HandleTypeDef hadc1;
|
||||||
|
|
||||||
|
/* 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.DataAlign = ADC_DATAALIGN_RIGHT;
|
||||||
|
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
||||||
|
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
||||||
|
hadc1.Init.LowPowerAutoWait = DISABLE;
|
||||||
|
hadc1.Init.LowPowerAutoPowerOff = DISABLE;
|
||||||
|
hadc1.Init.ContinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.NbrOfConversion = 1;
|
||||||
|
hadc1.Init.DiscontinuousConvMode = DISABLE;
|
||||||
|
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
||||||
|
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
||||||
|
hadc1.Init.DMAContinuousRequests = DISABLE;
|
||||||
|
hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
||||||
|
hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_160CYCLES_5;
|
||||||
|
hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_79CYCLES_5;
|
||||||
|
hadc1.Init.OversamplingMode = DISABLE;
|
||||||
|
hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
|
||||||
|
if (HAL_ADC_Init(&hadc1) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Configure Regular Channel
|
||||||
|
*/
|
||||||
|
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
|
||||||
|
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||||
|
sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(adcHandle->Instance==ADC1)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN ADC1_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_MspInit 0 */
|
||||||
|
/* ADC1 clock enable */
|
||||||
|
__HAL_RCC_ADC_CLK_ENABLE();
|
||||||
|
|
||||||
|
/* ADC1 interrupt Init */
|
||||||
|
HAL_NVIC_SetPriority(ADC1_IRQn, 3, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(ADC1_IRQn);
|
||||||
|
/* 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_ADC_CLK_DISABLE();
|
||||||
|
|
||||||
|
/* ADC1 interrupt Deinit */
|
||||||
|
HAL_NVIC_DisableIRQ(ADC1_IRQn);
|
||||||
|
/* USER CODE BEGIN ADC1_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "cmsis_os.h"
|
#include "cmsis_os.h"
|
||||||
|
#include "adc.h"
|
||||||
#include "dma.h"
|
#include "dma.h"
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
@@ -97,6 +98,7 @@ int main(void)
|
|||||||
MX_TIM1_Init();
|
MX_TIM1_Init();
|
||||||
MX_I2C1_Init();
|
MX_I2C1_Init();
|
||||||
MX_I2C2_Init();
|
MX_I2C2_Init();
|
||||||
|
MX_ADC1_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
/* External variables --------------------------------------------------------*/
|
||||||
|
extern ADC_HandleTypeDef hadc1;
|
||||||
extern DMA_HandleTypeDef hdma_i2c1_rx;
|
extern DMA_HandleTypeDef hdma_i2c1_rx;
|
||||||
extern DMA_HandleTypeDef hdma_i2c2_tx;
|
extern DMA_HandleTypeDef hdma_i2c2_tx;
|
||||||
extern I2C_HandleTypeDef hi2c1;
|
extern I2C_HandleTypeDef hi2c1;
|
||||||
@@ -180,6 +181,20 @@ void DMA1_Ch4_5_DMAMUX1_OVR_IRQHandler(void)
|
|||||||
/* USER CODE END DMA1_Ch4_5_DMAMUX1_OVR_IRQn 1 */
|
/* USER CODE END DMA1_Ch4_5_DMAMUX1_OVR_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles ADC1 interrupt.
|
||||||
|
*/
|
||||||
|
void ADC1_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN ADC1_IRQn 0 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_IRQn 0 */
|
||||||
|
HAL_ADC_IRQHandler(&hadc1);
|
||||||
|
/* USER CODE BEGIN ADC1_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END ADC1_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles TIM17 global interrupt.
|
* @brief This function handles TIM17 global interrupt.
|
||||||
*/
|
*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,186 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32g0xx_hal_adc_ex.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of ADC HAL extended module.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018 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 STM32G0xx_HAL_ADC_EX_H
|
||||||
|
#define STM32G0xx_HAL_ADC_EX_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32g0xx_hal_def.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32G0xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup ADCEx
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/** @defgroup ADCEx_Exported_Types ADC Extended Exported Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup ADCEx_Exported_Constants ADC Extended Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup ADC_HAL_EC_GROUPS ADC instance - Groups
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define ADC_REGULAR_GROUP (LL_ADC_GROUP_REGULAR) /*!< ADC group regular (available on
|
||||||
|
all STM32 devices) */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macros -----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup ADCEx_Private_Macro_internal_HAL_driver ADC Extended Private Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Macro reserved for internal HAL driver usage, not intended to be used in */
|
||||||
|
/* code of final user. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check whether or not ADC is independent.
|
||||||
|
* @param __HANDLE__ ADC handle.
|
||||||
|
* @note When multimode feature is not available, the macro always returns SET.
|
||||||
|
* @retval SET (ADC is independent) or RESET (ADC is not).
|
||||||
|
*/
|
||||||
|
#define ADC_IS_INDEPENDENT(__HANDLE__) (SET)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calibration factor size verification (7 bits maximum).
|
||||||
|
* @param __CALIBRATION_FACTOR__ Calibration factor value.
|
||||||
|
* @retval SET (__CALIBRATION_FACTOR__ is within the authorized size) or RESET (__CALIBRATION_FACTOR__ is too large)
|
||||||
|
*/
|
||||||
|
#define IS_ADC_CALFACT(__CALIBRATION_FACTOR__) ((__CALIBRATION_FACTOR__) <= (0x7FU))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Verify the ADC oversampling ratio.
|
||||||
|
* @param __RATIO__ programmed ADC oversampling ratio.
|
||||||
|
* @retval SET (__RATIO__ is a valid value) or RESET (__RATIO__ is invalid)
|
||||||
|
*/
|
||||||
|
#define IS_ADC_OVERSAMPLING_RATIO(__RATIO__) (((__RATIO__) == ADC_OVERSAMPLING_RATIO_2 ) || \
|
||||||
|
((__RATIO__) == ADC_OVERSAMPLING_RATIO_4 ) || \
|
||||||
|
((__RATIO__) == ADC_OVERSAMPLING_RATIO_8 ) || \
|
||||||
|
((__RATIO__) == ADC_OVERSAMPLING_RATIO_16 ) || \
|
||||||
|
((__RATIO__) == ADC_OVERSAMPLING_RATIO_32 ) || \
|
||||||
|
((__RATIO__) == ADC_OVERSAMPLING_RATIO_64 ) || \
|
||||||
|
((__RATIO__) == ADC_OVERSAMPLING_RATIO_128 ) || \
|
||||||
|
((__RATIO__) == ADC_OVERSAMPLING_RATIO_256 ))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Verify the ADC oversampling shift.
|
||||||
|
* @param __SHIFT__ programmed ADC oversampling shift.
|
||||||
|
* @retval SET (__SHIFT__ is a valid value) or RESET (__SHIFT__ is invalid)
|
||||||
|
*/
|
||||||
|
#define IS_ADC_RIGHT_BIT_SHIFT(__SHIFT__) (((__SHIFT__) == ADC_RIGHTBITSHIFT_NONE) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_1 ) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_2 ) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_3 ) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_4 ) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_5 ) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_6 ) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_7 ) || \
|
||||||
|
((__SHIFT__) == ADC_RIGHTBITSHIFT_8 ))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Verify the ADC oversampling triggered mode.
|
||||||
|
* @param __MODE__ programmed ADC oversampling triggered mode.
|
||||||
|
* @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
|
||||||
|
*/
|
||||||
|
#define IS_ADC_TRIGGERED_OVERSAMPLING_MODE(__MODE__) (((__MODE__) == ADC_TRIGGEREDMODE_SINGLE_TRIGGER) || \
|
||||||
|
((__MODE__) == ADC_TRIGGEREDMODE_MULTI_TRIGGER) )
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup ADCEx_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup ADCEx_Exported_Functions_Group1
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* IO operation functions *****************************************************/
|
||||||
|
|
||||||
|
/* ADC calibration */
|
||||||
|
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc);
|
||||||
|
uint32_t HAL_ADCEx_Calibration_GetValue(const ADC_HandleTypeDef *hadc);
|
||||||
|
HAL_StatusTypeDef HAL_ADCEx_Calibration_SetValue(ADC_HandleTypeDef *hadc, uint32_t CalibrationFactor);
|
||||||
|
|
||||||
|
/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption) */
|
||||||
|
void HAL_ADCEx_LevelOutOfWindow2Callback(ADC_HandleTypeDef *hadc);
|
||||||
|
void HAL_ADCEx_LevelOutOfWindow3Callback(ADC_HandleTypeDef *hadc);
|
||||||
|
void HAL_ADCEx_EndOfSamplingCallback(ADC_HandleTypeDef *hadc);
|
||||||
|
void HAL_ADCEx_ChannelConfigReadyCallback(ADC_HandleTypeDef *hadc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup ADCEx_Exported_Functions_Group2
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Peripheral Control functions ***********************************************/
|
||||||
|
HAL_StatusTypeDef HAL_ADCEx_DisableVoltageRegulator(ADC_HandleTypeDef *hadc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* STM32G0xx_HAL_ADC_EX_H */
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,416 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32g0xx_hal_adc_ex.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file provides firmware functions to manage the following
|
||||||
|
* functionalities of the Analog to Digital Converter (ADC)
|
||||||
|
* peripheral:
|
||||||
|
* + Peripheral Control functions
|
||||||
|
* Other functions (generic functions) are available in file
|
||||||
|
* "stm32g0xx_hal_adc.c".
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018 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.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
@verbatim
|
||||||
|
[..]
|
||||||
|
(@) Sections "ADC peripheral features" and "How to use this driver" are
|
||||||
|
available in file of generic functions "stm32g0xx_hal_adc.c".
|
||||||
|
[..]
|
||||||
|
@endverbatim
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32g0xx_hal.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32G0xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup ADCEx ADCEx
|
||||||
|
* @brief ADC Extended HAL module driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAL_ADC_MODULE_ENABLED
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup ADCEx_Private_Constants ADC Extended Private Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Fixed timeout value for ADC calibration. */
|
||||||
|
/* Values defined to be higher than worst cases: maximum ratio between ADC */
|
||||||
|
/* and CPU clock frequencies. */
|
||||||
|
/* Example of profile low frequency : ADC frequency at 31.25kHz (ADC clock */
|
||||||
|
/* source PLL 8MHz, ADC clock prescaler 256), CPU frequency 52MHz. */
|
||||||
|
/* Calibration time max = 116 / fADC (refer to datasheet) */
|
||||||
|
/* = 193 024 CPU cycles */
|
||||||
|
#define ADC_CALIBRATION_TIMEOUT (193024UL) /*!< ADC calibration time-out value (unit: CPU cycles) */
|
||||||
|
#define ADC_DISABLE_TIMEOUT (2UL)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup ADCEx_Exported_Functions ADC Extended Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup ADCEx_Exported_Functions_Group1 Extended Input and Output operation functions
|
||||||
|
* @brief Extended IO operation functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
===============================================================================
|
||||||
|
##### IO operation functions #####
|
||||||
|
===============================================================================
|
||||||
|
[..] This section provides functions allowing to:
|
||||||
|
|
||||||
|
(+) Perform the ADC self-calibration.
|
||||||
|
(+) Get calibration factors.
|
||||||
|
(+) Set calibration factors.
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Perform an ADC automatic self-calibration
|
||||||
|
* Calibration prerequisite: ADC must be disabled (execute this
|
||||||
|
* function before HAL_ADC_Start() or after HAL_ADC_Stop() ).
|
||||||
|
* @note Calibration factor can be read after calibration, using function
|
||||||
|
* HAL_ADC_GetValue() (value on 7 bits: from DR[6;0]).
|
||||||
|
* @param hadc ADC handle
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef tmp_hal_status;
|
||||||
|
__IO uint32_t wait_loop_index = 0UL;
|
||||||
|
uint32_t backup_setting_cfgr1;
|
||||||
|
uint32_t calibration_index;
|
||||||
|
uint32_t calibration_factor_accumulated = 0;
|
||||||
|
uint32_t tickstart;
|
||||||
|
uint32_t adc_clk_async_presc;
|
||||||
|
__IO uint32_t delay_cpu_cycles;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
|
||||||
|
|
||||||
|
__HAL_LOCK(hadc);
|
||||||
|
|
||||||
|
/* Calibration prerequisite: ADC must be disabled. */
|
||||||
|
|
||||||
|
/* Disable the ADC (if not already disabled) */
|
||||||
|
tmp_hal_status = ADC_Disable(hadc);
|
||||||
|
|
||||||
|
/* Check if ADC is effectively disabled */
|
||||||
|
if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
|
||||||
|
{
|
||||||
|
/* Set ADC state */
|
||||||
|
ADC_STATE_CLR_SET(hadc->State,
|
||||||
|
HAL_ADC_STATE_REG_BUSY,
|
||||||
|
HAL_ADC_STATE_BUSY_INTERNAL);
|
||||||
|
|
||||||
|
/* Manage settings impacting calibration */
|
||||||
|
/* - Disable ADC mode auto power-off */
|
||||||
|
/* - Disable ADC DMA transfer request during calibration */
|
||||||
|
/* Note: Specificity of this STM32 series: Calibration factor is */
|
||||||
|
/* available in data register and also transferred by DMA. */
|
||||||
|
/* To not insert ADC calibration factor among ADC conversion data */
|
||||||
|
/* in array variable, DMA transfer must be disabled during */
|
||||||
|
/* calibration. */
|
||||||
|
backup_setting_cfgr1 = READ_BIT(hadc->Instance->CFGR1, ADC_CFGR1_DMAEN | ADC_CFGR1_DMACFG | ADC_CFGR1_AUTOFF);
|
||||||
|
CLEAR_BIT(hadc->Instance->CFGR1, ADC_CFGR1_DMAEN | ADC_CFGR1_DMACFG | ADC_CFGR1_AUTOFF);
|
||||||
|
|
||||||
|
/* ADC calibration procedure */
|
||||||
|
/* Note: Perform an averaging of 8 calibrations for optimized accuracy */
|
||||||
|
for (calibration_index = 0UL; calibration_index < 8UL; calibration_index++)
|
||||||
|
{
|
||||||
|
/* Start ADC calibration */
|
||||||
|
LL_ADC_StartCalibration(hadc->Instance);
|
||||||
|
|
||||||
|
/* Wait for calibration completion */
|
||||||
|
while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
|
||||||
|
{
|
||||||
|
wait_loop_index++;
|
||||||
|
if (wait_loop_index >= ADC_CALIBRATION_TIMEOUT)
|
||||||
|
{
|
||||||
|
/* Update ADC state machine to error */
|
||||||
|
ADC_STATE_CLR_SET(hadc->State,
|
||||||
|
HAL_ADC_STATE_BUSY_INTERNAL,
|
||||||
|
HAL_ADC_STATE_ERROR_INTERNAL);
|
||||||
|
|
||||||
|
__HAL_UNLOCK(hadc);
|
||||||
|
|
||||||
|
return HAL_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the calibration factor and increment by one */
|
||||||
|
calibration_factor_accumulated += (LL_ADC_GetCalibrationFactor(hadc->Instance) + 1UL);
|
||||||
|
}
|
||||||
|
/* Compute average (rounded up to the nearest integer) */
|
||||||
|
calibration_factor_accumulated += (calibration_index / 2UL);
|
||||||
|
calibration_factor_accumulated /= calibration_index;
|
||||||
|
|
||||||
|
/* Apply calibration factor (requires ADC enable and disable process) */
|
||||||
|
LL_ADC_Enable(hadc->Instance);
|
||||||
|
|
||||||
|
/* Case of ADC clocked at low frequency: Delay required between ADC enable and disable actions */
|
||||||
|
if (LL_ADC_GetClock(hadc->Instance) == LL_ADC_CLOCK_ASYNC)
|
||||||
|
{
|
||||||
|
adc_clk_async_presc = LL_ADC_GetCommonClock(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
|
||||||
|
|
||||||
|
/* Delay applied only when ADC clock frequency is much lower than CPU clock frequency
|
||||||
|
(in other cases, code execution time is sufficient to ensure necessary delay) */
|
||||||
|
if (adc_clk_async_presc >= LL_ADC_CLOCK_ASYNC_DIV16)
|
||||||
|
{
|
||||||
|
/* Delay loop initialization and execution */
|
||||||
|
/* Delay depends on ADC clock prescaler: Compute ADC clock asynchronous prescaler to decimal format
|
||||||
|
(for instance, computation from ADC prescaler 64 (register bitfield value 0x9) will give decimal value 64) */
|
||||||
|
delay_cpu_cycles = (1UL << ((adc_clk_async_presc >> ADC_CCR_PRESC_Pos) - 3UL));
|
||||||
|
/* Divide variable by 2 to compensate partially CPU processing cycles */
|
||||||
|
delay_cpu_cycles >>= 1UL;
|
||||||
|
|
||||||
|
while (delay_cpu_cycles != 0UL)
|
||||||
|
{
|
||||||
|
delay_cpu_cycles--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LL_ADC_SetCalibrationFactor(hadc->Instance, calibration_factor_accumulated);
|
||||||
|
LL_ADC_Disable(hadc->Instance);
|
||||||
|
|
||||||
|
/* Wait for ADC effectively disabled before changing configuration */
|
||||||
|
/* Get tick count */
|
||||||
|
tickstart = HAL_GetTick();
|
||||||
|
|
||||||
|
while (LL_ADC_IsEnabled(hadc->Instance) != 0UL)
|
||||||
|
{
|
||||||
|
if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT)
|
||||||
|
{
|
||||||
|
/* New check to avoid false timeout detection in case of preemption */
|
||||||
|
if (LL_ADC_IsEnabled(hadc->Instance) != 0UL)
|
||||||
|
{
|
||||||
|
/* Update ADC state machine to error */
|
||||||
|
SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
|
||||||
|
|
||||||
|
/* Set ADC error code to ADC peripheral internal error */
|
||||||
|
SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
|
||||||
|
|
||||||
|
__HAL_UNLOCK(hadc);
|
||||||
|
|
||||||
|
return HAL_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Restore configuration after calibration */
|
||||||
|
SET_BIT(hadc->Instance->CFGR1, backup_setting_cfgr1);
|
||||||
|
|
||||||
|
/* Set ADC state */
|
||||||
|
ADC_STATE_CLR_SET(hadc->State,
|
||||||
|
HAL_ADC_STATE_BUSY_INTERNAL,
|
||||||
|
HAL_ADC_STATE_READY);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
|
||||||
|
|
||||||
|
/* Note: No need to update variable "tmp_hal_status" here: already set */
|
||||||
|
/* to state "HAL_ERROR" by function disabling the ADC. */
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_UNLOCK(hadc);
|
||||||
|
|
||||||
|
return tmp_hal_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the calibration factor.
|
||||||
|
* @param hadc ADC handle.
|
||||||
|
* @retval Calibration value.
|
||||||
|
*/
|
||||||
|
uint32_t HAL_ADCEx_Calibration_GetValue(const ADC_HandleTypeDef *hadc)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
|
||||||
|
|
||||||
|
/* Return the selected ADC calibration value */
|
||||||
|
return ((hadc->Instance->CALFACT) & 0x0000007FU);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the calibration factor to overwrite automatic conversion result.
|
||||||
|
* ADC must be enabled and no conversion is ongoing.
|
||||||
|
* @param hadc ADC handle
|
||||||
|
* @param CalibrationFactor Calibration factor (coded on 7 bits maximum)
|
||||||
|
* @retval HAL state
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_ADCEx_Calibration_SetValue(ADC_HandleTypeDef *hadc, uint32_t CalibrationFactor)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef tmp_hal_status = HAL_OK;
|
||||||
|
uint32_t tmp_adc_is_conversion_on_going_regular;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
|
||||||
|
assert_param(IS_ADC_CALFACT(CalibrationFactor));
|
||||||
|
|
||||||
|
__HAL_LOCK(hadc);
|
||||||
|
|
||||||
|
/* Verification of hardware constraints before modifying the calibration */
|
||||||
|
/* factors register: ADC must be enabled, no conversion on going. */
|
||||||
|
tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
|
||||||
|
|
||||||
|
if ((LL_ADC_IsEnabled(hadc->Instance) != 0UL)
|
||||||
|
&& (tmp_adc_is_conversion_on_going_regular == 0UL)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
hadc->Instance->CALFACT &= ~ADC_CALFACT_CALFACT;
|
||||||
|
hadc->Instance->CALFACT |= CalibrationFactor;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Update ADC state machine */
|
||||||
|
SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
|
||||||
|
/* Update ADC error code */
|
||||||
|
SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
|
||||||
|
|
||||||
|
/* Update ADC state machine to error */
|
||||||
|
tmp_hal_status = HAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
__HAL_UNLOCK(hadc);
|
||||||
|
|
||||||
|
return tmp_hal_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Analog watchdog 2 callback in non-blocking mode.
|
||||||
|
* @param hadc ADC handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__weak void HAL_ADCEx_LevelOutOfWindow2Callback(ADC_HandleTypeDef *hadc)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
UNUSED(hadc);
|
||||||
|
|
||||||
|
/* NOTE : This function should not be modified. When the callback is needed,
|
||||||
|
function HAL_ADCEx_LevelOutOfWindow2Callback must be implemented in the user file.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Analog watchdog 3 callback in non-blocking mode.
|
||||||
|
* @param hadc ADC handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__weak void HAL_ADCEx_LevelOutOfWindow3Callback(ADC_HandleTypeDef *hadc)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
UNUSED(hadc);
|
||||||
|
|
||||||
|
/* NOTE : This function should not be modified. When the callback is needed,
|
||||||
|
function HAL_ADCEx_LevelOutOfWindow3Callback must be implemented in the user file.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief End Of Sampling callback in non-blocking mode.
|
||||||
|
* @param hadc ADC handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__weak void HAL_ADCEx_EndOfSamplingCallback(ADC_HandleTypeDef *hadc)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
UNUSED(hadc);
|
||||||
|
|
||||||
|
/* NOTE : This function should not be modified. When the callback is needed,
|
||||||
|
function HAL_ADCEx_EndOfSamplingCallback must be implemented in the user file.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ADC channel configuration ready callback in non-blocking mode.
|
||||||
|
* @param hadc ADC handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__weak void HAL_ADCEx_ChannelConfigReadyCallback(ADC_HandleTypeDef *hadc)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
UNUSED(hadc);
|
||||||
|
|
||||||
|
/* NOTE : This function should not be modified. When the callback is needed,
|
||||||
|
function HAL_ADCEx_ChannelConfigReadyCallback must be implemented in the user file.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable ADC voltage regulator.
|
||||||
|
* @note Disabling voltage regulator allows to save power. This operation can
|
||||||
|
* be carried out only when ADC is disabled.
|
||||||
|
* @note To enable again the voltage regulator, the user is expected to
|
||||||
|
* resort to HAL_ADC_Init() API.
|
||||||
|
* @param hadc ADC handle
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_ADCEx_DisableVoltageRegulator(ADC_HandleTypeDef *hadc)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef tmp_hal_status;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
|
||||||
|
|
||||||
|
/* Setting of this feature is conditioned to ADC state: ADC must be ADC disabled */
|
||||||
|
if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
|
||||||
|
{
|
||||||
|
LL_ADC_DisableInternalRegulator(hadc->Instance);
|
||||||
|
tmp_hal_status = HAL_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmp_hal_status = HAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmp_hal_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* HAL_ADC_MODULE_ENABLED */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
@@ -0,0 +1,778 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32g0xx_ll_adc.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief ADC LL module driver
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018 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 "stm32g0xx_ll_adc.h"
|
||||||
|
#include "stm32g0xx_ll_bus.h"
|
||||||
|
|
||||||
|
#ifdef USE_FULL_ASSERT
|
||||||
|
#include "stm32_assert.h"
|
||||||
|
#else
|
||||||
|
#define assert_param(expr) ((void)0U)
|
||||||
|
#endif /* USE_FULL_ASSERT */
|
||||||
|
|
||||||
|
/** @addtogroup STM32G0xx_LL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (ADC1)
|
||||||
|
|
||||||
|
/** @addtogroup ADC_LL ADC
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/** @addtogroup ADC_LL_Private_Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Definitions of ADC hardware constraints delays */
|
||||||
|
/* Note: Only ADC peripheral HW delays are defined in ADC LL driver driver, */
|
||||||
|
/* not timeout values: */
|
||||||
|
/* Timeout values for ADC operations are dependent to device clock */
|
||||||
|
/* configuration (system clock versus ADC clock), */
|
||||||
|
/* and therefore must be defined in user application. */
|
||||||
|
/* Refer to @ref ADC_LL_EC_HW_DELAYS for description of ADC timeout */
|
||||||
|
/* values definition. */
|
||||||
|
/* Note: ADC timeout values are defined here in CPU cycles to be independent */
|
||||||
|
/* of device clock setting. */
|
||||||
|
/* In user application, ADC timeout values should be defined with */
|
||||||
|
/* temporal values, in function of device clock settings. */
|
||||||
|
/* Highest ratio CPU clock frequency vs ADC clock frequency: */
|
||||||
|
/* - ADC clock from synchronous clock with AHB prescaler 512, */
|
||||||
|
/* APB prescaler 16, ADC prescaler 4. */
|
||||||
|
/* - ADC clock from asynchronous clock (HSI) with prescaler 1, */
|
||||||
|
/* with highest ratio CPU clock frequency vs HSI clock frequency: */
|
||||||
|
/* CPU clock frequency max 56MHz, HSI frequency 16MHz: ratio 4. */
|
||||||
|
/* Unit: CPU cycles. */
|
||||||
|
#define ADC_CLOCK_RATIO_VS_CPU_HIGHEST (512UL * 16UL * 4UL)
|
||||||
|
#define ADC_TIMEOUT_DISABLE_CPU_CYCLES (ADC_CLOCK_RATIO_VS_CPU_HIGHEST * 1UL)
|
||||||
|
#define ADC_TIMEOUT_STOP_CONVERSION_CPU_CYCLES (ADC_CLOCK_RATIO_VS_CPU_HIGHEST * 1UL)
|
||||||
|
/* Note: CCRDY handshake requires 1APB + 2 ADC + 3 APB cycles */
|
||||||
|
/* after the channel configuration has been changed. */
|
||||||
|
/* Driver timeout is approximated to 6 CPU cycles. */
|
||||||
|
#define ADC_TIMEOUT_CCRDY_CPU_CYCLES (ADC_CLOCK_RATIO_VS_CPU_HIGHEST * 6UL)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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_ASYNC_DIV1) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV2) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV4) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV6) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV8) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV10) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV12) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV16) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV32) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV64) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV128) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC_DIV256) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_CLOCK_FREQ_MODE(__CLOCK_FREQ_MODE__) \
|
||||||
|
(((__CLOCK_FREQ_MODE__) == LL_ADC_CLOCK_FREQ_MODE_HIGH) \
|
||||||
|
|| ((__CLOCK_FREQ_MODE__) == LL_ADC_CLOCK_FREQ_MODE_LOW) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Check of parameters for configuration of ADC hierarchical scope: */
|
||||||
|
/* ADC instance. */
|
||||||
|
#define IS_LL_ADC_CLOCK(__CLOCK__) \
|
||||||
|
(((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV4) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV2) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_SYNC_PCLK_DIV1) \
|
||||||
|
|| ((__CLOCK__) == LL_ADC_CLOCK_ASYNC) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#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_LOW_POWER(__LOW_POWER__) \
|
||||||
|
(((__LOW_POWER__) == LL_ADC_LP_MODE_NONE) \
|
||||||
|
|| ((__LOW_POWER__) == LL_ADC_LP_AUTOWAIT) \
|
||||||
|
|| ((__LOW_POWER__) == LL_ADC_LP_AUTOPOWEROFF) \
|
||||||
|
|| ((__LOW_POWER__) == LL_ADC_LP_AUTOWAIT_AUTOPOWEROFF) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/* Check of parameters for configuration of ADC hierarchical scope: */
|
||||||
|
/* ADC group regular */
|
||||||
|
#if defined(TIM15) && defined(TIM6) && defined(TIM2)
|
||||||
|
#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_TRGO2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH4 ) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM6_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM15_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
|
||||||
|
)
|
||||||
|
#elif defined(TIM15) && defined(TIM6)
|
||||||
|
#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_TRGO2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH4 ) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM6_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM15_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
|
||||||
|
)
|
||||||
|
#elif defined(TIM2)
|
||||||
|
#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_TRGO2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH4 ) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM2_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
|
||||||
|
)
|
||||||
|
#else
|
||||||
|
#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_TRGO2) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM1_CH4 ) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_TIM3_TRGO) \
|
||||||
|
|| ((__REG_TRIG_SOURCE__) == LL_ADC_REG_TRIG_EXT_EXTI_LINE11) \
|
||||||
|
)
|
||||||
|
#endif /* TIM15 && TIM6 && TIM2 */
|
||||||
|
|
||||||
|
#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_OVR_DATA_BEHAVIOR(__REG_OVR_DATA_BEHAVIOR__) \
|
||||||
|
(((__REG_OVR_DATA_BEHAVIOR__) == LL_ADC_REG_OVR_DATA_PRESERVED) \
|
||||||
|
|| ((__REG_OVR_DATA_BEHAVIOR__) == LL_ADC_REG_OVR_DATA_OVERWRITTEN) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define IS_LL_ADC_REG_SEQ_MODE(__REG_SEQ_MODE__) \
|
||||||
|
(((__REG_SEQ_MODE__) == LL_ADC_REG_SEQ_FIXED) \
|
||||||
|
|| ((__REG_SEQ_MODE__) == LL_ADC_REG_SEQ_CONFIGURABLE) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#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) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#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) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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.
|
||||||
|
* @note This function is performing a hard reset, using high level
|
||||||
|
* clock source RCC ADC reset.
|
||||||
|
* @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 const *ADCxy_COMMON)
|
||||||
|
{
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON));
|
||||||
|
|
||||||
|
/* Prevent unused argument(s) compilation warning if no assert_param check */
|
||||||
|
(void)(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 pADC_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, const LL_ADC_CommonInitTypeDef *pADC_CommonInitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_COMMON_INSTANCE(ADCxy_COMMON));
|
||||||
|
assert_param(IS_LL_ADC_COMMON_CLOCK(pADC_CommonInitStruct->CommonClock));
|
||||||
|
|
||||||
|
/* Note: Hardware constraint (refer to description of functions */
|
||||||
|
/* "LL_ADC_SetCommonXXX()": */
|
||||||
|
/* 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) */
|
||||||
|
LL_ADC_SetCommonClock(ADCxy_COMMON, pADC_CommonInitStruct->CommonClock);
|
||||||
|
}
|
||||||
|
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 pADC_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 *pADC_CommonInitStruct)
|
||||||
|
{
|
||||||
|
/* Set pADC_CommonInitStruct fields to default values */
|
||||||
|
/* Set fields of ADC common */
|
||||||
|
/* (all ADC instances belonging to the same ADC common instance) */
|
||||||
|
pADC_CommonInitStruct->CommonClock = LL_ADC_CLOCK_ASYNC_DIV2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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().
|
||||||
|
* @note If this functions returns error status, it means that ADC instance
|
||||||
|
* is in an unknown state.
|
||||||
|
* In this case, perform a hard reset using high level
|
||||||
|
* clock source RCC ADC reset.
|
||||||
|
* Refer to 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;
|
||||||
|
|
||||||
|
__IO uint32_t timeout_cpu_cycles = 0UL;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(ADCx));
|
||||||
|
|
||||||
|
/* Disable ADC instance if not already disabled. */
|
||||||
|
if (LL_ADC_IsEnabled(ADCx) == 1UL)
|
||||||
|
{
|
||||||
|
/* Stop potential ADC conversion on going on ADC group regular. */
|
||||||
|
LL_ADC_REG_StopConversion(ADCx);
|
||||||
|
|
||||||
|
/* Wait for ADC conversions are effectively stopped */
|
||||||
|
timeout_cpu_cycles = ADC_TIMEOUT_STOP_CONVERSION_CPU_CYCLES;
|
||||||
|
while (LL_ADC_REG_IsStopConversionOngoing(ADCx) == 1UL)
|
||||||
|
{
|
||||||
|
timeout_cpu_cycles--;
|
||||||
|
if (timeout_cpu_cycles == 0UL)
|
||||||
|
{
|
||||||
|
/* Time-out error */
|
||||||
|
status = ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable the ADC instance */
|
||||||
|
LL_ADC_Disable(ADCx);
|
||||||
|
|
||||||
|
/* Wait for ADC instance is effectively disabled */
|
||||||
|
timeout_cpu_cycles = ADC_TIMEOUT_DISABLE_CPU_CYCLES;
|
||||||
|
while (LL_ADC_IsDisableOngoing(ADCx) == 1UL)
|
||||||
|
{
|
||||||
|
timeout_cpu_cycles--;
|
||||||
|
if (timeout_cpu_cycles == 0UL)
|
||||||
|
{
|
||||||
|
/* Time-out error */
|
||||||
|
status = ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check whether ADC state is compliant with expected state */
|
||||||
|
if (READ_BIT(ADCx->CR,
|
||||||
|
(ADC_CR_ADSTP | ADC_CR_ADSTART
|
||||||
|
| ADC_CR_ADDIS | ADC_CR_ADEN)
|
||||||
|
)
|
||||||
|
== 0UL)
|
||||||
|
{
|
||||||
|
/* ========== Reset ADC registers ========== */
|
||||||
|
/* Reset register IER */
|
||||||
|
CLEAR_BIT(ADCx->IER,
|
||||||
|
(LL_ADC_IT_ADRDY
|
||||||
|
| LL_ADC_IT_EOC
|
||||||
|
| LL_ADC_IT_EOS
|
||||||
|
| LL_ADC_IT_OVR
|
||||||
|
| LL_ADC_IT_EOSMP
|
||||||
|
| LL_ADC_IT_AWD1
|
||||||
|
| LL_ADC_IT_AWD2
|
||||||
|
| LL_ADC_IT_AWD3
|
||||||
|
| LL_ADC_IT_EOCAL
|
||||||
|
| LL_ADC_IT_CCRDY
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register ISR */
|
||||||
|
SET_BIT(ADCx->ISR,
|
||||||
|
(LL_ADC_FLAG_ADRDY
|
||||||
|
| LL_ADC_FLAG_EOC
|
||||||
|
| LL_ADC_FLAG_EOS
|
||||||
|
| LL_ADC_FLAG_OVR
|
||||||
|
| LL_ADC_FLAG_EOSMP
|
||||||
|
| LL_ADC_FLAG_AWD1
|
||||||
|
| LL_ADC_FLAG_AWD2
|
||||||
|
| LL_ADC_FLAG_AWD3
|
||||||
|
| LL_ADC_FLAG_EOCAL
|
||||||
|
| LL_ADC_FLAG_CCRDY
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register CR */
|
||||||
|
/* Bits ADC_CR_ADCAL, ADC_CR_ADSTP, ADC_CR_ADSTART are in access mode */
|
||||||
|
/* "read-set": no direct reset applicable. */
|
||||||
|
CLEAR_BIT(ADCx->CR, ADC_CR_ADVREGEN);
|
||||||
|
|
||||||
|
/* Reset register CFGR1 */
|
||||||
|
CLEAR_BIT(ADCx->CFGR1,
|
||||||
|
(ADC_CFGR1_AWD1CH | ADC_CFGR1_AWD1EN | ADC_CFGR1_AWD1SGL | ADC_CFGR1_DISCEN
|
||||||
|
| ADC_CFGR1_CHSELRMOD | ADC_CFGR1_AUTOFF | ADC_CFGR1_WAIT | ADC_CFGR1_CONT | ADC_CFGR1_OVRMOD
|
||||||
|
| ADC_CFGR1_EXTEN | ADC_CFGR1_EXTSEL | ADC_CFGR1_ALIGN | ADC_CFGR1_RES
|
||||||
|
| ADC_CFGR1_SCANDIR | ADC_CFGR1_DMACFG | ADC_CFGR1_DMAEN)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register SMPR */
|
||||||
|
CLEAR_BIT(ADCx->SMPR, ADC_SMPR_SMP1 | ADC_SMPR_SMP2 | ADC_SMPR_SMPSEL);
|
||||||
|
|
||||||
|
/* Reset register CHSELR */
|
||||||
|
CLEAR_BIT(ADCx->CHSELR,
|
||||||
|
(ADC_CHSELR_CHSEL18 | ADC_CHSELR_CHSEL17 | ADC_CHSELR_CHSEL16
|
||||||
|
| ADC_CHSELR_CHSEL15 | ADC_CHSELR_CHSEL14 | ADC_CHSELR_CHSEL13 | ADC_CHSELR_CHSEL12
|
||||||
|
| ADC_CHSELR_CHSEL11 | ADC_CHSELR_CHSEL10 | ADC_CHSELR_CHSEL9 | ADC_CHSELR_CHSEL8
|
||||||
|
| ADC_CHSELR_CHSEL7 | ADC_CHSELR_CHSEL6 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL4
|
||||||
|
| ADC_CHSELR_CHSEL3 | ADC_CHSELR_CHSEL2 | ADC_CHSELR_CHSEL1 | ADC_CHSELR_CHSEL0)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Reset register AWD1TR */
|
||||||
|
MODIFY_REG(ADCx->AWD1TR, ADC_AWD1TR_HT1 | ADC_AWD1TR_LT1, ADC_AWD1TR_HT1);
|
||||||
|
|
||||||
|
/* Reset register AWD2TR */
|
||||||
|
MODIFY_REG(ADCx->AWD2TR, ADC_AWD2TR_HT2 | ADC_AWD2TR_LT2, ADC_AWD2TR_HT2);
|
||||||
|
|
||||||
|
/* Reset register AWD3TR */
|
||||||
|
MODIFY_REG(ADCx->AWD3TR, ADC_AWD3TR_HT3 | ADC_AWD3TR_LT3, ADC_AWD3TR_HT3);
|
||||||
|
|
||||||
|
/* Wait for ADC channel configuration ready */
|
||||||
|
timeout_cpu_cycles = ADC_TIMEOUT_CCRDY_CPU_CYCLES;
|
||||||
|
while (LL_ADC_IsActiveFlag_CCRDY(ADCx) == 0UL)
|
||||||
|
{
|
||||||
|
timeout_cpu_cycles--;
|
||||||
|
if (timeout_cpu_cycles == 0UL)
|
||||||
|
{
|
||||||
|
/* Time-out error */
|
||||||
|
status = ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear flag ADC channel configuration ready */
|
||||||
|
LL_ADC_ClearFlag_CCRDY(ADCx);
|
||||||
|
|
||||||
|
/* Reset register DR */
|
||||||
|
/* bits in access mode read only, no direct reset applicable */
|
||||||
|
|
||||||
|
/* Reset register CALFACT */
|
||||||
|
CLEAR_BIT(ADCx->CALFACT, ADC_CALFACT_CALFACT);
|
||||||
|
|
||||||
|
/* Reset register CFGR2 */
|
||||||
|
/* Note: CFGR2 reset done at the end of de-initialization due to */
|
||||||
|
/* clock source reset */
|
||||||
|
/* Note: Update of ADC clock mode is conditioned to ADC state disabled: */
|
||||||
|
/* already done above. */
|
||||||
|
CLEAR_BIT(ADCx->CFGR2,
|
||||||
|
(ADC_CFGR2_CKMODE
|
||||||
|
| ADC_CFGR2_TOVS | ADC_CFGR2_OVSS | ADC_CFGR2_OVSR
|
||||||
|
| ADC_CFGR2_OVSE)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* ADC instance is in an unknown state */
|
||||||
|
/* Need to performing a hard reset of ADC instance, using high level */
|
||||||
|
/* clock source RCC ADC reset. */
|
||||||
|
/* Caution: On this STM32 series, if several ADC instances are available */
|
||||||
|
/* on the selected device, RCC ADC reset will reset */
|
||||||
|
/* all ADC instances belonging to the common ADC instance. */
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize some features of ADC instance.
|
||||||
|
* @note These parameters have an impact on ADC scope: ADC instance.
|
||||||
|
* 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 series. 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 sequencer:
|
||||||
|
* Depending on the sequencer mode (refer to
|
||||||
|
* function @ref LL_ADC_REG_SetSequencerConfigurable() ):
|
||||||
|
* - map channel on the selected sequencer rank.
|
||||||
|
* Refer to function @ref LL_ADC_REG_SetSequencerRanks();
|
||||||
|
* - map channel on rank corresponding to channel number.
|
||||||
|
* Refer to function @ref LL_ADC_REG_SetSequencerChannels();
|
||||||
|
* - Set ADC channel sampling time
|
||||||
|
* Refer to function LL_ADC_SetSamplingTimeCommonChannels();
|
||||||
|
* Refer to function LL_ADC_SetChannelSamplingTime();
|
||||||
|
* @param ADCx ADC instance
|
||||||
|
* @param pADC_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, const LL_ADC_InitTypeDef *pADC_InitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(ADCx));
|
||||||
|
|
||||||
|
assert_param(IS_LL_ADC_CLOCK(pADC_InitStruct->Clock));
|
||||||
|
assert_param(IS_LL_ADC_RESOLUTION(pADC_InitStruct->Resolution));
|
||||||
|
assert_param(IS_LL_ADC_DATA_ALIGN(pADC_InitStruct->DataAlignment));
|
||||||
|
assert_param(IS_LL_ADC_LOW_POWER(pADC_InitStruct->LowPowerMode));
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
/* - Set ADC low power mode */
|
||||||
|
MODIFY_REG(ADCx->CFGR1,
|
||||||
|
ADC_CFGR1_RES
|
||||||
|
| ADC_CFGR1_ALIGN
|
||||||
|
| ADC_CFGR1_WAIT
|
||||||
|
| ADC_CFGR1_AUTOFF
|
||||||
|
,
|
||||||
|
pADC_InitStruct->Resolution
|
||||||
|
| pADC_InitStruct->DataAlignment
|
||||||
|
| pADC_InitStruct->LowPowerMode
|
||||||
|
);
|
||||||
|
|
||||||
|
MODIFY_REG(ADCx->CFGR2,
|
||||||
|
ADC_CFGR2_CKMODE
|
||||||
|
,
|
||||||
|
pADC_InitStruct->Clock
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Initialization error: ADC instance is not disabled. */
|
||||||
|
status = ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set each @ref LL_ADC_InitTypeDef field to default value.
|
||||||
|
* @param pADC_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 *pADC_InitStruct)
|
||||||
|
{
|
||||||
|
/* Set pADC_InitStruct fields to default values */
|
||||||
|
/* Set fields of ADC instance */
|
||||||
|
pADC_InitStruct->Clock = LL_ADC_CLOCK_SYNC_PCLK_DIV2;
|
||||||
|
pADC_InitStruct->Resolution = LL_ADC_RESOLUTION_12B;
|
||||||
|
pADC_InitStruct->DataAlignment = LL_ADC_DATA_ALIGN_RIGHT;
|
||||||
|
pADC_InitStruct->LowPowerMode = LL_ADC_LP_MODE_NONE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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 series. 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 Before using this function, ADC group regular sequencer
|
||||||
|
* must be configured: refer to function
|
||||||
|
* @ref LL_ADC_REG_SetSequencerConfigurable().
|
||||||
|
* @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 sequencer:
|
||||||
|
* Depending on the sequencer mode (refer to
|
||||||
|
* function @ref LL_ADC_REG_SetSequencerConfigurable() ):
|
||||||
|
* - map channel on the selected sequencer rank.
|
||||||
|
* Refer to function @ref LL_ADC_REG_SetSequencerRanks();
|
||||||
|
* - map channel on rank corresponding to channel number.
|
||||||
|
* Refer to function @ref LL_ADC_REG_SetSequencerChannels();
|
||||||
|
* - Set ADC channel sampling time
|
||||||
|
* Refer to function LL_ADC_SetSamplingTimeCommonChannels();
|
||||||
|
* Refer to function LL_ADC_SetChannelSamplingTime();
|
||||||
|
* @param ADCx ADC instance
|
||||||
|
* @param pADC_RegInitStruct 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, const LL_ADC_REG_InitTypeDef *pADC_RegInitStruct)
|
||||||
|
{
|
||||||
|
ErrorStatus status = SUCCESS;
|
||||||
|
|
||||||
|
/* Check the parameters */
|
||||||
|
assert_param(IS_ADC_ALL_INSTANCE(ADCx));
|
||||||
|
assert_param(IS_LL_ADC_REG_TRIG_SOURCE(pADC_RegInitStruct->TriggerSource));
|
||||||
|
assert_param(IS_LL_ADC_REG_CONTINUOUS_MODE(pADC_RegInitStruct->ContinuousMode));
|
||||||
|
assert_param(IS_LL_ADC_REG_DMA_TRANSFER(pADC_RegInitStruct->DMATransfer));
|
||||||
|
assert_param(IS_LL_ADC_REG_OVR_DATA_BEHAVIOR(pADC_RegInitStruct->Overrun));
|
||||||
|
|
||||||
|
if (LL_ADC_REG_GetSequencerConfigurable(ADCx) != LL_ADC_REG_SEQ_FIXED)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_ADC_REG_SEQ_SCAN_LENGTH(pADC_RegInitStruct->SequencerLength));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((LL_ADC_REG_GetSequencerConfigurable(ADCx) == LL_ADC_REG_SEQ_FIXED)
|
||||||
|
|| (pADC_RegInitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
assert_param(IS_LL_ADC_REG_SEQ_SCAN_DISCONT_MODE(pADC_RegInitStruct->SequencerDiscont));
|
||||||
|
|
||||||
|
/* ADC group regular continuous mode and discontinuous mode */
|
||||||
|
/* can not be enabled simultenaeously */
|
||||||
|
assert_param((pADC_RegInitStruct->ContinuousMode == LL_ADC_REG_CONV_SINGLE)
|
||||||
|
|| (pADC_RegInitStruct->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 */
|
||||||
|
/* - Set ADC group regular overrun behavior */
|
||||||
|
/* Note: On this STM32 series, ADC trigger edge is set to value 0x0 by */
|
||||||
|
/* setting of trigger source to SW start. */
|
||||||
|
if ((LL_ADC_REG_GetSequencerConfigurable(ADCx) == LL_ADC_REG_SEQ_FIXED)
|
||||||
|
|| (pADC_RegInitStruct->SequencerLength != LL_ADC_REG_SEQ_SCAN_DISABLE)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
/* Case of sequencer mode fixed
|
||||||
|
or sequencer length >= 2 ranks with sequencer mode fully configurable:
|
||||||
|
discontinuous mode configured */
|
||||||
|
MODIFY_REG(ADCx->CFGR1,
|
||||||
|
ADC_CFGR1_EXTSEL
|
||||||
|
| ADC_CFGR1_EXTEN
|
||||||
|
| ADC_CFGR1_DISCEN
|
||||||
|
| ADC_CFGR1_CONT
|
||||||
|
| ADC_CFGR1_DMAEN
|
||||||
|
| ADC_CFGR1_DMACFG
|
||||||
|
| ADC_CFGR1_OVRMOD
|
||||||
|
,
|
||||||
|
pADC_RegInitStruct->TriggerSource
|
||||||
|
| pADC_RegInitStruct->SequencerDiscont
|
||||||
|
| pADC_RegInitStruct->ContinuousMode
|
||||||
|
| pADC_RegInitStruct->DMATransfer
|
||||||
|
| pADC_RegInitStruct->Overrun
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Case of sequencer mode fully configurable
|
||||||
|
and sequencer length 1 rank (sequencer disabled):
|
||||||
|
discontinuous mode discarded (fixed to disable) */
|
||||||
|
MODIFY_REG(ADCx->CFGR1,
|
||||||
|
ADC_CFGR1_EXTSEL
|
||||||
|
| ADC_CFGR1_EXTEN
|
||||||
|
| ADC_CFGR1_DISCEN
|
||||||
|
| ADC_CFGR1_CONT
|
||||||
|
| ADC_CFGR1_DMAEN
|
||||||
|
| ADC_CFGR1_DMACFG
|
||||||
|
| ADC_CFGR1_OVRMOD
|
||||||
|
,
|
||||||
|
pADC_RegInitStruct->TriggerSource
|
||||||
|
| LL_ADC_REG_SEQ_DISCONT_DISABLE
|
||||||
|
| pADC_RegInitStruct->ContinuousMode
|
||||||
|
| pADC_RegInitStruct->DMATransfer
|
||||||
|
| pADC_RegInitStruct->Overrun
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set ADC group regular sequencer length */
|
||||||
|
if (LL_ADC_REG_GetSequencerConfigurable(ADCx) != LL_ADC_REG_SEQ_FIXED)
|
||||||
|
{
|
||||||
|
LL_ADC_REG_SetSequencerLength(ADCx, pADC_RegInitStruct->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 pADC_RegInitStruct 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 *pADC_RegInitStruct)
|
||||||
|
{
|
||||||
|
/* Set pADC_RegInitStruct fields to default values */
|
||||||
|
/* Set fields of ADC group regular */
|
||||||
|
/* Note: On this STM32 series, ADC trigger edge is set to value 0x0 by */
|
||||||
|
/* setting of trigger source to SW start. */
|
||||||
|
pADC_RegInitStruct->TriggerSource = LL_ADC_REG_TRIG_SOFTWARE;
|
||||||
|
pADC_RegInitStruct->SequencerLength = LL_ADC_REG_SEQ_SCAN_DISABLE;
|
||||||
|
pADC_RegInitStruct->SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE;
|
||||||
|
pADC_RegInitStruct->ContinuousMode = LL_ADC_REG_CONV_SINGLE;
|
||||||
|
pADC_RegInitStruct->DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE;
|
||||||
|
pADC_RegInitStruct->Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* ADC1 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif /* USE_FULL_LL_DRIVER */
|
||||||
@@ -1,4 +1,14 @@
|
|||||||
#MicroXplorer Configuration settings - do not modify
|
#MicroXplorer Configuration settings - do not modify
|
||||||
|
ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR
|
||||||
|
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,master,SelectedChannel,Overrun,SamplingTimeCommon1,SamplingTimeCommon2
|
||||||
|
ADC1.NbrOfConversionFlag=1
|
||||||
|
ADC1.Overrun=ADC_OVR_DATA_OVERWRITTEN
|
||||||
|
ADC1.Rank-0\#ChannelRegularConversion=1
|
||||||
|
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLINGTIME_COMMON_1
|
||||||
|
ADC1.SamplingTimeCommon1=ADC_SAMPLETIME_160CYCLES_5
|
||||||
|
ADC1.SamplingTimeCommon2=ADC_SAMPLETIME_79CYCLES_5
|
||||||
|
ADC1.SelectedChannel=ADC_CHANNEL_TEMPSENSOR|ADC_CHANNEL_VREFINT|ADC_CHANNEL_VBAT
|
||||||
|
ADC1.master=1
|
||||||
CAD.formats=
|
CAD.formats=
|
||||||
CAD.pinconfig=
|
CAD.pinconfig=
|
||||||
CAD.provider=
|
CAD.provider=
|
||||||
@@ -94,16 +104,17 @@ I2C2.Timing=0x00C12166
|
|||||||
KeepUserPlacement=false
|
KeepUserPlacement=false
|
||||||
Mcu.CPN=STM32G030F6P6TR
|
Mcu.CPN=STM32G030F6P6TR
|
||||||
Mcu.Family=STM32G0
|
Mcu.Family=STM32G0
|
||||||
Mcu.IP0=DMA
|
Mcu.IP0=ADC1
|
||||||
Mcu.IP1=FREERTOS
|
Mcu.IP1=DMA
|
||||||
Mcu.IP2=I2C1
|
Mcu.IP2=FREERTOS
|
||||||
Mcu.IP3=I2C2
|
Mcu.IP3=I2C1
|
||||||
Mcu.IP4=NVIC
|
Mcu.IP4=I2C2
|
||||||
Mcu.IP5=RCC
|
Mcu.IP5=NVIC
|
||||||
Mcu.IP6=SYS
|
Mcu.IP6=RCC
|
||||||
Mcu.IP7=TIM1
|
Mcu.IP7=SYS
|
||||||
Mcu.IP8=USART2
|
Mcu.IP8=TIM1
|
||||||
Mcu.IPNb=9
|
Mcu.IP9=USART2
|
||||||
|
Mcu.IPNb=10
|
||||||
Mcu.Name=STM32G030F6Px
|
Mcu.Name=STM32G030F6Px
|
||||||
Mcu.Package=TSSOP20
|
Mcu.Package=TSSOP20
|
||||||
Mcu.Pin0=PB8
|
Mcu.Pin0=PB8
|
||||||
@@ -111,8 +122,11 @@ Mcu.Pin1=PB9
|
|||||||
Mcu.Pin10=PA12 [PA10]
|
Mcu.Pin10=PA12 [PA10]
|
||||||
Mcu.Pin11=PA13
|
Mcu.Pin11=PA13
|
||||||
Mcu.Pin12=PA14-BOOT0
|
Mcu.Pin12=PA14-BOOT0
|
||||||
Mcu.Pin13=VP_FREERTOS_VS_CMSIS_V1
|
Mcu.Pin13=VP_ADC1_TempSens_Input
|
||||||
Mcu.Pin14=VP_SYS_VS_tim17
|
Mcu.Pin14=VP_ADC1_Vref_Input
|
||||||
|
Mcu.Pin15=VP_ADC1_Vbat_Input
|
||||||
|
Mcu.Pin16=VP_FREERTOS_VS_CMSIS_V1
|
||||||
|
Mcu.Pin17=VP_SYS_VS_tim17
|
||||||
Mcu.Pin2=PC15-OSC32_OUT (PC15)
|
Mcu.Pin2=PC15-OSC32_OUT (PC15)
|
||||||
Mcu.Pin3=PA0
|
Mcu.Pin3=PA0
|
||||||
Mcu.Pin4=PA1
|
Mcu.Pin4=PA1
|
||||||
@@ -121,12 +135,13 @@ Mcu.Pin6=PA3
|
|||||||
Mcu.Pin7=PA4
|
Mcu.Pin7=PA4
|
||||||
Mcu.Pin8=PA8
|
Mcu.Pin8=PA8
|
||||||
Mcu.Pin9=PA11 [PA9]
|
Mcu.Pin9=PA11 [PA9]
|
||||||
Mcu.PinsNb=15
|
Mcu.PinsNb=18
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32G030F6Px
|
Mcu.UserName=STM32G030F6Px
|
||||||
MxCube.Version=6.18.0
|
MxCube.Version=6.18.0
|
||||||
MxDb.Version=DB.6.0.180
|
MxDb.Version=DB.6.0.180
|
||||||
|
NVIC.ADC1_IRQn=true\:3\:0\:false\:false\:true\:true\:true\:true\:true
|
||||||
NVIC.DMA1_Ch4_5_DMAMUX1_OVR_IRQn=true\:3\:0\:false\:false\:true\:true\:false\:true\:true
|
NVIC.DMA1_Ch4_5_DMAMUX1_OVR_IRQn=true\:3\:0\:false\:false\:true\:true\:false\:true\:true
|
||||||
NVIC.DMA1_Channel1_IRQn=true\:3\:0\:false\:false\:true\:true\:false\:true\:true
|
NVIC.DMA1_Channel1_IRQn=true\:3\:0\:false\:false\:true\:true\:false\:true\:true
|
||||||
NVIC.DMA1_Channel2_3_IRQn=true\:3\:0\:false\:false\:true\:true\:false\:true\:true
|
NVIC.DMA1_Channel2_3_IRQn=true\:3\:0\:false\:false\:true\:true\:false\:true\:true
|
||||||
@@ -277,6 +292,12 @@ TIM1.Period=999
|
|||||||
TIM1.Prescaler=63
|
TIM1.Prescaler=63
|
||||||
USART2.IPParameters=VirtualMode-Asynchronous
|
USART2.IPParameters=VirtualMode-Asynchronous
|
||||||
USART2.VirtualMode-Asynchronous=VM_ASYNC
|
USART2.VirtualMode-Asynchronous=VM_ASYNC
|
||||||
|
VP_ADC1_TempSens_Input.Mode=IN-TempSens
|
||||||
|
VP_ADC1_TempSens_Input.Signal=ADC1_TempSens_Input
|
||||||
|
VP_ADC1_Vbat_Input.Mode=IN-Vbat
|
||||||
|
VP_ADC1_Vbat_Input.Signal=ADC1_Vbat_Input
|
||||||
|
VP_ADC1_Vref_Input.Mode=IN-Vrefint
|
||||||
|
VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input
|
||||||
VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1
|
VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1
|
||||||
VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1
|
VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1
|
||||||
VP_SYS_VS_tim17.Mode=TIM17
|
VP_SYS_VS_tim17.Mode=TIM17
|
||||||
|
|||||||
Reference in New Issue
Block a user