コード例 #1
0
uint16_t AdcMcuRead( Adc_t *obj, uint8_t channel )
{
    uint16_t adcData = 0;

    /* Enable The HSI (16Mhz) */
    RCC_HSICmd( ENABLE );

    /* Check that HSI oscillator is ready */
    while( RCC_GetFlagStatus( RCC_FLAG_HSIRDY ) == RESET );

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE );

    // Temperature or Vref measurement
    if( ( channel == ADC_Channel_16 ) || ( channel == ADC_Channel_17 ) )
    {
        // Yes, enable temperature sensor and internal reference voltage
        ADC_TempSensorVrefintCmd( ENABLE );
    }

    // Configure selected channel
    ADC_RegularChannelConfig( ADC1, channel, 1, ADC_SampleTime_192Cycles );

    /* Define delay between ADC1 conversions */
    ADC_DelaySelectionConfig( ADC1, ADC_DelayLength_Freeze );

    /* Enable ADC1 Power Down during Delay */
    ADC_PowerDownCmd( ADC1, ADC_PowerDown_Idle_Delay, ENABLE );

    /* Enable ADC1 */
    ADC_Cmd( ADC1, ENABLE );

    /* Wait until ADC1 ON status */
    while( ADC_GetFlagStatus( ADC1, ADC_FLAG_ADONS ) == RESET )
    {
    }

    /* Start ADC1 Software Conversion */
    ADC_SoftwareStartConv( ADC1 );

    /* Wait until ADC Channel 5 or 1 end of conversion */
    while( ADC_GetFlagStatus( ADC1, ADC_FLAG_EOC ) == RESET )
    {
    }

    adcData = ADC_GetConversionValue( ADC1 );

    ADC_Cmd( ADC1, DISABLE );
    
    if( ( channel == ADC_Channel_16 ) || ( channel == ADC_Channel_17 ) )
    {
        // De-initialize ADC
        ADC_TempSensorVrefintCmd( DISABLE );    
    }

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, DISABLE );

    RCC_HSICmd( DISABLE );
   
    return adcData;
}
コード例 #2
0
ファイル: adc.c プロジェクト: 136048599/vrgimbal
uint16_t vref_read(void)
{
  ADC_TempSensorVrefintCmd(ENABLE);

  /* Wait until ADC + Temp sensor start */
  uint16_t T_StartupTimeDelay = 1024;
  while (T_StartupTimeDelay--);

  /* Enable Vrefint channel: Channel17 */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 1, ADC_SampleTime_28Cycles5);

  /* initialize result */
  uint16_t res = 0;

  /* start ADC convertion by software */
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

  /* wait until end-of-covertion */
  while( ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0 );
  /* read ADC convertion result */
  res = ADC_GetConversionValue(ADC1);

  /* de-initialize ADC */
  ADC_TempSensorVrefintCmd(DISABLE);

  return (res);
}
コード例 #3
0
/**
  * @brief  Internal VREF measurement using ADC Channel 17.
  * @param  None
  * @retval Internal VREF ADC converted value.
  */ 
uint16_t IDD_Measurement_ADC_Supply(void)
{
  uint16_t adcdata = 0x0, i = 0x00;

  /* ADC1 configuration ------------------------------------------------------*/
  IDD_Measurement_ADC_Config();
 
  ADC_TempSensorVrefintCmd(ENABLE);

  /* ADC1 regular channel 17 for VREF configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 1, ADC_SampleTime_192Cycles);

  /* Start ADC conversion by software */
  ADC_SoftwareStartConv(ADC1);  

  /* Initialize result */
  for(i = 4; i > 0; i--)
  {
    /* Wait until end-of-conversion */
    while( ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0)
    {
    }

    /* Read ADC conversion result */
    adcdata += ADC_GetConversionValue(ADC1);
  }
	
  /* Deinitialize ADC */
  ADC_TempSensorVrefintCmd(DISABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE);
  
  return (adcdata >> 2);
}
コード例 #4
0
ファイル: icc_measure.c プロジェクト: bzdegluk/ACQ
/**
  * @brief  To return the supply measurmeent
  * @caller several functions
  * @param None
  * @retval ADC value
  */ 
