為了適配和優(yōu)化打印輸出,?稍稍修改了一下EVT的例程 "Auto_Injection" , 具體程序如下:?
根據(jù)個人理解, 規(guī)格通道和注入通道應該順序?qū)νǖ?A0(PA_2)和A2(PC_4)分別采樣, 但是奇怪的是對通道 A2 輸入信號時會對通道 A0 造成同步的信號, 而通道 A0 卻接收不到信號. 具體如下圖:
如果是配置錯誤請指出, 非常感謝!
#include "debug.h"
void ADC_Function_Init(void)
{
? ? ADC_InitTypeDef? ADC_InitStructure = {0};
? ? GPIO_InitTypeDef GPIO_InitStructure = {0};
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA, ENABLE);
? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
? ? RCC_ADCCLKConfig(RCC_PCLK2_Div8);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
? ? GPIO_Init(GPIOC, &GPIO_InitStructure);
? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
? ? GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? ADC_DeInit(ADC1);
? ? ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
? ? ADC_InitStructure.ADC_ScanConvMode = DISABLE;
? ? ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
? ? ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
? ? ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
? ? ADC_InitStructure.ADC_NbrOfChannel = 1;
? ? ADC_Init(ADC1, &ADC_InitStructure);
? ? ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_241Cycles);
? ? ADC_InjectedChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_241Cycles);
? ? ADC_Calibration_Vol(ADC1, ADC_CALVOL_50PERCENT);
? ? ADC_AutoInjectedConvCmd(ADC1, ENABLE);
? ? ADC_Cmd(ADC1, ENABLE);
? ? ADC_ResetCalibration(ADC1);
? ? while(ADC_GetResetCalibrationStatus(ADC1));
? ? ADC_StartCalibration(ADC1);
? ? while(ADC_GetCalibrationStatus(ADC1));
}
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;
}
int main(void)
{
? ? u16 adc_val;
? ? u16 adc_jval;
? ? SystemCoreClockUpdate();
? ? Delay_Init();
? ? USART_Printf_Init(115200);
? ? printf("SystemClk:%d\r\n", SystemCoreClock);
? ? printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
? ? ADC_Function_Init();
? ? while(1)
? ? {
? ? ? ? ADC_SoftwareStartConvCmd(ADC1, ENABLE);
? ? ? ? while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
? ? ? ? while( !ADC_GetFlagStatus( ADC1, ADC_FLAG_JEOC ) );
? ? ? ? adc_val = ADC_GetConversionValue(ADC1);
? ? ? ? adc_jval = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
? ? ? ? Delay_Ms(50);
? ? ? ? printf("%04d, %04d\r\n", adc_val, adc_jval);
? ? ? ? Delay_Ms(2);
? ? }
}