|
|
@ -40,8 +40,8 @@ void ADCInit(uint8_t *port, uint8_t pin) { |
|
|
|
//采集到的模拟量*3.3/4096=现在的电压 |
|
|
|
|
|
|
|
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */ |
|
|
|
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ |
|
|
|
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ |
|
|
|
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ |
|
|
|
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ |
|
|
|
// x.CHS = ADC_CHS_AIN4; |
|
|
|
// x.CHS = ADC_CHS_AIN8; |
|
|
|
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */ |
|
|
@ -51,6 +51,148 @@ void ADCInit(uint8_t *port, uint8_t pin) { |
|
|
|
ADC_Init(&x); |
|
|
|
} |
|
|
|
|
|
|
|
//测试读取adc采集的电压值 |
|
|
|
|
|
|
|
void ADCPA2Init() { |
|
|
|
ADC_InitStruType x; |
|
|
|
GPIO_InitSettingType y; |
|
|
|
y.Signal = GPIO_Pin_Signal_Analog; //模拟 |
|
|
|
y.Dir = GPIO_Direction_Input; //输入 |
|
|
|
y.Func = GPIO_Reuse_Func0; |
|
|
|
// x.CHS设置adc采集的通道每个引脚对应一个通道 |
|
|
|
GPIO_Init(GPIO_Pin_A2, &y); |
|
|
|
|
|
|
|
//经过分频以后Tadclk=1/(PCLK/4)约等于0.083us |
|
|
|
x.CLKS = ADC_CLKS_PCLK; |
|
|
|
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */ |
|
|
|
|
|
|
|
//采集到的模拟量*3.3/4096=现在的电压 |
|
|
|
|
|
|
|
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */ |
|
|
|
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ |
|
|
|
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ |
|
|
|
x.CHS = ADC_CHS_AIN8; |
|
|
|
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */ |
|
|
|
//采样时间st*2+1(个Tadclk)=1.743us |
|
|
|
x.ST = 10; /* AD硬件采样时间选择 */ |
|
|
|
x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ |
|
|
|
ADC_Init(&x); |
|
|
|
} |
|
|
|
|
|
|
|
void get_pa2_adc_value(void) { |
|
|
|
volatile uint32_t pa2_adc_val = 0; |
|
|
|
ADCPA2Init(); |
|
|
|
ADC_SoftStart(); |
|
|
|
//正在转换 |
|
|
|
while (ADC_GetConvStatus() != RESET) |
|
|
|
; |
|
|
|
pa2_adc_val = ADC_GetConvValue(); |
|
|
|
ADC_SoftStop(); |
|
|
|
printf("%d\r\n", pa2_adc_val); |
|
|
|
printf("pa2_val:%lf\r\n", pa2_adc_val * 3.3 / 4096); |
|
|
|
} |
|
|
|
|
|
|
|
void ADCPB8Init() { |
|
|
|
ADC_InitStruType x; |
|
|
|
GPIO_InitSettingType y; |
|
|
|
y.Signal = GPIO_Pin_Signal_Analog; //模拟 |
|
|
|
y.Dir = GPIO_Direction_Input; //输入 |
|
|
|
y.Func = GPIO_Reuse_Func0; |
|
|
|
// x.CHS设置adc采集的通道每个引脚对应一个通道 |
|
|
|
GPIO_Init(GPIO_Pin_B8, &y); |
|
|
|
|
|
|
|
//经过分频以后Tadclk=1/(PCLK/4)约等于0.083us |
|
|
|
x.CLKS = ADC_CLKS_PCLK; |
|
|
|
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */ |
|
|
|
|
|
|
|
//采集到的模拟量*3.3/4096=现在的电压 |
|
|
|
|
|
|
|
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */ |
|
|
|
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ |
|
|
|
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ |
|
|
|
x.CHS = ADC_CHS_AIN3; |
|
|
|
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */ |
|
|
|
//采样时间st*2+1(个Tadclk)=1.743us |
|
|
|
x.ST = 10; /* AD硬件采样时间选择 */ |
|
|
|
x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ |
|
|
|
ADC_Init(&x); |
|
|
|
} |
|
|
|
|
|
|
|
void get_pb8_adc_value(void) { |
|
|
|
volatile uint32_t pb8_adc_val = 0; |
|
|
|
ADCPB8Init(); |
|
|
|
ADC_SoftStart(); |
|
|
|
//正在转换 |
|
|
|
while (ADC_GetConvStatus() != RESET) |
|
|
|
; |
|
|
|
pb8_adc_val = ADC_GetConvValue(); |
|
|
|
ADC_SoftStop(); |
|
|
|
printf("%d\r\n", pb8_adc_val); |
|
|
|
printf("pb8_val:%lf\r\n", pb8_adc_val * 3.3 / 4096); |
|
|
|
} |
|
|
|
|
|
|
|
void ADCPB9Init() { |
|
|
|
ADC_InitStruType x; |
|
|
|
GPIO_InitSettingType y; |
|
|
|
y.Signal = GPIO_Pin_Signal_Analog; //模拟 |
|
|
|
y.Dir = GPIO_Direction_Input; //输入 |
|
|
|
y.Func = GPIO_Reuse_Func0; |
|
|
|
// x.CHS设置adc采集的通道每个引脚对应一个通道 |
|
|
|
GPIO_Init(GPIO_Pin_B9, &y); |
|
|
|
|
|
|
|
//经过分频以后Tadclk=1/(PCLK/32) |
|
|
|
x.CLKS = ADC_CLKS_PCLK; |
|
|
|
x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */ |
|
|
|
|
|
|
|
//采集到的模拟量*3.3/4096=现在的电压 |
|
|
|
|
|
|
|
x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */ |
|
|
|
x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ |
|
|
|
x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ |
|
|
|
x.CHS = ADC_CHS_AIN4; |
|
|
|
// x.CHS = ADC_CHS_AIN8; |
|
|
|
x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */ |
|
|
|
//采样时间st*2+1(个Tadclk)=1.743us |
|
|
|
x.ST = 10; /* AD硬件采样时间选择 */ |
|
|
|
x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ |
|
|
|
ADC_Init(&x); |
|
|
|
} |
|
|
|
|
|
|
|
void get_pb9_adc_value(void) { |
|
|
|
volatile uint32_t pb9_adc_val = 0; |
|
|
|
ADCPB9Init(); |
|
|
|
ADC_SoftStart(); |
|
|
|
//正在转换 |
|
|
|
while (ADC_GetConvStatus() != RESET) |
|
|
|
; |
|
|
|
pb9_adc_val = ADC_GetConvValue(); |
|
|
|
ADC_SoftStop(); |
|
|
|
printf("%d\r\n", pb9_adc_val); |
|
|
|
printf("pb9_val:%lf\r\n", pb9_adc_val * 3.3 / 4096); |
|
|
|
} |
|
|
|
|
|
|
|
void try_adc_gather(void) { |
|
|
|
static uint32_t adc_ticket = 0; |
|
|
|
// static uint32_t adc_ticket_count = 0; |
|
|
|
if (port_haspassedms(adc_ticket) > 1000) { |
|
|
|
// adc_ticket_count++; |
|
|
|
adc_ticket = get_sys_ticket(); |
|
|
|
// if (adc_ticket_count < 5) { |
|
|
|
get_pb8_adc_value(); |
|
|
|
get_pa2_adc_value(); |
|
|
|
get_pb9_adc_value(); |
|
|
|
// } |
|
|
|
// get_adc_value(); |
|
|
|
// if (adc_ticket_count >= 5) { |
|
|
|
// if (adc_ticket_count == 10) { |
|
|
|
// adc_ticket_count = 0; |
|
|
|
// } |
|
|
|
// ADC_Disable(); |
|
|
|
// get_pa2_adc_value(); |
|
|
|
// } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void get_adc_value(void) { |
|
|
|
// uint16_t adc_value = 0; |
|
|
|
for (int i = 0; i < 3; i++) { |
|
|
@ -62,15 +204,7 @@ void get_adc_value(void) { |
|
|
|
ADC_SoftStop(); |
|
|
|
// record_adc_gather_value(s_adc[i].adc_just_now_gather_val); |
|
|
|
printf("%d\r\n", s_adc[i].adc_just_now_gather_val); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void try_adc_gather(void) { |
|
|
|
static uint32_t adc_ticket = 0; |
|
|
|
|
|
|
|
if (port_haspassedms(adc_ticket) > 500) { |
|
|
|
adc_ticket = get_sys_ticket(); |
|
|
|
get_adc_value(); |
|
|
|
printf("voltage:%lf\r\n", (s_adc[i].adc_just_now_gather_val) * 3.3 / 4096); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|