「雙重ADC 單通道 交替採集」問題及解決

2021-08-24 23:45:30 字數 1501 閱讀 2612

先看【正確採集】:

adc2 value = 0.835474 v 

adc1 value = 0.825000 v

adc2 value = 0.798413 v

adc1 value = 0.815332 v

再看【錯誤採集】

adc2 value = 0.000000 v 

adc1 value = 0.794385 v

adc2 value = 0.000000 v

adc1 value = 0.821777 v

問題出在哪呢?

【錯誤程式】:

//第 1 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]

adc_convertedvaluelocal[0] =(float)(((adc_convertedvalue[0] & 0xff00) >> 16)*3.3/4096);//2

adc_convertedvaluelocal[1] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1

//第 2 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]

adc_convertedvaluelocal[2] =(float)(((adc_convertedvalue[0] & 0xff00) >> 16)*3.3/4096);//2

adc_convertedvaluelocal[3] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1

【正確程式】:

//第 1 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]

adc_convertedvaluelocal[0] =(float)(((adc_convertedvalue[0] & 0xffff0000) >> 16)*3.3/4096);//2

adc_convertedvaluelocal[1] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1

//第 2 個請求:adc_cdr[31:0] = adc2_dr[15:0] | adc1_dr[15:0]

adc_convertedvaluelocal[2] =(float)(((adc_convertedvalue[0] & 0xffff0000) >> 16)*3.3/4096);//2

adc_convertedvaluelocal[3] =(float)((uint16_t)adc_convertedvalue[0]*3.3/4096);//1

問題一目了然了吧!

adc_convertedvalue是32位變數,& 0xff00後得到16位值,無論什麼值,只要再 >> 16,結果都會是0。(jnfxx)

STM32 ADC單通道單次採集

出處 今天講解 stm32f103 adc單通道單次採集 功能。獲取更多資訊。訪問密碼 de4f 訪問密碼 ca90 一 rcc時鐘配置 該函式位於在bsp.c檔案下面 使能rcc時鐘 rcc apb2periph adc1 二 引腳配置 該函式位於在adc.c檔案下面 對ad通道2所使用的引腳進行...

stm32adc多通道資料採集

工程連線 date 2013 8 28 author mei jilin brief adc1的配置完成3通道的資料採集 attention 1 adc config 配置adc 2 adc start 啟動adc,開始轉換 3 get channelvalue adc channel x 讀取相應...

STM32 ADC多通道採集電壓

前面的部落格中詳細介紹了stm32中adc的相關資訊,這篇部落格是對adc內容的乙個總結提公升,adc的詳細介紹 adc詳解 為了使這次 閱讀方便,博主沒有在標頭檔案中巨集定義變數,都是直接取樣庫函式中的規定形參。此次採用多通道採集電壓,使用adc1的通道10 11 12 13 14 15一共六個通...