#include "adc.h"
|
#include "GPIO.h"
|
#include "stm8s_gpio.h"
|
#include "stm8s_adc1.h"
|
|
#define ADC_CURRENT_CH (ADC1_CHANNEL_4)
|
#define ADC_VOLTAGE_CH (ADC1_CHANNEL_2)
|
enum
|
{
|
ADC_CHANNELMAX = 16
|
};
|
|
static uint16_t ADC1_ValueBuffer_u16[ADC_CHANNELMAX] = {0};
|
static void ADC1_SCAN(void);
|
|
/*!
|
* @brief 配置ADC引脚
|
* @param [in] void
|
* @note null
|
*/
|
void ADCconfig(void)
|
{
|
GPIO_Init(CURRENT_AI_PORT, CURRENT_AI_PIN, GPIO_MODE_IN_FL_NO_IT);
|
GPIO_Init(VOLTAGE_AI_PORT, VOLTAGE_AI_PIN, GPIO_MODE_IN_FL_NO_IT);
|
|
ADC1_DeInit();
|
// ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, channl[i], ADC1_PRESSEL_FCPU_D2,
|
// ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL8,
|
// DISABLE);
|
}
|
|
static void ADC1_SCAN(void)
|
{
|
uint8_t i = 0;
|
ADC1_Channel_TypeDef channl[] = {ADC_CURRENT_CH,
|
ADC_VOLTAGE_CH};
|
|
for (i = 0; i < (sizeof(channl) / sizeof(ADC1_Channel_TypeDef)); i++)
|
{
|
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, channl[i], ADC1_PRESSEL_FCPU_D2,
|
ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL8,
|
DISABLE);
|
|
ADC1_StartConversion();
|
|
while (!ADC1_GetFlagStatus(ADC1_FLAG_EOC))
|
; //wait for Conversion over.
|
|
ADC1_ValueBuffer_u16[channl[i]] = ADC1_GetConversionValue();
|
|
ADC1_ClearFlag(ADC1_FLAG_EOC);
|
|
ADC1_ClearITPendingBit(ADC1_IT_EOC);
|
}
|
}
|
|
/*!
|
* @brief 采集ADC任务
|
* @param [in] void
|
* @note null
|
*/
|
void ADCTask(void)
|
{
|
ADC1_SCAN();
|
}
|
|
/*!
|
* @brief 获取ADC1函数
|
* @param [in] void
|
* @retval ADC的数字量
|
* @note null
|
*/
|
int GetADC1Value(int ch)
|
{
|
return ADC1_ValueBuffer_u16[ch];
|
}
|