174 lines
4.7 KiB
C
174 lines
4.7 KiB
C
|
/**
|
|||
|
******************************************************************
|
|||
|
* @file bsp_adcd.c
|
|||
|
* @author fire
|
|||
|
* @version V1.1
|
|||
|
* @date 2018-xx-xx
|
|||
|
* @brief adcӦ<EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
******************************************************************
|
|||
|
* @attention
|
|||
|
*
|
|||
|
* ʵ<EFBFBD><EFBFBD>ƽ̨:Ұ<EFBFBD><EFBFBD> STM32H750<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>˾ :http://www.embedfire.com
|
|||
|
* <EFBFBD><EFBFBD>̳ :http://www.firebbs.cn
|
|||
|
* <EFBFBD>Ա<EFBFBD> :https://fire-stm32.taobao.com
|
|||
|
*
|
|||
|
******************************************************************
|
|||
|
*/
|
|||
|
#include "./adc/bsp_adc.h"
|
|||
|
|
|||
|
extern float ADC_vol;
|
|||
|
|
|||
|
ADC_HandleTypeDef ADC_Handle;
|
|||
|
__IO uint16_t ADC_ConvertedValue = 0;
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static void ADC_GPIO_Mode_Config(void)
|
|||
|
{
|
|||
|
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>GPIO_InitTypeDef<65><66><EFBFBD>͵Ľṹ<C4BD><E1B9B9> */
|
|||
|
GPIO_InitTypeDef GPIO_InitStruct;
|
|||
|
/* ʹ<><CAB9>ADC3<43><33><EFBFBD>ŵ<EFBFBD>ʱ<EFBFBD><CAB1> */
|
|||
|
RHEOSTAT_ADC_GPIO_CLK_ENABLE();
|
|||
|
__HAL_RCC_SYSCFG_CLK_ENABLE();
|
|||
|
|
|||
|
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
|||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|||
|
GPIO_InitStruct.Pin = RHEOSTAT_ADC_PIN;
|
|||
|
/* <20><><EFBFBD><EFBFBD>Ϊģ<CEAA><C4A3><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
HAL_GPIO_Init(RHEOSTAT_ADC_GPIO_PORT, &GPIO_InitStruct);
|
|||
|
|
|||
|
/* H750XBH6<48><36>ADC3_CH1ʹ<31>õ<EFBFBD><C3B5><EFBFBD>PC3_C<5F><43><EFBFBD><EFBFBD>PC3<43><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>ͨ<EFBFBD><CDA8>һ<EFBFBD><D2BB>ģ<EFBFBD><EFBFBD><E2BFAA><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1>Ҫ<EFBFBD>л<EFBFBD> */
|
|||
|
/* PC3_C ------> ADC3_INP1 */
|
|||
|
HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static void ADC_Mode_Config(void)
|
|||
|
{
|
|||
|
ADC_ChannelConfTypeDef ADC_Config;
|
|||
|
|
|||
|
RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit;
|
|||
|
/* <20><><EFBFBD><EFBFBD>ADC3ʱ<33><CAB1>Դ */
|
|||
|
/* HSE Frequency(Hz) = 25000000 */
|
|||
|
/* PLL_M = 5 */
|
|||
|
/* PLL_N = 160 */
|
|||
|
/* PLL_P = 25 */
|
|||
|
/* PLL_Q = 2 */
|
|||
|
/* PLL_R = 2 */
|
|||
|
/* ADC_ker_clk = 32000000 */
|
|||
|
RCC_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2FRACN = 0;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2M = 5;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2N = 160;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2P = 25;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2Q = 2;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2R = 2;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;
|
|||
|
RCC_PeriphClkInit.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;
|
|||
|
RCC_PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
|
|||
|
HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInit);
|
|||
|
|
|||
|
/* ʹ<><CAB9>ADC3ʱ<33><CAB1> */
|
|||
|
RHEOSTAT_ADC_CLK_ENABLE();
|
|||
|
|
|||
|
ADC_Handle.Instance = RHEOSTAT_ADC;
|
|||
|
//ADCʱ<43><CAB1>1<EFBFBD><31>Ƶ
|
|||
|
ADC_Handle.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
|||
|
//ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ģʽ
|
|||
|
ADC_Handle.Init.ContinuousConvMode = ENABLE;
|
|||
|
//ת<><D7AA>ͨ<EFBFBD><CDA8> 1<><31>
|
|||
|
ADC_Handle.Init.NbrOfConversion = 1;
|
|||
|
//<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ADC_Handle.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
|
|||
|
//<2F>رղ<D8B1><D5B2><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ģʽ
|
|||
|
ADC_Handle.Init.DiscontinuousConvMode = DISABLE;
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ADC_Handle.Init.NbrOfDiscConversion = 0;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD>
|
|||
|
ADC_Handle.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
|
|||
|
|
|||
|
//ʹ<><CAB9>EOC<4F><43>־λ
|
|||
|
ADC_Handle.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ADC_Handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
|||
|
//<2F>رյ<D5B5><CDB9><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ȴ<EFBFBD>
|
|||
|
ADC_Handle.Init.LowPowerAutoWait = DISABLE;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
|||
|
ADC_Handle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
|||
|
//<2F><>ʹ<EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
ADC_Handle.Init.OversamplingMode = DISABLE;
|
|||
|
//<2F>ֱ<EFBFBD><D6B1><EFBFBD>Ϊ<EFBFBD><CEAA>16bit
|
|||
|
ADC_Handle.Init.Resolution = ADC_RESOLUTION_16B;
|
|||
|
//<2F><>ʹ<EFBFBD>ܶ<EFBFBD>ͨ<EFBFBD><CDA8>ɨ<EFBFBD><C9A8>
|
|||
|
ADC_Handle.Init.ScanConvMode = DISABLE;
|
|||
|
//<2F><>ʼ<EFBFBD><CABC> ADC
|
|||
|
HAL_ADC_Init(&ADC_Handle);
|
|||
|
|
|||
|
//ADCУ
|
|||
|
HAL_ADCEx_Calibration_Start(&ADC_Handle,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED);
|
|||
|
|
|||
|
//ʹ<><CAB9>ͨ<EFBFBD><CDA8>1
|
|||
|
ADC_Config.Channel = ADC_CHANNEL_1;
|
|||
|
//ת<><D7AA>˳<EFBFBD><CBB3>Ϊ1
|
|||
|
ADC_Config.Rank = ADC_REGULAR_RANK_1 ;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ64.5<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ADC_Config.SamplingTime = ADC_SAMPLETIME_64CYCLES_5;
|
|||
|
//<2F><>ʹ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
|
|||
|
ADC_Config.SingleDiff = ADC_SINGLE_ENDED ;
|
|||
|
//<2F><><EFBFBD><EFBFBD>ADCͨ<43><CDA8>
|
|||
|
HAL_ADC_ConfigChannel(&ADC_Handle, &ADC_Config);
|
|||
|
//ʹ<><CAB9>ADC
|
|||
|
ADC_Enable(&ADC_Handle);
|
|||
|
}
|
|||
|
/**
|
|||
|
* @brief ADC<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
static void Rheostat_ADC_NVIC_Config(void)
|
|||
|
{
|
|||
|
HAL_NVIC_SetPriority(Rheostat_ADC_IRQ, 1, 1);
|
|||
|
HAL_NVIC_EnableIRQ(Rheostat_ADC_IRQ);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ADC<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void ADC_Init(void)
|
|||
|
{
|
|||
|
ADC_GPIO_Mode_Config();
|
|||
|
|
|||
|
ADC_Mode_Config();
|
|||
|
//ADC<44>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Rheostat_ADC_NVIC_Config();
|
|||
|
//ʹ<><CAB9>ADC<44>ж<EFBFBD>
|
|||
|
HAL_ADC_Start_IT(&ADC_Handle);
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD>
|
|||
|
HAL_ADC_Start(&ADC_Handle);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>
|
|||
|
* @param AdcHandle : ADC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
|
|||
|
{
|
|||
|
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> */
|
|||
|
ADC_ConvertedValue = HAL_ADC_GetValue(AdcHandle);
|
|||
|
}
|
|||
|
/*********************************************END OF FILE**********************/
|
|||
|
|
|||
|
|