CH32V003J4M6的關于注入通道的疑惑

為了適配和優(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);

? ? }

}


image.png

你好,檢查一下代碼中是不是使用的外部晶振的宏,system_ch32v00x.c 中,如果是,請改為內(nèi)部晶振的宏。PA2是外部晶振輸入引腳,使用外部晶振的宏會自動使能IO的功能。后續(xù)具體請與我郵箱聯(lián)系zdg@wch.cnimage.png


額, 之前確實沒改過來. 剛才試了一下, 修改后對A0通道輸入的信號確實有反應了!

但是對A2的信號輸入還是會對A0造成干擾, 具體如下圖:

image.png?


此時A0通道的引腳未接任何信號 (為懸空狀態(tài)) 所以,?其他的任何引腳變化都會干擾該引腳??


引腳不可以懸空的,因為采樣的時候有采樣電容,不接固定電平,電容不能充放電。另外,采樣電壓要低于VDD。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频