163 lines
5.2 KiB
C
Raw Normal View History

2021-07-28 13:15:22 +08:00
#include "adc.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////
//********************************************************************************/
//ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41><EFBFBD><E2BAAF><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/******************************************************************************/
//////////////////////////////////////////////////////////////////////////////////
ADC_HandleTypeDef ADC1_Handler;//ADC<44><43><EFBFBD><EFBFBD>
//********************************************************************************/
//<2F><>ʼ<EFBFBD><CABC>ADC
//ch: ADC_channels
//ͨ<><CDA8>ֵ 0~16ȡֵ<C8A1><D6B5>ΧΪ<CEA7><CEAA>ADC_CHANNEL_0~ADC_CHANNEL_16
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41><EFBFBD><E2BAAF><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/******************************************************************************/
void MY_ADC_Init(void)
{
ADC1_Handler.Instance=ADC1;
ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //4<><34>Ƶ<EFBFBD><C6B5>ADCCLK=PER_CK/4=64/4=16MHZ
ADC1_Handler.Init.Resolution=ADC_RESOLUTION_16B; //16λģʽ
ADC1_Handler.Init.ScanConvMode=DISABLE; //<2F><>ɨ<EFBFBD><C9A8>ģʽ
ADC1_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV; //<2F>ر<EFBFBD>EOC<4F>ж<EFBFBD>
ADC1_Handler.Init.LowPowerAutoWait=DISABLE; //<2F>Զ<EFBFBD><D4B6>͹<EFBFBD><CDB9>Ĺر<C4B9>
ADC1_Handler.Init.ContinuousConvMode=DISABLE; //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
ADC1_Handler.Init.NbrOfConversion=1; //1<><31>ת<EFBFBD><D7AA><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ҳ<><D2B2><EFBFBD><EFBFBD>ֻת<D6BB><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
ADC1_Handler.Init.DiscontinuousConvMode=DISABLE; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
ADC1_Handler.Init.NbrOfDiscConversion=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>Ϊ0
ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADC1_Handler.Init.BoostMode=ENABLE; //BOOTģʽ<C4A3>ر<EFBFBD>
ADC1_Handler.Init.Overrun=ADC_OVR_DATA_OVERWRITTEN; //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӹ<EFBFBD><D3B8>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADC1_Handler.Init.OversamplingMode=DISABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
ADC1_Handler.Init.ConversionDataManagement=ADC_CONVERSIONDATA_DR; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DR<44>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_ADC_Init(&ADC1_Handler); //<2F><>ʼ<EFBFBD><CABC>
HAL_ADCEx_Calibration_Start(&ADC1_Handler,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED); //ADCУ׼
}
//********************************************************************************/
//ADC<44>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
//<2F>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ᱻHAL_ADC_Init()<29><><EFBFBD><EFBFBD>
//hadc:ADC<44><43><EFBFBD><EFBFBD>
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41><EFBFBD><E2BAAF><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/******************************************************************************/
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_ADC12_CLK_ENABLE(); //ʹ<><CAB9>ADC1/2ʱ<32><CAB1>
__HAL_RCC_GPIOC_CLK_ENABLE(); //<2F><><EFBFBD><EFBFBD>GPIOCʱ<43><CAB1>
__HAL_RCC_ADC_CONFIG(RCC_ADCCLKSOURCE_CLKP); //ADC<44><43><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ѡ<EFBFBD><D1A1>
GPIO_Initure.Pin=GPIO_PIN_0; //PC0<43><30><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ӦADC1<43><31>CH10ͨ<30><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //ģ<><C4A3>
GPIO_Initure.Pull=GPIO_NOPULL; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
}
//********************************************************************************/
//<2F><><EFBFBD><EFBFBD>ADCֵ
//ch: ͨ<><CDA8>ֵ 0~16<31><36>ȡֵ<C8A1><D6B5>ΧΪ<CEA7><CEAA>ADC_CHANNEL_0~ADC_CHANNEL_16
//<2F><><EFBFBD><EFBFBD>ֵ:ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41><EFBFBD><E2BAAF><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/******************************************************************************/
u16 Get_Adc(u32 ch)
{
ADC_ChannelConfTypeDef ADC1_ChanConf;
ADC1_ChanConf.Channel=ch; //ͨ<><CDA8>
ADC1_ChanConf.Rank=ADC_REGULAR_RANK_1; //1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_64CYCLES_5; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
ADC1_ChanConf.SingleDiff=ADC_SINGLE_ENDED; //<2F><><EFBFBD>߲ɼ<DFB2>
ADC1_ChanConf.OffsetNumber=ADC_OFFSET_NONE;
ADC1_ChanConf.Offset=0;
HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_ADC_Start(&ADC1_Handler); //<2F><><EFBFBD><EFBFBD>ADC
HAL_ADC_PollForConversion(&ADC1_Handler,10); //<2F><>ѯת<D1AF><D7AA>
return (u16)HAL_ADC_GetValue(&ADC1_Handler); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ADC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//********************************************************************************/
//<2F><>ȡָ<C8A1><D6B8>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ֵ<EFBFBD><D6B5>ȡtimes<65><73><><C8BB>ƽ<EFBFBD><C6BD>
//times:<3A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:ͨ<><CDA8>ch<63><68>times<65><73>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41><EFBFBD><E2BAAF><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/******************************************************************************/
u16 Get_Adc_Average(u32 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
//********************************************************************************/
//STM32H7<48><37><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>-HAL<41><EFBFBD><E2BAAF><EFBFBD>
//DevEBox <20><>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD>
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>mcudev.taobao.com
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>̣<EFBFBD>shop389957290.taobao.com
/******************************************************************************/