tao_z
2021-04-11 6d4ddf7d2a2cd72c58876257700b34c63e5063d3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#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];
}