使用ADC/Auto_Injection Demo,做了些修改, 發(fā)現(xiàn)無法讓4 ADC都正確工作,只有前面第一個是正確的,后面的都不正確,可以幫忙看看是哪里配置錯了嗎?
只修改了main.c? 修改后的代碼如下:
/********************************** (C) COPYRIGHT *******************************
?* File Name? ? ? ? ? : main.c
?* Author? ? ? ? ? ? ?: WCH
?* Version? ? ? ? ? ? : V1.0.0
?* Date? ? ? ? ? ? ? ?: 2021/06/06
?* Description? ? ? ? : Main program body.
?* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
?* SPDX-License-Identifier: Apache-2.0
?*******************************************************************************/
/*
?*@Note
?自動注入模式例程:
?ADC通道1(PA1)-規(guī)則組通道,通道3(PA3)-注入組通道
*/
#include "debug.h"
s16 Calibrattion_Val = 0;
/*********************************************************************
?* @fn? ? ? ADC_Function_Init
?*
?* @brief? ?Initializes ADC collection.
?*
?* @return? none
?*/
#define GPIOGROUP GPIOC
#define EXTRA2 1
void ADC_Function_Init(void)
{
? ? ADC_InitTypeDef? ADC_InitStructure = {0};
? ? GPIO_InitTypeDef GPIO_InitStructure = {0};
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
? ? RCC_ADCCLKConfig(RCC_PCLK2_Div8);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
? ? GPIO_Init(GPIOGROUP, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
? ? GPIO_Init(GPIOGROUP, &GPIO_InitStructure);
#ifdef EXTRA2
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
? ? GPIO_Init(GPIOGROUP, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
? ? GPIO_Init(GPIOGROUP, &GPIO_InitStructure);
#endif
? ? ADC_DeInit(ADC1);
? ? ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
? ? ADC_InitStructure.ADC_ScanConvMode = DISABLE;
? ? //ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
? ? ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
? ? ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
? ? ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
? ? ADC_InitStructure.ADC_NbrOfChannel = 1;
#ifdef EXTRA2
? ? ADC_InitStructure.ADC_NbrOfChannel = 1;
#endif
? ? ADC_Init(ADC1, &ADC_InitStructure);
? ? ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_28Cycles5);
? ? ADC_InjectedChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_28Cycles5);
? ? //ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5);
? ? //ADC_InjectedChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_239Cycles5);
#ifdef EXTRA2
? ? ADC_InjectedChannelConfig(ADC1, ADC_Channel_12, 2, ADC_SampleTime_239Cycles5);
? ? ADC_InjectedChannelConfig(ADC1, ADC_Channel_13, 3, ADC_SampleTime_239Cycles5);
#endif
? ? ADC_AutoInjectedConvCmd(ADC1, ENABLE);
? ? ADC_Cmd(ADC1, ENABLE);
? ? ADC_BufferCmd(ADC1, DISABLE); //disable buffer
? ? ADC_ResetCalibration(ADC1);
? ? while(ADC_GetResetCalibrationStatus(ADC1));
? ? ADC_StartCalibration(ADC1);
? ? while(ADC_GetCalibrationStatus(ADC1));
? ? Calibrattion_Val = Get_CalibrationValue(ADC1);
? ? ADC_BufferCmd(ADC1, ENABLE); //enable buffer
}
/*********************************************************************
?* @fn? ? ? Get_ADC_Val
?*
?* @brief? ?Returns ADCx conversion result data.
?*
?* @param? ?ch - ADC channel.
?*? ? ? ? ? ? ADC_Channel_0 - ADC Channel0 selected.
?*? ? ? ? ? ? ADC_Channel_1 - ADC Channel1 selected.
?*? ? ? ? ? ? ADC_Channel_2 - ADC Channel2 selected.
?*? ? ? ? ? ? ADC_Channel_3 - ADC Channel3 selected.
?*? ? ? ? ? ? ADC_Channel_4 - ADC Channel4 selected.
?*? ? ? ? ? ? ADC_Channel_5 - ADC Channel5 selected.
?*? ? ? ? ? ? ADC_Channel_6 - ADC Channel6 selected.
?*? ? ? ? ? ? ADC_Channel_7 - ADC Channel7 selected.
?*? ? ? ? ? ? ADC_Channel_8 - ADC Channel8 selected.
?*? ? ? ? ? ? ADC_Channel_9 - ADC Channel9 selected.
?*? ? ? ? ? ? ADC_Channel_10 - ADC Channel10 selected.
?*? ? ? ? ? ? ADC_Channel_11 - ADC Channel11 selected.
?*? ? ? ? ? ? ADC_Channel_12 - ADC Channel12 selected.
?*? ? ? ? ? ? ADC_Channel_13 - ADC Channel13 selected.
?*? ? ? ? ? ? ADC_Channel_14 - ADC Channel14 selected.
?*? ? ? ? ? ? ADC_Channel_15 - ADC Channel15 selected.
?*? ? ? ? ? ? ADC_Channel_16 - ADC Channel16 selected.
?*? ? ? ? ? ? ADC_Channel_17 - ADC Channel17 selected.
?*
?* @return? none
?*/
u16 Get_ADC_Val(u8 ch)
{
? ? u16 val;
? ? ADC_SoftwareStartConvCmd(ADC1, ENABLE);
? ? while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
? ? val = ADC_GetConversionValue(ADC1);
? ? return val;
}
/*********************************************************************
?* @fn? ? ? Get_ConversionVal
?*
?* @brief? ?Get Conversion Value.
?*
?* @param? ?val - Sampling value
?*
?* @return? val+Calibrattion_Val - Conversion Value.
?*/
u16 Get_ConversionVal(s16 val)
{
? ? if((val + Calibrattion_Val) < 0)
? ? ? ? return 0;
? ? if((Calibrattion_Val + val) > 4095||val==4095)
? ? ? ? return 4095;
? ? return (val + Calibrattion_Val);
}
/*********************************************************************
?* @fn? ? ? main
?*
?* @brief? ?Main program.
?*
?* @return? none
?*/
int main(void)
{
? ? u16 adc_val;
? ? u16 adc_jval;
? ? u16 adc_val_pc2;
? ? u16 adc_val_pc3;
? ? Delay_Init();
? ? USART_Printf_Init(115200);
? ? printf("SystemClk:%d\r\n", SystemCoreClock);
? ? ADC_Function_Init();
? ? printf("CalibrattionValue:%d\n", Calibrattion_Val);
? ? u16 t = 0;
? ? while(1)
? ? {
? ? ? ? ADC_SoftwareStartConvCmd(ADC1, ENABLE);
? ? ? ? while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
? ? ? ? adc_val = ADC_GetConversionValue(ADC1);
? ? ? ? adc_jval = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
#ifdef EXTRA2
? ? ? ? adc_val_pc2 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2);
? ? ? ? adc_val_pc3 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_3);
#endif
? ? ? ? Delay_Ms(500);
? ? ? ? t = Get_ConversionVal(adc_val);
? ? ? ? printf("PC0:%04d\r\n", t);
? ? ? ? printf("PC1:%04d\r\n", Get_ConversionVal(adc_jval));
#ifdef EXTRA2
? ? ? ? printf("PC2:%04d\r\n", Get_ConversionVal(adc_val_pc2));
? ? ? ? printf("PC3:%04d\r\n", Get_ConversionVal(adc_val_pc3));
#endif
? ? ? ? Delay_Ms(2);
? ? }
}