20260324
This commit is contained in:
164
RTX5_20220316/Driver/adc/adc.c
Normal file
164
RTX5_20220316/Driver/adc/adc.c
Normal file
@ -0,0 +1,164 @@
|
||||
#include "adc.h"
|
||||
#include "stm32l1xx_adc.h"
|
||||
#include "bsp.h"
|
||||
__IO uint16_t VREFINT_CAL;
|
||||
__IO uint16_t VREFINT_DATA;
|
||||
__IO float VDDA_VAL;
|
||||
extern float ADCADCADFC;
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* <09><> <20><> <20><>: ADC15_Init()
|
||||
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: ADC<44><43>ʼ<EFBFBD><CABC>
|
||||
* <09><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
* <20><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
void ADC15_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
ADC_InitTypeDef ADC_InitStructure;
|
||||
/*----------------- ADC1 configuration with DMA enabled --------------------*/
|
||||
/* Enable the HSI oscillator */
|
||||
RCC_HSICmd(ENABLE);
|
||||
/* Check that HSI oscillator is ready */
|
||||
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
|
||||
/* Enable GPIOB clock */
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
|
||||
/* Configure PB.14 (ADC Channe20) in analog mode */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
||||
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
||||
/* Enable ADC1 clock */
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
|
||||
/* ADC1 configuration */
|
||||
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
|
||||
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
|
||||
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
|
||||
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
|
||||
ADC_InitStructure.ADC_Resolution=ADC_Resolution_12b;//12λ
|
||||
ADC_InitStructure.ADC_NbrOfConversion = 1;
|
||||
ADC_Init(ADC1, &ADC_InitStructure);
|
||||
|
||||
ADC_TempSensorVrefintCmd(ENABLE);//<2F>ڲ<EFBFBD>ͨ<EFBFBD><CDA8>17ʹ<37><CAB9>
|
||||
|
||||
ADC_Cmd(ADC1, ENABLE);
|
||||
VREFINT_CAL = *(__IO uint16_t *)(0X1FF800F8);
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* <09><> <20><> <20><>: Get_Adc()
|
||||
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><>ȡADC<44>IJ<EFBFBD><C4B2><EFBFBD>ֵ
|
||||
* <09><> <20><> <20><>ͨ<EFBFBD><CDA8>ch
|
||||
* <20><> <20><> <20><>ADC<44><43><EFBFBD><EFBFBD>ֵ
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
u16 Get_Adc(u8 ch)
|
||||
{
|
||||
PWR_CTRLADC_H;//<2F><><EFBFBD><EFBFBD>ADC<44><43>Դ
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ADC<44>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_384Cycles ); //ADC1,ADCͨ<43><CDA8>
|
||||
|
||||
ADC_SoftwareStartConv(ADC1); //ʹ<><CAB9>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ADC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//<2F>ȴ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
return ADC_GetConversionValue(ADC1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ADC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* <09><> <20><> <20><>: Get_Adc_Ref()
|
||||
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><>ȡADC<44>IJ<EFBFBD><C4B2><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>ο<EFBFBD><CEBF><EFBFBD>ѹ
|
||||
* <09><> <20><> <20><>ͨ<EFBFBD><CDA8>ch
|
||||
* <20><> <20><> <20><>ADC<44><43><EFBFBD><EFBFBD>ֵ
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
float Get_Adc_Ref(u8 ch)
|
||||
{
|
||||
float ADC_V;
|
||||
u16 adc_ch;
|
||||
PWR_CTRLADC_H;//<2F><><EFBFBD><EFBFBD>ADC<44><43>Դ
|
||||
// Get_Adc(ch);
|
||||
VREFINT_DATA=Get_Adc(17);
|
||||
adc_ch=Get_Adc(ch);
|
||||
VDDA_VAL=(float)3*VREFINT_CAL/VREFINT_DATA;//<2F><>ȡVDDA<44><41>ѹ
|
||||
ADC_V=((float)adc_ch/4095)*VDDA_VAL;
|
||||
return ADC_V;
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* <09><> <20><> <20><>: Get_Adc_Average()
|
||||
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><>ȡADC<44>IJ<EFBFBD><C4B2><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
||||
* <09><> <20><> <20><>ͨ<EFBFBD><CDA8>ch <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD> times
|
||||
* <20><> <20><> <20><>ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
float Get_Adc_Average(u8 ch,u8 times)
|
||||
{
|
||||
float temp_val=0;
|
||||
u8 t;
|
||||
for(t=0;t<times;t++)
|
||||
{
|
||||
//temp_val+=Get_Adc_Ref(ch);
|
||||
temp_val+=Get_Adc(ch);
|
||||
delay_ms(10);
|
||||
}
|
||||
temp_val=((temp_val/times)/4095)*3.3;
|
||||
return temp_val;
|
||||
//return ((temp_val/times));
|
||||
}
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* <09><> <20><> <20><>: ADC15_POWERON()
|
||||
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20><><EFBFBD><EFBFBD>ADC<44>ɼ<EFBFBD><C9BC><EFBFBD>ѹͨ<D1B9><CDA8>
|
||||
* <09><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
* <20><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
void ADC15_POWERON(void)
|
||||
{
|
||||
PWR_CTRLADC_H;
|
||||
};
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* <09><> <20><> <20><>: ADC15_POWEROFF()
|
||||
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: <20>ر<EFBFBD>ADC<44>ɼ<EFBFBD><C9BC><EFBFBD>ѹͨ<D1B9><CDA8>
|
||||
* <09><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
* <20><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
void ADC15_POWEROFF(void)
|
||||
{
|
||||
PWR_CTRLADC_L;
|
||||
};
|
||||
|
||||
/*
|
||||
*********************************************************************************************************
|
||||
* <09><> <20><> <20><>: ADC15_Process()
|
||||
* <09><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>: ADC<44>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <09><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
* <20><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
void ADC15_Process(void)
|
||||
{
|
||||
float ADC_VALUVE;
|
||||
ADC_VALUVE=Get_Adc_Average(15,10);
|
||||
delay_ms(500);
|
||||
ADC_VALUVE=Get_Adc_Average(15,10);
|
||||
ADC_VALUVE*=(float)4.73774;
|
||||
//ADC_VALUVE += 0.8;
|
||||
ADCADCADFC = ADC_VALUVE;
|
||||
sprintf(data_common1.ADC_DATA,"%.3f,",ADC_VALUVE);
|
||||
}
|
||||
|
||||
/***************************** END OF FILE *********************************/
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user