uint16_t ADC_Supply(void)
{
  uint8_t i;
  uint16_t res;

    /* Initializes ADC */
  ADC_Icc_Init();
 
  ADC_TempSensorVrefintCmd(ENABLE);

  /* ADC1 regular channel 17 for VREF configuration */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 1, ADC_SampleTime_192Cycles);
  
  /* initialize result */
  res = 0;
  for(i=4; i>0; i--)
  {
  /* start ADC convertion by software */
    ADC_SoftwareStartConv(ADC1);

    /* wait until end-of-covertion */
    while( ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0 );
  /* read ADC convertion result */
    res += ADC_GetConversionValue(ADC1);
  }
	
  /* de-initialize ADC */
  ADC_TempSensorVrefintCmd(DISABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, DISABLE);
  
  return (res>>2);
}
コード例 #5
0
int temperature_setup() 
{
	ADC_InitTypeDef adc_init_s;														//Initializes definitions of SDC
	ADC_CommonInitTypeDef adc_common_init_s;							//Used to def common paramters for ADC peripheral
	
	ADC_DeInit();																					//reset ADC peripheral value to their defaults
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);	//Enable Power for APB2 bus connected to ADC1 (temp sensor)

	adc_common_init_s.ADC_Mode = ADC_Mode_Independent; 		//Configures the ADC for indepedent mode
	adc_common_init_s.ADC_Prescaler = ADC_Prescaler_Div2; //Sets Frequency of the clock to ADC. Count 0 and 1.
	adc_common_init_s.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //turn off direct memory access mode
	adc_common_init_s.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //sets the delay between two sampling phases as 5
	
	ADC_CommonInit(&adc_common_init_s);										//initializes the struct for values set (above)
	
	adc_init_s.ADC_Resolution = ADC_Resolution_12b;				//Configures the ADC resolution 12 bits
	adc_init_s.ADC_ScanConvMode = DISABLE;								//sets conversion to Single channel mode
	adc_init_s.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //Set the external trigger edge to none
	adc_init_s.ADC_DataAlign = ADC_DataAlign_Right;				//MSB in register is 0, data saved starting from LSB
	adc_init_s.ADC_NbrOfConversion = 1; 									//Specifies the number of ADC conversions that will be done
	
	ADC_TempSensorVrefintCmd(ENABLE);											//wake up desired sensor (temp)
	ADC_Cmd(ADC1, ENABLE);																//turn on the ADC1 peripheral
	ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_480Cycles);	//Configures ADC1_channel 16 which is the tempature sensor
	ADC_Init(ADC1, &adc_init_s);													//initialize ADC1
	

	new_filter.avg = 0, new_filter.replace = 0, new_filter.sum = 0;
	
	return 0;
}
コード例 #6
0
ファイル: adc.cpp プロジェクト: pola14225/diy-tracker
void ADC_Configuration(void)
{
  ADC_InitTypeDef  ADC_InitStructure;
  RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                    // PCLK2 is the APB2 clock, ADCCLK = PCLK2/6 = 60/6 = 10MHz
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);                 // Enable ADC1 clock so that we can talk to it
  ADC_DeInit(ADC1);                                                    // Put everything back to power-on defaults

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                   // ADC2 not depenedent on ADC1
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;                        // Disable the scan conversion so we do one at a time
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;                  // Don't do contimuous conversions - do them on demand
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  // Start conversin by software, not an external trigger
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;               // Conversions are 12 bit - put them in the lower 12 bits of the result
  ADC_InitStructure.ADC_NbrOfChannel = 1;                              // How many channels would be used by the sequencer
  ADC_Init(ADC1, &ADC_InitStructure);
  ADC_Cmd(ADC1, ENABLE);

  ADC_ResetCalibration(ADC1);                                           // Enable ADC1 reset calibaration register
  while(ADC_GetResetCalibrationStatus(ADC1));                           // Check the end of ADC1 reset calibration register
  ADC_StartCalibration(ADC1);                                           // Start ADC1 calibaration
  while(ADC_GetCalibrationStatus(ADC1));                                // Check the end of ADC1 calibration
  ADC_TempSensorVrefintCmd(ENABLE);                                     // enable Vrefint and Temperature sensor

  GPIO_InitTypeDef  GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;                           // Pin #0
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AIN;                        // as analog input
  GPIO_Init(GPIOB, &GPIO_InitStructure);                                // for Port B

}
コード例 #7
0
ファイル: TempSensor.cpp プロジェクト: r00li/RhomeV3
void InternalTempSensor::initTempSensor()
{
    temp = 0;
    calibration = 0;

    ADC_DeInit();

    ADC_InitTypeDef ADC_InitStruct;
    ADC_CommonInitTypeDef ADC_CommonInitStruct;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    ADC_CommonInitStruct.ADC_Mode = ADC_Mode_Independent;
    ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div8;
    ADC_CommonInitStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
    ADC_CommonInitStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
    ADC_CommonInit(&ADC_CommonInitStruct);

    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStruct.ADC_ScanConvMode = DISABLE;
    ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStruct.ADC_NbrOfConversion = 1;
    ADC_Init(ADC1, &ADC_InitStruct);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_144Cycles);
    ADC_TempSensorVrefintCmd(ENABLE);
    ADC_Cmd(ADC1, ENABLE);
}
コード例 #8
0
ファイル: ADC.c プロジェクト: cmtm/microP
void ADC_init(void)	{

	/*Defining the ADC initial parameter setting structures*/
	ADC_InitTypeDef	ADC_InitStructure;
	ADC_CommonInitTypeDef adc_common_init_s;
		
	/*Enabling clock on bus APB2 to peripheral ADC1*/ 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	
	/*Setting the parameters for the ADC and initializing*/
	adc_common_init_s.ADC_Mode = ADC_Mode_Independent;
	adc_common_init_s.ADC_Prescaler = ADC_Prescaler_Div2;	//Half the APB2 speed
	adc_common_init_s.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;	//No DMA
	adc_common_init_s.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;	//Setting the sampling delay to 
	ADC_CommonInit(&adc_common_init_s);	//Initialize with the above parameters
	
	/*Setting further parameters for the ADC and initializing*/
	ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;	//Returning a 12 bit (max) result
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//A single channel is used
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//Not in continuous mode
	ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//Alligned right
	ADC_InitStructure.ADC_NbrOfConversion = 1;
	ADC_Init(ADC1,&ADC_InitStructure);	//Initialize ADC1
	
	ADC_TempSensorVrefintCmd(ENABLE);
	
	/*Enabling the ADC*/
	ADC_Cmd(ADC1, ENABLE);
	
	ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_480Cycles);
}
コード例 #9
0
void adcSetup(void){
		
	   ADC_DeInit();

		 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

		 ADC_CommonInitStruct.ADC_Mode = ADC_Mode_Independent;
		 ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div8;
		 ADC_CommonInitStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
		 ADC_CommonInitStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
		 ADC_CommonInit(&ADC_CommonInitStruct);

		 ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
		 ADC_InitStruct.ADC_ScanConvMode = DISABLE;
		 ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
		 ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
		 ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
		 ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
		 ADC_InitStruct.ADC_NbrOfConversion = 1;
		 ADC_Init(ADC1, &ADC_InitStruct);

			// ADC1 Configuration, ADC_Channel_TempSensor is actual channel 16
		 ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_144Cycles);

			// Enable internal temperature sensor
		 ADC_TempSensorVrefintCmd(ENABLE);

			// Enable ADC conversion
		 ADC_Cmd(ADC1, ENABLE);
}
コード例 #10
0
ファイル: main.c プロジェクト: spacerace/HY-MiniSTM32V
void adc_init() {
	ADC_InitTypeDef ADC_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);

	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1, &ADC_InitStructure);

	ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);

	ADC_TempSensorVrefintCmd(ENABLE);

	ADC_Cmd(ADC1, ENABLE);

	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1));

	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1));

	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
