×
单片机 > 单片机程序设计 > 详情

STM32F103VET6——ADC库函数结构体

发布时间:2020-06-16 发布时间:
|

结构体

typedef struct

{

  uint32_t ADC_Mode;                      /*!< Configures the ADC to operate in independent or

                                               dual mode. 

                                               This parameter can be a value of @ref ADC_mode */


  FunctionalState ADC_ScanConvMode;       /*!< Specifies whether the conversion is performed in

                                               Scan (multichannels) or Single (one channel) mode.

                                               This parameter can be set to ENABLE or DISABLE */


  FunctionalState ADC_ContinuousConvMode; /*!< Specifies whether the conversion is performed in

                                               Continuous or Single mode.

                                               This parameter can be set to ENABLE or DISABLE. */


  uint32_t ADC_ExternalTrigConv;          /*!< Defines the external trigger used to start the analog

                                               to digital conversion of regular channels. This parameter

                                               can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */


  uint32_t ADC_DataAlign;                 /*!< Specifies whether the ADC data alignment is left or right.

                                               This parameter can be a value of @ref ADC_data_align */


  uint8_t ADC_NbrOfChannel;               /*!< Specifies the number of ADC channels that will be converted

                                               using the sequencer for regular channel group.

                                               This parameter must range from 1 to 16. */

}ADC_InitTypeDef;


ADC_mode

#define ADC_Mode_Independent                       ((uint32_t)0x00000000)

#define ADC_Mode_RegInjecSimult                    ((uint32_t)0x00010000)

#define ADC_Mode_RegSimult_AlterTrig               ((uint32_t)0x00020000)

#define ADC_Mode_InjecSimult_FastInterl            ((uint32_t)0x00030000)

#define ADC_Mode_InjecSimult_SlowInterl            ((uint32_t)0x00040000)

#define ADC_Mode_InjecSimult                       ((uint32_t)0x00050000)

#define ADC_Mode_RegSimult                         ((uint32_t)0x00060000)

#define ADC_Mode_FastInterl                        ((uint32_t)0x00070000)

#define ADC_Mode_SlowInterl                        ((uint32_t)0x00080000)

#define ADC_Mode_AlterTrig                         ((uint32_t)0x00090000)


Figure 2-5

Figure 2-6

Figure 2-7

 Figure 2-8

ADC_ExternalTrigConv

//ADC_external_trigger_sources_for_regular_channels_conversion 

#define ADC_ExternalTrigConv_T1_CC1                ((uint32_t)0x00000000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T1_CC2                ((uint32_t)0x00020000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T2_CC2                ((uint32_t)0x00060000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T3_TRGO               ((uint32_t)0x00080000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_T4_CC4                ((uint32_t)0x000A0000) /*!< For ADC1 and ADC2 */

#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO    ((uint32_t)0x000C0000) /*!< For ADC1 and ADC2 */


#define ADC_ExternalTrigConv_T1_CC3                ((uint32_t)0x00040000) /*!< For ADC1, ADC2 and ADC3 */

#define ADC_ExternalTrigConv_None                  ((uint32_t)0x000E0000) /*!< For ADC1, ADC2 and ADC3 */


#define ADC_ExternalTrigConv_T3_CC1                ((uint32_t)0x00000000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T2_CC3                ((uint32_t)0x00020000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T8_CC1                ((uint32_t)0x00060000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T8_TRGO               ((uint32_t)0x00080000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T5_CC1                ((uint32_t)0x000A0000) /*!< For ADC3 only */

#define ADC_ExternalTrigConv_T5_CC3                ((uint32_t)0x000C0000) /*!< For ADC3 only */


 Figure 2-9

ADC_data_align

#define ADC_DataAlign_Right                        ((uint32_t)0x00000000)

#define ADC_DataAlign_Left                         ((uint32_t)0x00000800)


常用库函数

/**

  * @brief  Initializes the ADCx peripheral according to the specified parameters

  *         in the ADC_InitStruct.

  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.

  * @param  ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains

  *         the configuration information for the specified ADC peripheral.

  * @retval None

  */

void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)

{

  uint32_t tmpreg1 = 0;

  uint8_t tmpreg2 = 0;

  /* Check the parameters */

  assert_param(IS_ADC_ALL_PERIPH(ADCx));

  assert_param(IS_ADC_MODE(ADC_InitStruct->ADC_Mode));

  assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ScanConvMode));

  assert_param(IS_FUNCTIONAL_STATE(ADC_InitStruct->ADC_ContinuousConvMode));

  assert_param(IS_ADC_EXT_TRIG(ADC_InitStruct->ADC_ExternalTrigConv));   

  assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign)); 

  assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfChannel));


  /*---------------------------- ADCx CR1 Configuration -----------------*/

  /* Get the ADCx CR1 value */

  tmpreg1 = ADCx->CR1;

  /* Clear DUALMOD and SCAN bits */

  tmpreg1 &= CR1_CLEAR_Mask;

  /* Configure ADCx: Dual mode and scan conversion mode */

  /* Set DUALMOD bits according to ADC_Mode value */

  /* Set SCAN bit according to ADC_ScanConvMode value */

  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8));

  /* Write to ADCx CR1 */

  ADCx->CR1 = tmpreg1;


  /*---------------------------- ADCx CR2 Configuration -----------------*/

  /* Get the ADCx CR2 value */

  tmpreg1 = ADCx->CR2;

  /* Clear CONT, ALIGN and EXTSEL bits */

  tmpreg1 &= CR2_CLEAR_Mask;

  /* Configure ADCx: external trigger event and continuous conversion mode */

  /* Set ALIGN bit according to ADC_DataAlign value */

  /* Set EXTSEL bits according to ADC_ExternalTrigConv value */

  /* Set CONT bit according to ADC_ContinuousConvMode value */

  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |

            ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1));

  /* Write to ADCx CR2 */

  ADCx->CR2 = tmpreg1;


  /*---------------------------- ADCx SQR1 Configuration -----------------*/

  /* Get the ADCx SQR1 value */

  tmpreg1 = ADCx->SQR1;

  /* Clear L bits */

  tmpreg1 &= SQR1_CLEAR_Mask;

  /* Configure ADCx: regular channel sequence length */

  /* Set L bits according to ADC_NbrOfChannel value */

  tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1);

  tmpreg1 |= (uint32_t)tmpreg2 << 20;

  /* Write to ADCx SQR1 */

  ADCx->SQR1 = tmpreg1;

}


/**

  * @brief  Configures the ADC clock (ADCCLK).

* @param RCC_PC


关键字:STM32F103VET6  ADC  库函数  结构体 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法