测试一下ES32F0654的ADC,使用内部2V参考电压,DEMO板上的电位器连接在PB00上,使用AIN14.引脚初始化模拟输入,写个宏,以后初始化就免了查手册哪个IO对应哪个AIN了。也方便移植
//*********************************************************************
//ADC 通道初始化
#define ADC_GpioInit() do{ \
ADC_Ain14Init(); \
}while(0)
//*********************************************************************
#define ADC_Ain0Init() GPIO_Init(GPIOC, GPIO_PIN_0, 1, IO_IN_AN)
#define ADC_Ain1Init() GPIO_Init(GPIOC, GPIO_PIN_1, 1, IO_IN_AN)
#define ADC_Ain2Init() GPIO_Init(GPIOC, GPIO_PIN_2, 1, IO_IN_AN)
#define ADC_Ain3Init() GPIO_Init(GPIOC, GPIO_PIN_3, 1, IO_IN_AN)
#define ADC_Ain4Init() GPIO_Init(GPIOA, GPIO_PIN_0, 1, IO_IN_AN)
#define ADC_Ain5Init() GPIO_Init(GPIOA, GPIO_PIN_1, 1, IO_IN_AN)
#define ADC_Ain6Init() GPIO_Init(GPIOA, GPIO_PIN_2, 1, IO_IN_AN)
#define ADC_Ain7Init() GPIO_Init(GPIOA, GPIO_PIN_3, 1, IO_IN_AN)
#define ADC_Ain8Init() GPIO_Init(GPIOA, GPIO_PIN_4, 1, IO_IN_AN)
#define ADC_Ain9Init() GPIO_Init(GPIOA, GPIO_PIN_5, 1, IO_IN_AN)
#define ADC_Ain10Init() GPIO_Init(GPIOA, GPIO_PIN_6, 1, IO_IN_AN)
#define ADC_Ain11Init() GPIO_Init(GPIOA, GPIO_PIN_7, 1, IO_IN_AN)
#define ADC_Ain12Init() GPIO_Init(GPIOC, GPIO_PIN_4, 1, IO_IN_AN)
#define ADC_Ain13Init() GPIO_Init(GPIOC, GPIO_PIN_5, 1, IO_IN_AN)
#define ADC_Ain14Init() GPIO_Init(GPIOB, GPIO_PIN_0, 1, IO_IN_AN)
#define ADC_Ain15Init() GPIO_Init(GPIOB, GPIO_PIN_1, 1, IO_IN_AN)
//ADC模块配置
#define ADC_ModuleInit() do{ \
adc_init_t adc_str; \
adc_struct_init(&adc_str); \
adc_str.pos_ref = ADC_POS_REF_2V; \
adc_init(ADC0, &adc_str); \
adc_set_normal_1st_conv_ns1(ADC0, ADC_NC_RANK_1); \
adc_set_smpt1_cht(ADC0, ADC_SAMPLETIME_4); \
adc_converter_enable_adcen(ADC0); \
adc_set_normal_channel_conv_start_ichtrg(ADC0); \
}while(0)
#define ADC_Start() adc_set_normal_channel_conv_start_ichtrg(ADC0)
#define ADC_Channel(ch) adc_set_normal_1st_conv_ns1(ADC0, ch)
#define ADC_Done() adc_get_stat_nche(ADC0)
#define ADC_ClrFlag() adc_set_clr_nche(ADC0)
#define ADC_Result() adc_get_normal_channel_val(ADC0)
测量了0.5V、1V、1.5V三个电压点,在没有校准的情况下,偏差不大于2%:
|