コード例 #11
0
ファイル: stm32_adc.c プロジェクト: bolatberk/stm32f407vg
extern void adc_tempsen(){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // adc1 kanalý clock aktif edildi




	    ADC_CommonInitTypeDef ADC_CommonInitStructure;
	    ADC_InitTypeDef       ADC_InitStructure;

	    ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
	    ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
	    ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
	    ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles;

	    ADC_CommonInit(&ADC_CommonInitStructure);

	    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
	    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	    ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
	    ADC_InitStructure.ADC_ExternalTrigConv =0;
	    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	    ADC_InitStructure.ADC_NbrOfConversion = 1;



	    ADC_Init(ADC1, &ADC_InitStructure);
	    ADC_RegularChannelConfig(ADC1,ADC_Channel_TempSensor, 1, ADC_TwoSamplingDelay_5Cycles);
        ADC_TempSensorVrefintCmd(ENABLE);

	    ADC_Cmd(ADC1, ENABLE);


}
コード例 #12
0
ファイル: temp.c プロジェクト: chenghongyao/gitprogram
void TEMP_Init()			//单次,单通道
{
	ADC_InitTypeDef ADC_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);			//ADC时钟 = 72M/6 = 12M;
	
	
	//ADC_初始化
	ADC_DeInit(ADC1);
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1,&ADC_InitStructure);

	ADC_TempSensorVrefintCmd(ENABLE);	//使能内部温度传感器(或参考电压)//======
	ADC_Cmd(ADC1,ENABLE);

	//校准
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1));
}
コード例 #13
0
ファイル: hal.c プロジェクト: zbanks/hackboard
void adc_setup(){
    static int setup_complete = 0;
    ADC_InitTypeDef adc_init;
    GPIO_InitTypeDef gpio_init;
    
    if(setup_complete){
        return;
    }

    // Enable clock for ADC & GPIOC
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    // Initialize GPIOC
    GPIO_StructInit(&gpio_init);
    gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | \
                         GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; 
    gpio_init.GPIO_Mode = GPIO_Mode_AN;
    gpio_init.GPIO_Speed = GPIO_Speed_2MHz; 
    GPIO_Init(GPIOC, &gpio_init);
    
    // Initialize ADC1
    ADC_DeInit(ADC1);
    ADC_StructInit(&adc_init);
    ADC_Init(ADC1, &adc_init);

    //ADC_GetCalibrationFactor(ADC1);
    ADC_TempSensorVrefintCmd(ENABLE);
    ADC_Cmd(ADC1, ENABLE);
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_RCNR));
    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS));

    setup_complete++;
}
コード例 #14
0
ファイル: drv_adc.c プロジェクト: nongxiaoming/MiniQuadcopter
static void ADC_Configuration(void)
{
	ADC_InitTypeDef ADC_InitStructure;
	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 , ENABLE);
