This repository has been archived on 2025-04-28. You can view files and clone it, but cannot push or open issues or pull requests.
CMS/1.Software/STM32/USB_HS _ TEST/VM_App/VM_ADC.c
2024-11-19 17:19:21 +08:00

103 lines
3.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}