求助,adc轉(zhuǎn)換a0引腳范圍0-4095,換成a1,a3等范圍變成20多到3900多了是什么情況,代碼里面把對(duì)應(yīng)引腳和通道已經(jīng)修改

代碼如下

#include "debug.h"? ? ? ? ? ? ? ? // Device header


/**

? * 函? ? 數(shù):AD初始化

? * 參? ? 數(shù):無

? * 返 回 值:無

? */

void AD_Init(void)

{

? ? /*開啟時(shí)鐘*/

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);? ? //開啟ADC1的時(shí)鐘

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);? ?//開啟GPIOA的時(shí)鐘


? ? /*設(shè)置ADC時(shí)鐘*/

? ? RCC_ADCCLKConfig(RCC_PCLK2_Div6);? ? ? ? ? ? ? ? ? ? ? ?//選擇時(shí)鐘6分頻,ADCCLK = 72MHz / 6 = 12MHz


? ? /*GPIO初始化*/

? ? GPIO_InitTypeDef GPIO_InitStructure;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_3;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);? ? ? ? ? ? ? ? ? //將PA0、PA1、PA2和PA3引腳初始化為模擬輸入


? ? /*不在此處配置規(guī)則組序列,而是在每次AD轉(zhuǎn)換前配置,這樣可以靈活更改AD轉(zhuǎn)換的通道*/


? ? /*ADC初始化*/

? ? ADC_InitTypeDef ADC_InitStructure;? ? ? ? ? ? ? ? ? ? ? //定義結(jié)構(gòu)體變量

? ? ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;? ? ? //模式,選擇獨(dú)立模式,即單獨(dú)使用ADC1

? ? ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;? //數(shù)據(jù)對(duì)齊,選擇右對(duì)齊

? ? ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部觸發(fā),使用軟件觸發(fā),不需要外部觸發(fā)

? ? ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;? ? ?//連續(xù)轉(zhuǎn)換,失能,每轉(zhuǎn)換一次規(guī)則組序列后停止

? ? ADC_InitStructure.ADC_ScanConvMode = DISABLE;? ? ? ? ? ?//掃描模式,失能,只轉(zhuǎn)換規(guī)則組的序列1這一個(gè)位置

? ? ADC_InitStructure.ADC_NbrOfChannel = 1;? ? ? ? ? ? ? ? ?//通道數(shù),為1,僅在掃描模式下,才需要指定大于1的數(shù),在非掃描模式下,只能是1

? ? ADC_Init(ADC1, &ADC_InitStructure);? ? ? ? ? ? ? ? ? ? ?//將結(jié)構(gòu)體變量交給ADC_Init,配置ADC1


? ? /*ADC使能*/

? ? ADC_Cmd(ADC1, ENABLE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //使能ADC1,ADC開始運(yùn)行


? ? /*ADC校準(zhǔn)*/

? ? ADC_ResetCalibration(ADC1);? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//固定流程,內(nèi)部有電路會(huì)自動(dòng)執(zhí)行校準(zhǔn)

? ? while (ADC_GetResetCalibrationStatus(ADC1) == SET);

? ? ADC_StartCalibration(ADC1);

? ? while (ADC_GetCalibrationStatus(ADC1) == SET);

}


/**

? * 函? ? 數(shù):獲取AD轉(zhuǎn)換的值

? * 參? ? 數(shù):ADC_Channel 指定AD轉(zhuǎn)換的通道,范圍:ADC_Channel_x,其中x可以是0/1/2/3

? * 返 回 值:AD轉(zhuǎn)換的值,范圍:0~4095

? */

uint16_t AD_GetValue(uint8_t ADC_Channel)

{

? ? ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_55Cycles5);? ?//在每次轉(zhuǎn)換前,根據(jù)函數(shù)形參靈活更改規(guī)則組的通道1

? ? ADC_SoftwareStartConvCmd(ADC1, ENABLE);? ? ? ? ? ? ? ? ?//軟件觸發(fā)AD轉(zhuǎn)換一次

? ? while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //等待EOC標(biāo)志位,即等待AD轉(zhuǎn)換結(jié)束

? ? return ADC_GetConversionValue(ADC1);? ? ? ? ? ? ? ? ? ? //讀數(shù)據(jù)寄存器,得到AD轉(zhuǎn)換的結(jié)果

}


您好,可以具體說一下所用MCU型號(hào),這邊測試一下,注意ADC初始化時(shí)需要根據(jù)校準(zhǔn)值進(jìn)行一下校準(zhǔn)。若使用多通道,注意ADC初始化時(shí)通道數(shù)要修改,要改成掃描模式,多通道建議使用DMA。后續(xù)若有問題,可郵箱(lzs@wch.cn)溝通。


你好,使用的是ch32v307,您所建議的還沒有進(jìn)行嘗試


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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