// ADC1 configuration
  ADC_DeInit(ADC1);
  ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 3;
  ADC_Init(ADC1, &ADC_InitStructure);

  // ADC1 channel sequence
  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_28Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_28Cycles5);
	ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 3, ADC_SampleTime_28Cycles5);
	
  // ADC2 configuration
  ADC_DeInit(ADC2);
  ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 3;
  ADC_Init(ADC2, &ADC_InitStructure);

  // ADC2 channel sequence
  ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 1, ADC_SampleTime_28Cycles5);
  ADC_RegularChannelConfig(ADC2, ADC_Channel_3, 2, ADC_SampleTime_28Cycles5);
	ADC_RegularChannelConfig(ADC2, ADC_Channel_17, 3, ADC_SampleTime_28Cycles5);

  // Enable ADC1
  ADC_Cmd(ADC1, ENABLE);
  // Calibrate ADC1
  ADC_ResetCalibration(ADC1);
  while(ADC_GetResetCalibrationStatus(ADC1));
  ADC_StartCalibration(ADC1);
  while(ADC_GetCalibrationStatus(ADC1));

  // Enable ADC1 external trigger
  ADC_ExternalTrigConvCmd(ADC1, ENABLE);
  ADC_TempSensorVrefintCmd(ENABLE);

  // Enable ADC2
  ADC_Cmd(ADC2, ENABLE);
  // Calibrate ADC2
  ADC_ResetCalibration(ADC2);
  while(ADC_GetResetCalibrationStatus(ADC2));
  ADC_StartCalibration(ADC2);
  while(ADC_GetCalibrationStatus(ADC2));

  // Enable ADC2 external trigger
  ADC_ExternalTrigConvCmd(ADC2, ENABLE);	
	
}
コード例 #15
0
ファイル: ADC.C プロジェクト: DoctorKey/STM32_git
/*****************************************************************************
** 函数名称: HexToASCII
** 功能描述: 将数值转化成字符
				0x30 代表字符0 比如1234 转化为 ”1234“
** 作   者: Dream
** 日   期: 2010年12月06日
*****************************************************************************/
void Temp_Init()
{
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // 使能 MDA 重要!!!
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);// 使能 ADC1 重要!!!

  /* DMA1 channel1 configuration ----------------------------------------------*/
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
  DMA_InitStructure.DMA_BufferSize = 1;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  
  /* Enable DMA1 channel 1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);
     
  /* ADC1 configuration ------------------------------------------------------*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 1;
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channel 14 configuration */ 
  /* 内部温度传感器 Channel 16 */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_55Cycles5);

  /* Enable the temperature sensor and vref internal channel */
  ADC_TempSensorVrefintCmd(ENABLE);	    //内部温度传感器  添加这一句 

  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);
  
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC1 reset calibaration register */   //使用之前一定要校准
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
     
  /* Start ADC1 Software Conversion */ 
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
コード例 #16
0
ファイル: adc.c プロジェクト: cquxutao/Competition
 void ADC1_MODE_Config(void)
{

  DMA_InitTypeDef DMA_InitStructure;					//定义一个DMA结构体变量
  ADC_InitTypeDef ADC_InitStructure;					//定义一个ADC结构体变量

  DMA_DeInit(DMA1_Channel1);		  //开启DMA1的第一通道
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&ADC_ConvertedValue;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;	//DMA的转换模式为SRC模式,由外设搬移到内存
  DMA_InitStructure.DMA_BufferSize = 1; //DMA缓存大小,1个
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;	//接收一次数据后,设备地址禁止后移
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;	//关闭接收一次数据后,目标内存地址后移
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  //定义外设数据宽度为16位
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  //DMA搬移数据尺寸,HalfWord就是为16位
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;   //转换模式,循环缓存模式。
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;	//DMA优先级高
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;		  //M2M模式禁用
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);          
  /* Enable DMA1 channel1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);

  ADC_TempSensorVrefintCmd(ENABLE);

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;		//独立的转换模式
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode  = ENABLE;
  ADC_InitStructure.ADC_ExternalTrigConv  = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 1;
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular channel14 configuration */ 
  ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);

  /* Enable ADC1 DMA */
  ADC_DMACmd(ADC1, ENABLE);

  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));

  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
     
  /* Start ADC1 Software Conversion */ 
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}
コード例 #17
0
ファイル: adc.c プロジェクト: vehar/STM32L_cmu
void configureADC_Temp(void)
{
  uint32_t ch_index;

  /* Enable ADC clock & SYSCFG */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  
  /* Enable the internal connection of Temperature sensor and with the ADC channels*/
  ADC_TempSensorVrefintCmd(ENABLE); 
  
  /* Wait until ADC + Temp sensor start */
 uint32_t T_StartupTimeDelay = 1024;
  while (T_StartupTimeDelay--);

  /* Setup ADC common init struct */
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
  ADC_CommonInit(&ADC_CommonInitStructure);
  
  
  /* Initialise the ADC1 by using its init structure */
  ADC_StructInit(&ADC_InitStructure);
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;	          // Set conversion resolution to 12bit
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;	                          // Enable Scan mode (single conversion for each channel of the group)
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;			  // Disable Continuous conversion
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None; // Disable external conversion trigger
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                  // Set conversion data alignement to right
  ADC_InitStructure.ADC_NbrOfConversion = ADC_CONV_BUFF_SIZE;             // Set conversion data alignement to ADC_CONV_BUFF_SIZE
  ADC_Init(ADC1, &ADC_InitStructure);

  /* ADC1 regular Temperature sensor channel16 and internal reference channel17 configuration */ 

    for (ch_index = 1; ch_index <= MAX_TEMP_CHNL; ch_index++)
	{
      ADC_RegularChannelConfig(ADC1, ADC_Channel_16, ch_index, ADC_SampleTime_384Cycles);
    }

  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 17, ADC_SampleTime_384Cycles);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 18, ADC_SampleTime_384Cycles);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 19, ADC_SampleTime_384Cycles);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 20, ADC_SampleTime_384Cycles);
	
	//===========================================================================
	 /* Enable ADC clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  /* Enable DMA1 clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  /* Wait until the ADC1 is ready */
  while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET); 
}
コード例 #18
0
ファイル: ADCManager.c プロジェクト: 2cats/STM32
void ADCManager_Structure(ADCManagerTypeDef *ADCManager)
{

	ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure;
	u8 i;
	defaultADCManager=ADCManager;
	defaultADCManager->getData=ADCManager_getData;
	defaultADCManager->startTransfer=ADCManager_startTransfer;
	//defaultADCManager->ADC_Channels_num=sizeof(defaultADCManager->ADC_Channels);
	RCC_APB2PeriphClockCmd(filterGPIO_RCC_ADC() | RCC_APB2Periph_ADC1	, ENABLE );	  //使能ADC1通道时钟
 
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

	for(i=0;i<defaultADCManager->ADC_Channels_num;i++)
	{
		if(defaultADCManager->ADC_Channels[i]==ADC_Channel_16|defaultADCManager->ADC_Channels[i]==ADC_Channel_17)
			continue;
		GPIO_InitStructure.GPIO_Pin = filterPin_ADC(defaultADCManager->ADC_Channels[i]);
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚
		GPIO_Init(filterGPIO_ADC(defaultADCManager->ADC_Channels[i]), &GPIO_InitStructure);	
	}                    

	ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值

	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC工作模式:ADC1和ADC2工作在独立模式
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;	//模数转换工作在单通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = (FunctionalState)defaultADCManager->isContinus;	//模数转换工作在单次转换模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//转换由软件而不是外部触发启动
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐
	ADC_InitStructure.ADC_NbrOfChannel = defaultADCManager->ADC_Channels_num;	//顺序进行规则转换的ADC通道的数目
	ADC_Init(ADC1, &ADC_InitStructure);	//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   

	for(i=0;i<defaultADCManager->ADC_Channels_num;i++)
	{
		if(defaultADCManager->ADC_Channels[i]==ADC_Channel_16|defaultADCManager->ADC_Channels[i]==ADC_Channel_17)
			ADC_TempSensorVrefintCmd(ENABLE);
		ADC_RegularChannelConfig(ADC1, defaultADCManager->ADC_Channels[i], i+1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采样时间为239.5周期	
	}
	
	ADC_DMA_Config();
	ADC_DMACmd(ADC1, ENABLE); 
	
	ADC_Cmd(ADC1, ENABLE);	//使能指定的ADC1
	
	ADC_ResetCalibration(ADC1);	//使能复位校准  
	 
	while(ADC_GetResetCalibrationStatus(ADC1));	//等待复位校准结束
	
	ADC_StartCalibration(ADC1);	 //开启AD校准
 
	while(ADC_GetCalibrationStatus(ADC1));	 //等待校准结束
}
コード例 #19
0
ファイル: adc.c プロジェクト: bygreencn/micropython
void adc_init_all(uint32_t resolution) {
  ADC_InitTypeDef       ADC_InitStructure;
  GPIO_InitTypeDef      GPIO_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;

  /* Enable ADCx, DMA and GPIO clocks */ 
#if 0
  /* GPIO clocks enabled in main */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA |
                         RCC_AHB1Periph_GPIOB |
                         RCC_AHB1Periph_GPIOC, ENABLE);
#endif
  RCC_APB2PeriphClockCmd(ADCx_CLK, ENABLE);

  /* ADC Common Init */
  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInit(&ADC_CommonInitStructure);

  /* Configure ADC GPIOs */
  for (int i=0; i<ADC_NUM_CHANNELS; i++) {
      GPIO_InitStructure.GPIO_Pin = adc_gpio[i].pin;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
      GPIO_Init(adc_gpio[i].port, &GPIO_InitStructure);
  }

  /* ADCx Init */
//  ADC_DeInit();
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADCx, &ADC_InitStructure);

  /* Enable ADCx */
  ADC_Cmd(ADCx, ENABLE);

  /* Enable VBAT/VREF monitor */
  ADC_VBATCmd(ENABLE);

  /* Enable temperature sensor */
  ADC_TempSensorVrefintCmd(ENABLE);
}
コード例 #20
0
ファイル: adc.c プロジェクト: tarasii/BMP085
void ADC_init(){	
	ADC_InitTypeDef ADC_InitStructure;
	ADC_CommonInitTypeDef ADC_CommonInitStructure;
  uint8_t ch_index;
	
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

/* ADC input */

	//pin_mode(ADC_GPIO_Ch04, ADC_GPIO_Pin_Ch04, GPIO_MODE_IN);
	pin_mode(ADC_GPIO_Ch13, ADC_GPIO_Pin_Ch13, GPIO_MODE_IN);
	
	SetCalibData();
  
  /* Enable the internal connection of Temperature sensor and with the ADC channels*/
  ADC_TempSensorVrefintCmd(ENABLE); 
  
  /* Wait until ADC + Temp sensor start */
	Delay(10);

  /* Setup ADC common init struct */
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
  ADC_CommonInit(&ADC_CommonInitStructure);
  
  
  /* Initialise the ADC1 by using its init structure */
  ADC_StructInit(&ADC_InitStructure);
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;	          			// Set conversion resolution to 12bit
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;	                          // Enable Scan mode (single conversion for each channel of the group)
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;			  							// Disable Continuous conversion
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None; // Disable external conversion trigger
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;                  // Set conversion data alignement to right
  ADC_InitStructure.ADC_NbrOfConversion = ADC_CONV_BUFF_SIZE;             // Set conversion data alignement to ADC_CONV_BUFF_SIZE
  //ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADC1, &ADC_InitStructure);


	for (ch_index = 0; ch_index <= ADC_CONV_BUFF_SIZE; ch_index++){
		ADC_RegularChannelConfig(ADC1, ADC_RegCfg[ch_index], ch_index+1, ADC_SampleTime_384Cycles);
	}

  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);

  /* Wait until the ADC1 is ready */
  while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET); 
		
}
コード例 #21
0
ファイル: main.c プロジェクト: JizhouZhang/stm32f4-labs
void initTempSensor(){

	// In this function, we'll set up the ADC and use 
	// it to read values from an on-board temperature sensor.

        // Refer to the ADC library header and source files
        // (stm32f4xx_adc.h and stm32f4xx_adc.c) for more details on this code.

	// Declare adc as a ADC_InitTypeDef, adc_common as a ADC_CommonInitTypeDef
	ADC_InitTypeDef adc;
	ADC_CommonInitTypeDef adc_common;
	
	// Enable clock signal to ADC peripheral
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

	
	// Common ADC Initialization
	ADC_CommonStructInit(&adc_common); // initialize struct to default values
        // Change a few values
	adc_common.ADC_Prescaler = ADC_Prescaler_Div8; // sets ADC clock prescaler
	ADC_CommonInit(&adc_common);

        // ADC initialization
	ADC_StructInit(&adc);  	// initialize struct to default values

	// TODO: explicitly set some values before initialization
	// Set the ADC resolution to 12 bits
	// and enable continuous conversion mode

	adc.ADC_Resolution=ADC_Resolution_12b;
	adc.ADC_ContinuousConvMode = ENABLE;
	



	ADC_Init(ADC1, &adc);
	
	// ADC Channel 1 configuration
	ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_144Cycles);
	
	// Enable temperature smensor
	ADC_TempSensorVrefintCmd(ENABLE);

	// Enable ADC
	ADC_Cmd(ADC1, ENABLE);
}
void temperature_ADC_Init(void)
{
  /* ADC common init structure */
  ADC_CommonInitTypeDef adc_common_init_s;
  /* ADC init structure */
  ADC_InitTypeDef adc_init_s;

  
  /* Enable the High Speed APB (APB2) peripheral clock for ADC1 */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

	/* All ADCs are independent */
	adc_common_init_s.ADC_Mode = ADC_Mode_Independent;
	/* Direct Memory Access mode disabled */
	adc_common_init_s.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
	/* Frequency of the clock to ADC is  PCLK2 / 2 */
	adc_common_init_s.ADC_Prescaler = ADC_Prescaler_Div2;
	/* Delay beteen two sampling phases, not used in independent mode */
	adc_common_init_s.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
	ADC_CommonInit(&adc_common_init_s);

	/* 12-bit, need 15 ADC clock cycle */
	adc_init_s.ADC_Resolution = ADC_Resolution_12b;
	/* Single (one channel) mode */
	adc_init_s.ADC_ScanConvMode = DISABLE;
	/* single conversion mode*/
	adc_init_s.ADC_ContinuousConvMode = DISABLE;
	/* trigger detection disabled */
	adc_init_s.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
	/* right data alignment: bit12-15 are 0  */
	adc_init_s.ADC_DataAlign = ADC_DataAlign_Right;
	/* number of adc conversions */
	adc_init_s.ADC_NbrOfConversion = 1; 
	ADC_Init(ADC1, &adc_init_s);

  /* Enables ADC1 peripheral */
	ADC_Cmd(ADC1, ENABLE);
	/* Enable the internal connection of Temperature sensor and Vrefint sources with the ADC channels */
	ADC_TempSensorVrefintCmd(ENABLE);
}
コード例 #23
0
/***********************************************************
*   函数声明:ADC初始化函数                                *
*   function:采集片内温度,保温盒温度,三相电有效值       *
*   输出    :    无                                       *
*   调用函数:ST F.W. Ver3.0                               *
***********************************************************/
void ADC1_Configuration(void)
{
	ADC_InitTypeDef ADC_InitStructure;

	/* 12MHz的时钟 */
	RCC_ADCCLKConfig(RCC_PCLK2_Div6); /* David */
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_Init(ADC1, &ADC_InitStructure);

	/*
	ADC1, ADC_Channel_0->PA0->恒温盒内温度

	ADC_SampleTime_71Cycles5
	*/
	ADC_RegularChannelConfig(ADC1, ADC_Channel_0,  1, ADC_SampleTime_239Cycles5);  //恒温盒内温度

#if 1
	ADC_InjectedSequencerLengthConfig(ADC1, 1);
	ADC_InjectedChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5);//ADC_SampleTime_55Cycles5
	ADC_TempSensorVrefintCmd(ENABLE);  //测温度的 使能
	ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);	// ADC_ExternalTrigInjecConv_T2_TRGO
	ADC_AutoInjectedConvCmd(ADC1, ENABLE);
