103 lines
3.8 KiB
C
103 lines
3.8 KiB
C
#include "VM_ADC.h"
|
||
#include "delay.h"
|
||
|
||
ADC_HandleTypeDef ADC2_Handler;//ADC句柄
|
||
ADC_HandleTypeDef ADC3_Handler;//ADC句柄
|
||
|
||
//初始化ADC2
|
||
//ch: ADC_channels
|
||
//通道值 0~16取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
|
||
void ADC2_Init(void)
|
||
{
|
||
ADC_ChannelConfTypeDef sConfig = {0};
|
||
|
||
ADC2_Handler.Instance=ADC2;
|
||
ADC2_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //4分频,ADCCLK=PCLK2/4=90/4=22.5MHZ
|
||
ADC2_Handler.Init.Resolution=ADC_RESOLUTION_12B; //12位模式
|
||
ADC2_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT; //右对齐
|
||
ADC2_Handler.Init.ScanConvMode=DISABLE; //非扫描模式
|
||
ADC2_Handler.Init.EOCSelection=DISABLE; //关闭EOC中断
|
||
ADC2_Handler.Init.ContinuousConvMode=DISABLE; //关闭连续转换
|
||
ADC2_Handler.Init.NbrOfConversion=1; //1个转换在规则序列中 也就是只转换规则序列1
|
||
ADC2_Handler.Init.DiscontinuousConvMode=DISABLE; //禁止不连续采样模式
|
||
ADC2_Handler.Init.NbrOfDiscConversion=0; //不连续采样通道数为0
|
||
ADC2_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START; //软件触发
|
||
ADC2_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//使用软件触发
|
||
ADC2_Handler.Init.DMAContinuousRequests=DISABLE; //关闭DMA请求
|
||
HAL_ADC_Init(&ADC2_Handler); //初始化
|
||
|
||
sConfig.Channel = ADC_CHANNEL_11;
|
||
sConfig.Rank = 1;
|
||
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
|
||
HAL_ADC_ConfigChannel(&ADC2_Handler, &sConfig);
|
||
}
|
||
|
||
//初始化ADC3
|
||
//ch: ADC_channels
|
||
//通道值 0~16取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16
|
||
void ADC3_Init(void)
|
||
{
|
||
ADC_ChannelConfTypeDef sConfig = {0};
|
||
|
||
ADC3_Handler.Instance=ADC3;
|
||
ADC3_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //4分频,ADCCLK=PCLK2/4=90/4=22.5MHZ
|
||
ADC3_Handler.Init.Resolution=ADC_RESOLUTION_12B; //12位模式
|
||
ADC3_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT; //右对齐
|
||
ADC3_Handler.Init.ScanConvMode=DISABLE; //非扫描模式
|
||
ADC3_Handler.Init.EOCSelection=DISABLE; //关闭EOC中断
|
||
ADC3_Handler.Init.ContinuousConvMode=DISABLE; //关闭连续转换
|
||
ADC3_Handler.Init.NbrOfConversion=1; //1个转换在规则序列中 也就是只转换规则序列1
|
||
ADC3_Handler.Init.DiscontinuousConvMode=DISABLE; //禁止不连续采样模式
|
||
ADC3_Handler.Init.NbrOfDiscConversion=0; //不连续采样通道数为0
|
||
ADC3_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START; //软件触发
|
||
ADC3_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//使用软件触发
|
||
ADC3_Handler.Init.DMAContinuousRequests=DISABLE; //关闭DMA请求
|
||
HAL_ADC_Init(&ADC3_Handler); //初始化
|
||
|
||
sConfig.Channel = ADC_CHANNEL_8;
|
||
sConfig.Rank = 1;
|
||
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
|
||
HAL_ADC_ConfigChannel(&ADC3_Handler, &sConfig);
|
||
}
|
||
|
||
|
||
//ADC底层驱动,引脚配置,时钟使能
|
||
//此函数会被HAL_ADC_Init()调用
|
||
//hadc:ADC句柄
|
||
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
||
{
|
||
GPIO_InitTypeDef GPIO_Initure;
|
||
if(hadc == &ADC2_Handler)
|
||
{
|
||
__HAL_RCC_ADC2_CLK_ENABLE();
|
||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||
|
||
GPIO_Initure.Pin=GPIO_PIN_1; //PC1
|
||
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
|
||
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
|
||
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
|
||
}
|
||
if(hadc == &ADC3_Handler)
|
||
{
|
||
__HAL_RCC_ADC3_CLK_ENABLE();
|
||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||
|
||
GPIO_Initure.Pin=GPIO_PIN_10; //PF8
|
||
GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟
|
||
GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉
|
||
HAL_GPIO_Init(GPIOF,&GPIO_Initure);
|
||
}
|
||
}
|
||
|
||
|
||
u32 Get_Adc_Value(ADC_HandleTypeDef* hadc)
|
||
{
|
||
u32 temp_val=0;
|
||
|
||
HAL_ADC_Start(hadc);
|
||
HAL_ADC_PollForConversion(hadc,10);
|
||
temp_val = HAL_ADC_GetValue(hadc);
|
||
|
||
return temp_val;
|
||
}
|