#endif
	ADC_DMACmd(ADC1, ENABLE);
	ADC_Cmd(ADC1, ENABLE);

	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1));
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
コード例 #24
0
void fdi_adc_power_up(void) {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    ADC_DeInit();
    ADC_InitTypeDef adc_init;
    ADC_StructInit(&adc_init);
    adc_init.ADC_DataAlign = ADC_DataAlign_Right;
    adc_init.ADC_Resolution = ADC_Resolution_12b;
    adc_init.ADC_ContinuousConvMode = ENABLE;
    adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
    adc_init.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    adc_init.ADC_NbrOfConversion = 1;
    adc_init.ADC_ScanConvMode = DISABLE;
    ADC_Init(ADC1, &adc_init);
    ADC_Cmd(ADC1, ENABLE);

    ADC_CommonInitTypeDef adc_common_init;
    ADC_CommonStructInit(&adc_common_init);
    adc_common_init.ADC_Prescaler = ADC_Prescaler_Div8;
    ADC_CommonInit(&adc_common_init);

    ADC_TempSensorVrefintCmd(ENABLE);
}
コード例 #25
0
ファイル: Temp_ADC.c プロジェクト: bbrown1867/MicroP
//This function intializes the ADC, modelled after slide 12 of the tutorial but justifies each decision by using Reference Manual/ADC header file
void initializeADC(void)
{
	//Structures needed for ADC configuration 
	ADC_InitTypeDef adcInit;
	ADC_CommonInitTypeDef adcInitCommon;
	
	//Initialize all the parameters for the ADC init common struct
	adcInitCommon.ADC_Mode = ADC_Mode_Independent; //Other options include dual and triple modes for multiple ADCS, we only want 1 ADC 
	adcInitCommon.ADC_Prescaler = ADC_Prescaler_Div4; //Select ADC clock frequency to fpclk2 / 4 = 42MHz (this decision is for sampling time discussed later)
	adcInitCommon.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //Will be saving ADC output as a variable, don't want to use DMA here
	adcInitCommon.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //NOT SURE WHY THIS PARAMETER IS WHAT IT IS
	
	//Initialize all the parameters for the ADC init struct
	adcInit.ADC_Resolution = ADC_Resolution_12b; //Configurable resolution of ADC, we want 12-bit (highest resolution)
	adcInit.ADC_ScanConvMode = DISABLE; //Scan mode used to scan a group of analog channels, not sure why we would need this or what it is used for - so turn it off
	adcInit.ADC_ContinuousConvMode = DISABLE; //Don't want continuous conversions, only convert when polled (continuous conversion will do the next conversion when the previous one is done w/o trigger)
	adcInit.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //ADC can be triggered on external event (rising/falling edge of a control signal), we do not want this feature
	adcInit.ADC_DataAlign = ADC_DataAlign_Right; //Can align ADC data right or left
	adcInit.ADC_NbrOfConversion = 1; //Using one channel so only perform one conversion?
	
	//Turn on clock gating to the bus that connects ADC1 to the temperature sensor (APB2)
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); 
	
	//Initialize the ADC using the functions defined in the C file (checks params, etc.)
	ADC_CommonInit(&adcInitCommon); //Function wants input of a pointer to a cell of ADC_CommonInitTypeDef object, so send it the address
	ADC_Init(ADC1, &adcInit); //Function wants the ADC your going to use and a point to a cell of ADC_InitTypeDef, so send it the address
	
	//Wakes up the temp sensor
	ADC_TempSensorVrefintCmd(ENABLE);
	
	//Enable the ADC conversion
	ADC_Cmd(ADC1, ENABLE);
	//CONFIGURE THE CHANNEL:
	//ADC1: The peripheral to use
	//ADC_Channel_16: The temperature sensor is hooked up to channel 16 (see page 210 of reference manual)
	//1: The rank in the regular group (group: way of organizing conversions, regular group: composed of up to 16 conversions)
	//ADC_SampleTime_480Cycles: Takes 480 clock cycles to get a conversion of the channel (Must be greater than min sample time of 10 us so (1/42MHz)*480 = 11.4us)
	ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_480Cycles);
}
コード例 #26
0
/*******************************************************************************
* Function Name  : ADC1_Configuration
* Description    : ADC1设置(包括ADC模块配置和自校准)
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void ADC1_Configuration(void)
{
    ADC_InitTypeDef ADC_InitStructure;

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;  //连续转换开启
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 2;     //设置转换序列长度为2
    ADC_Init(ADC1, &ADC_InitStructure);
    
    //ADC内置温度传感器使能(要使用片内温度传感器,切记要开启它)
    ADC_TempSensorVrefintCmd(ENABLE);
    
    //常规转换序列1:通道10
    ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_13Cycles5);
    //常规转换序列2:通道16(内部温度传感器),采样时间>2.2us,(239cycles)
    ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 2, ADC_SampleTime_239Cycles5);
    
    // Enable ADC1
    ADC_Cmd(ADC1, ENABLE);
    // 开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)
    ADC_DMACmd(ADC1, ENABLE);
    
    // 下面是ADC自动校准,开机后需执行一次,保证精度
    // Enable ADC1 reset calibaration register 
    ADC_ResetCalibration(ADC1);
    // Check the end of ADC1 reset calibration register
    while(ADC_GetResetCalibrationStatus(ADC1));

    // Start ADC1 calibaration
    ADC_StartCalibration(ADC1);
    // Check the end of ADC1 calibration
    while(ADC_GetCalibrationStatus(ADC1));
    // ADC自动校准结束---------------
    
}
コード例 #27
0
ファイル: adc.c プロジェクト: yzfcer/wind-os
/*
************************************************************
*	函数名称:	ADCx_Init
*
*	函数功能:	ADCx初始化
*
*	入口参数:	ADCx:ADC设备
*				tempFlag:1-启用内部温度测量	0-不启用内部温度测量
*
*	返回参数:	无
*
*	说明:		只有ADC1具有内部温度测量功能
*				重要:需要自行初始化对应的GPIO!!!!
************************************************************
*/
void ADCx_Init(ADC_TypeDef *ADCx, _Bool tempFlag)
{

	ADC_InitTypeDef adcInitStruct;
	
	if(ADCx == ADC1)
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	else if(ADCx == ADC2)
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);
	else
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);									//设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
	
	ADC_DeInit(ADCx);													//复位ADCx,将外设 ADCx 的全部寄存器重设为缺省值
	
	adcInitStruct.ADC_ContinuousConvMode = DISABLE;						//模数转换工作在单次转换模式
	adcInitStruct.ADC_DataAlign = ADC_DataAlign_Right;					//ADC数据右对齐
	adcInitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;		//转换由软件而不是外部触发启动
	adcInitStruct.ADC_Mode = ADC_Mode_Independent;						//ADC工作模式:ADC1和ADC2工作在独立模式
	adcInitStruct.ADC_NbrOfChannel = 1;									//顺序进行规则转换的ADC通道的数目
	adcInitStruct.ADC_ScanConvMode = DISABLE;							//模数转换工作在单通道模式
	ADC_Init(ADCx, &adcInitStruct);										//根据adcInitStruct中指定的参数初始化外设ADCx的寄存器
	
	if(ADCx == ADC1 && tempFlag)
		ADC_TempSensorVrefintCmd(ENABLE);								//开启内部温度传感器//ADC1通道16
	
	ADC_Cmd(ADCx, ENABLE);												//使能指定的ADC1
	
	ADC_ResetCalibration(ADCx);											//使能复位校准  
	 
	while(ADC_GetResetCalibrationStatus(ADCx));							//等待复位校准结束
	
	ADC_StartCalibration(ADCx);											//开启AD校准
 
	while(ADC_GetCalibrationStatus(ADCx));								//等待校准结束

}
コード例 #28
0
ファイル: board.c プロジェクト: malooei/yeejoin-workspace
static void ADC_Configration(void)
{
	ADC_InitTypeDef ADC_InitStructure;

	RCC_ADCCLKConfig(RCC_PCLK2_Div8);

	ADC_DeInit(ADC1);
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1, &ADC_InitStructure);
	
	ADC_Cmd(ADC1, ENABLE);
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1));

	ADC_TempSensorVrefintCmd(ENABLE); 
}
コード例 #29
0
ファイル: adc.c プロジェクト: tixlegeek/STM32F103RBT6
/*******************************************************************************
* 函 数 名:	
* 功    能:	
* 参    数:
* 返    回:	
*******************************************************************************/
void ADC1_Init()
{
	ADC_InitTypeDef ADC_InitStructure; 
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );
	//初始化ADC的IO
	ADC1_PinInit(GPIOA, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
	//72M/6=12,ADC最大时间不能超过14M
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   
	
	ADC_DeInit(ADC1);
	//独立工作模式
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	
	//单次转换
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	
	//不使用外部触发
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	
	//顺序进行规则转换的ADC通道的数目
	ADC_InitStructure.ADC_NbrOfChannel = 1;	
	ADC_Init(ADC1, &ADC_InitStructure);	
 
	ADC_TempSensorVrefintCmd(ENABLE);
	
	ADC_Cmd(ADC1, ENABLE);	
	//重置指定的ADC1的校准寄存器
	ADC_ResetCalibration(ADC1);	
	//获取ADC1重置校准寄存器的状态,等待设置状态结束
	while(ADC_GetResetCalibrationStatus(ADC1));	
	//开始指定ADC1的校准状态
	ADC_StartCalibration(ADC1);		
	//获取指定ADC1的校准程序,设置状态则等待
	while(ADC_GetCalibrationStatus(ADC1));		
	//使能指定的ADC1的软件转换启动功能
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		
}
コード例 #30
0
ファイル: adc.c プロジェクト: tarasii/BMP085
uint16_t adc_coretemp_simple(void)
{
	ADC_InitTypeDef ADC_InitStructure;
	
	uint16_t AD_value;
	uint16_t TemperatureC;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);		//enable ADC1 clock
	
	//ADC1 configuration
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;						//convert single channel only
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 		//convert one time
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None; //select no external triggering
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; 	//right 12-bit data alignment in ADC data register
	ADC_InitStructure.ADC_NbrOfConversion = 1; 							//single channel conversion	
	ADC_Init(ADC1, &ADC_InitStructure); 							//load structure values to control and status registers
	
	ADC_TempSensorVrefintCmd(ENABLE); 								//wake up temperature sensor
	
	//ADC1 channel16 configuration
	ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_384Cycles);
	
	ADC_Cmd(ADC1, ENABLE); 														//Enable ADC1
	
	calibdata = *FACTORY_CALIB_DATA;
	
  ADC_SoftwareStartConv(ADC1);
	
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)){} 	//wait for conversion complete
	
	AD_value = ADC_GetConversionValue(ADC1);					//read ADC value
	ADC_ClearFlag(ADC1, ADC_FLAG_EOC);								//clear EOC flag

	TemperatureC = CalcTemperature(AD_value); 
	return TemperatureC;
}